2011-01-16 8 views
5

W moim dużym projekcie GWT mam ClientBundle dla moich zasobów graficznych. Zdefiniowałem w nim około 40 plików GIF. (Rozmiar każdego pliku jest o 5KB)Wzorzec dzielenia kodu GWT dla zasobów obrazu ClientBundle

Potem utworzyć klasę statyczną metodę ustalania właściwego obrazu do obj że dostać jako parametry:

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, ... 
    //... 

} 

Chcę wiedzieć, czy to dobry wzór do dzielenia kodu? ponieważ jeśli tego nie zrobię, wszystkie 40 plików zostanie zapisanych w pamięci podręcznej do przeglądarki klienta podczas pierwszego połączenia, ale nie jest to konieczne.

Rgds

Odpowiedz

1

więc starasz się unikać pobierania każdy obraz podczas wczytywania strony. To dobrze, jeśli nie wiesz z góry, czy każdy obraz będzie potrzebny.

Ale kod jest wykonywany za pomocą dzielenia kodu, aby pobrać tylko kod, aby wyświetlić obrazy, gdy obraz jest potrzebny, co jak widać, to tylko jedna linia kodu na obraz.

Spróbuj ten kod:

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

Twoje zdjęcia zostaną pobrane i wyświetlone, gdy potrzebna jest odpowiednia tylko obraz. Możesz użyć Firebug lub Chrome's Developer Tools, aby zobaczyć, kiedy pobierane są Twoje zdjęcia, powinny one być wymagane tylko w razie potrzeby.

Jeśli masz dodatkowe pytania lub uważasz, że wszystkie Twoje zdjęcia są pobierane po załadowaniu strony, daj mi znać, a ja ponownie edytuję swoją odpowiedź, aby Ci pomóc.

+1

Nie mogę cię zrozumieć! czy mógłbyś podać przykład? Jeśli tego nie zrobię, przy pierwszym wywołaniu "setImageFromId (..)" wszystkie zasoby zostaną pobrane jako x.cache.js (40 * 5KB = 200KB), a ja właśnie potrzebowałem jednego z nich (5KB) – Nav

+0

Edytowałem moja odpowiedź, mam nadzieję, będzie bardziej klarowna. Daj mi znać, jeśli nie jest, lub jeśli okaże się, że to nie działa dla ciebie. –

+0

masz na myśli w tych przypadkach powinienem uzyskać obrazy przez setUrl nie setResource? – Nav

Powiązane problemy