Шаблон разделения кода GWT для ресурсов изображений ClientBundle
В моем большом проекте GWT у меня есть ClientBundle для моих ресурсов изображений. Я определил около 40 файлов GIF внутри него. (размер каждого файла составляет около 5 КБ)
Затем я создаю класс со статическим методом, чтобы установить правильное изображение для объекта 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 файлов будут кэшированы в браузере клиента при первом вызове, но это не обязательно.
УВАЖЕНИЕ
1 ответ
Таким образом, вы пытаетесь избежать загрузки каждого изображения при загрузке вашей страницы. Это хорошо, если вы не знаете заранее, понадобится ли каждое изображение.
Но то, что делает ваш код, использует расщепление кода, чтобы загружать код только для отображения ваших изображений, когда изображение необходимо, что, как вы можете видеть, составляет всего одну строку кода на изображение.
Попробуйте этот код:
if (id.equals("1")) {
img.setSrc(MyImages.INSTANCE.img1().getUrl());
} else if (id.equals("2")) {
//.. and so on.
}
Ваши изображения будут загружаться и отображаться только тогда, когда необходимо соответствующее изображение. Вы можете использовать Firebug или Chrome Developer Tools, чтобы увидеть, когда загружаются ваши изображения, их следует запрашивать только при необходимости.
Если у вас есть еще вопросы или вы обнаружили, что все ваши изображения загружаются при загрузке страницы, дайте мне знать, и я снова отредактирую свой ответ, чтобы выручить вас.