3

GWT ClientBundle とキャッシングの使用をよりよく理解しようとしています。

たとえば、クライアントに提供したい大きなテキスト ファイルがある場合は、

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

これは、クライアントが最初にアプリを実行したときにファイル「myText.txt」がサーバーからダウンロードされ、その後ファイルがブラウザーのキャッシュに保存されるため、今後アプリを使用するときにファイルがダウンロードされないことを意味しますか?ダウンロードする必要がありますか?

その場合、「myText.txt」を変更するとどうなりますか?アプリは新しいバージョンを取得することを認識していますか?

最後に、ファイルが実際にキャッシュに保存されている場合、これは HTML5 のローカル ストレージとどう違うのでしょうか?

ありがとう。

4

3 に答える 3

5
  • Daniel Kurka が既に述べたように、リソースは*.cache.*、コンパイルされた GWT コードの残りが存在する js ファイル (ファイル) にインライン化できます。
  • クライアント バンドル内のすべてのリソースに対してインライン化が行われるわけではありません。たとえば、大きな画像は決してインライン化され@ImageOptions.preventInlining()ず、 で防止することもでき、ExternalTextResources では発生しません。

どちらの場合にも共通しているのは、結果が*.cache.*ファイルに保存され、ソース ファイルの内容が変更されるたびに自動的に変更される一意の名前が付けられることです (ただし、GWT アプリを再コンパイルする必要があります)。

これにより、サーバーは適切なキャッシング HTTP ヘッダーを使用してこれらのファイルを配信できます (これは自分で設定する必要があります!) クライアントにとって、これは、コンテンツをキャッシュできるだけでなく、これらのヘッダーは設定されていません)、新しいバージョンが存在する場合、サーバーへの問い合わせをスキップすることさえできます。

ClientBundles の大きな利点は、ファイル名が自動的に変更されることです。最大の欠点は、リソースが変更されたときに GWT アプリを再コンパイルする必要があることです。それを望まない場合は、別のアプローチを使用してファイルをロードすることをお勧めします: (HTTP ヘッダーを設定することにより) ブラウザーに任意のファイルをキャッシュさせることもできますが、その場合は注意が必要です。コンテンツが変更されたときに、手動で新しい名前を付けます。

于 2012-09-29T17:33:00.123 に答える
4

コンパイル済み JavaScript の一部としてではなく、必要に応じてロードする場合は、外部テキスト リソースを使用する必要があります。

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

ユーザーがファイル全体を必要とする場合は、1 つのテキスト リソースを使用します。ユーザーがその一部を必要とする場合は、このファイルを別々の小さなファイルに分割してください。要求されたファイルのみが必要なときにロードされます。

外部テキスト リソースは、他のすべての静的ファイルと同様にキャッシュできます。

于 2012-09-29T15:27:38.523 に答える
3

clientbundle 内のファイルは、コンパイル済みの JavaScript にインライン化されます。個別にダウンロードされることはありません。特定の時間にリソースをダウンロードしたい場合は、リクエストビルダーを簡単に使用できます。

ファイルをすぐにダウンロードしたくないが、それでもインライン化したい場合は、コード分割を使用して、バンドルをアプリの別の部分に配置できます。

于 2012-09-29T12:35:41.340 に答える