Question

Je suis en train d'essayer de mieux comprendre l'utilisation de GWT ClientBundle et la mise en cache.

Si j'ai un gros fichier texte, par exemple, que je voudrais faire à la disposition de mes clients, je peux l'utiliser

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(); 

Est-ce à dire que le fichier "myText.txt" serait téléchargé depuis le serveur la première fois que le client s'exécute l'application, puis le fichier est stocké dans le cache du navigateur de sorte qu'à l'avenir, les utilisations de l'application, le fichier n'a pas besoin d'être téléchargé?

Si oui, qu'advient-il si je change d' "myText.txt", l'application pour obtenir la nouvelle version?

Enfin, si le fichier est en effet stocké dans le cache, alors comment est-ce différent de stockage local HTML5?

Merci.

Était-ce utile?

La solution

  • Comme Daniel Kurka déjà mentionné, les ressources peuvent être intégrées dans le fichier js (un *.cache.* fichier) où le reste de la compilation GWT code de vie.
  • Inline ne se produit pas pour toutes les ressources d'un client ensemble.E. g.les grandes images ne sont jamais inline, il peut également être évités avec @ImageOptions.preventInlining(), et il ne se produit pas pour ExternalTextResources.

Ce qui est commun pour les deux cas, c'est que les résultats seront en *.cache.* les fichiers avec les noms qui changent automatiquement chaque fois que le contenu d'un fichier de source de changement (vous devrez recompiler l'application GWT si!)

Cela permet au serveur d'envoyer ces fichiers par approprié de la mise en cache des en-têtes HTTP (vous devrez le configurer vous-même!) Pour le client, cela signifie qu'il ne sera pas seulement être en mesure de mettre en cache le contenu (ce qui n'est de toute façon, même si ces en-têtes ne sont pas définies), mais il peut même sauter en demandant au serveur, si une version plus récente existe.

Le gros avantage de ClientBundles, c'est que les noms de fichier sera modifié automatiquement.Le plus grand inconvénient est que vous doit recompiler votre application GWT, lorsqu'un changement dans les ressources.Si vous ne voulez pas cela, alors il est préférable d'utiliser une autre méthode pour charger les fichiers:Vous pouvez toujours faire le cache du navigateur de n'importe quel fichier que vous souhaitez (en définissant les en-têtes HTTP), mais alors vous devrez être prudent manuellement leur donner un nouveau nom, lorsque les changements de contenu.

Autres conseils

Vous devez utiliser une ressource texte externe si vous souhaitez qu'il soit chargé à la demande et non comme faisant partie de JavaScript compilé.

https://developers.google.com/web-toolkit/Doc / Dernières / DevGuideclientBundle # TextreSource

Si vos utilisateurs ont besoin de l'ensemble du fichier, utilisez une ressource texte.Si les utilisateurs ont besoin de certaines parties, divisez ce fichier en fichiers plus petits distincts: seul le fichier demandé sera chargé en cas de besoin.

Les ressources textuelles externes peuvent être cachées comme tous les autres fichiers statiques.

Les fichiers qui sont à l'intérieur d'une clientèle client sont inlinés dans votre JavaScript compilé.Ils ne seront pas téléchargés séparément.Si vous souhaitez télécharger une ressource à un moment donné, vous pouvez facilement utiliser Demander Builder pour cela.

Si vous ne voulez pas télécharger le fichier immédiatement, mais vous souhaitez toujours l'aligner, vous pouvez utiliser le fractionnement de code et mettre le paquet dans une autre partie de votre application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top