5

私の GWT 大規模プロジェクトには、画像リソース用の ClientBundle があります。その中に約 40 個の GIF ファイルを定義しました。(各ファイルのサイズは約5KB)

次に、パラメーターとして取得する obj に適切な画像を設定する静的メソッドを持つクラスを作成します。

 public static void setImageFromId (String id,final Image img) {

    //for 1.gif
    if (id.equals("1")) {
        GWT.runAsync(new RunAsyncCallback() {
            @Override
            public void onFailure(Throwable reason) {}
            @Override
            public void onSuccess() {
                img.setResource(MyImages.INSTANCE.img1()); //MyImages is the ClientBundle
            }
        });
    }             

 }

    //for 2.gif
    if (id.equals("2")) {
        GWT.runAsync(new RunAsyncCallback() {
            @Override
            public void onFailure(Throwable reason) {}
            @Override
            public void onSuccess() {
                img.setResource(MyImages.INSTANCE.img2()); //MyImages is the ClientBundle
            }
        });
    }             

   //etc. for other images 3, 4, 5, ...
   //...

 }

コード分​​割に適したパターンですか? これを行わないと、最初の呼び出しで 40 個のファイルすべてがクライアント ブラウザにキャッシュされますが、これは必須ではありません。

RGDS

4

1 に答える 1

1

したがって、ページの読み込み時に各画像をダウンロードしないようにしようとしています。すべての画像が必要になるかどうかを前もってわからない場合は、これで問題ありません。

ただし、コードが行っていることは、コード分割を使用して、画像が必要なときにのみ画像を表示するコードをダウンロードすることです。これは、ご覧のとおり、画像ごとに 1 行のコードのみです。

このコードを試してください:

if (id.equals("1")) {
  img.setSrc(MyImages.INSTANCE.img1().getUrl());
} else if (id.equals("2")) {
  //.. and so on.
}

関連する画像が必要な場合にのみ、画像がダウンロードされて表示されます。FirebugまたはChrome の開発者ツールを使用して、画像がいつダウンロードされているかを確認できます。必要な場合にのみ要求する必要があります。

さらに質問がある場合、またはページの読み込み時にすべての画像がダウンロードされていることがわかった場合は、お知らせください。回答を再度編集してお手伝いします.

于 2011-01-16T15:51:46.633 に答える