Pergunta

Estou tentando entender melhor o uso do GWT ClientBundle e do cache.

Se eu tiver um arquivo de texto grande, por exemplo, que gostaria de disponibilizar para meu cliente, posso usar

public interface MyResources extends ClientBundle {
    public static final MyResources INSTANCE =  GWT.create(MyResources.class);    
      @Source("myText.txt")
      public TextResource myText();
}
//-- then later to use the text
String text = MyResources.INSTANCE.myText().getText(); 

Isso significa que o arquivo "myText.txt" seria baixado do servidor na primeira vez que o cliente executasse o aplicativo e, em seguida, o arquivo seria armazenado no cache do navegador para que em usos futuros do aplicativo, o arquivo não precisa ser baixado?

Em caso afirmativo, o que acontece se eu alterar "myText.txt". O aplicativo sabe como obter a nova versão?

Finalmente, se o arquivo estiver realmente armazenado no cache, como isso difere do armazenamento local em HTML5?

Obrigado.

Foi útil?

Solução

  • Como Daniel Kurka já mencionou, os recursos podem ser incorporados no arquivo js (um *.cache.* arquivo) onde reside o restante do código GWT compilado.
  • O inlining não ocorre para todos os recursos em um pacote configurável do cliente.Por exemplo.imagens grandes nunca são incorporadas, isso também pode ser evitado com @ImageOptions.preventInlining(), e isso não ocorre para ExternalTextResources.

O que é comum em ambos os casos é que os resultados estarão em *.cache.* arquivos, com nomes exclusivos que mudam automaticamente sempre que o conteúdo de um arquivo de origem muda (você terá que recompilar o aplicativo GWT!)

Isso permite que o servidor entregue esses arquivos com cabeçalhos HTTP de cache apropriados (você terá que configurar isso sozinho!) Para o cliente, isso significa que ele não apenas será capaz de armazenar em cache o conteúdo (o que acontece de qualquer maneira, mesmo que esses cabeçalhos não estejam definidos), mas pode até pular perguntando ao servidor se existe uma versão mais recente.

A grande vantagem do ClientBundles é que os nomes dos arquivos serão alterados automaticamente.A maior desvantagem é que você deve recompile seu aplicativo GWT quando um recurso for alterado.Se você não quiser isso, é melhor usar outra abordagem para carregar os arquivos:Você ainda pode fazer com que o navegador armazene em cache qualquer arquivo que desejar (definindo os cabeçalhos HTTP), mas terá que ter cuidado ao atribuir-lhes manualmente um novo nome, quando o conteúdo for alterado.

Outras dicas

Você deve usar um recurso de texto externo se quiser que ele seja carregado sob demanda e não como parte do JavaScript compilado.

https://developers.google.com/web-toolkit/doc/latest/DevGuideClientBundle#TextResource

Se seus usuários precisarem do arquivo inteiro, use um recurso de texto.Se os usuários precisarem de partes dele, divida este arquivo em arquivos menores separados:apenas o arquivo solicitado será carregado quando necessário.

Os recursos de texto externos podem ser armazenados em cache como todos os outros arquivos estáticos.

Os arquivos que estão dentro de um clientbundle são incorporados ao seu javascript compilado.Eles não serão baixados separadamente.Se quiser baixar um recurso em um determinado momento, você pode facilmente usar o construtor de solicitações para isso.

Se você não quiser baixar o arquivo imediatamente, mas ainda quiser incorporá-lo, poderá usar a divisão de código e colocar o pacote em outra parte do seu aplicativo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top