2011-01-16 9 views
5

Nel mio progetto GWT grande, ho un ClienteBundle per le mie risorse immagine. Ho definito circa 40 file GIF al suo interno. (Dimensione di ogni file è di circa 5 KB)Schema di divisione codice GWT per risorse immagini ClienteBundle

Poi ho creare una classe con un metodo statico per impostare l'immagine propria del obj che ottengono come parametri:

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

} 

che voglio sapere è buon motivo per la divisione del codice? perché se non lo faccio tutti i 40 file verranno memorizzati nella cache del browser client in prima chiamata, ma non è necessario.

RGDS

risposta

1

Quindi si sta cercando di evitare di scaricare ogni immagine quando la pagina carichi. Va bene, se non sai in anticipo se ogni immagine sarà necessaria.

Ma, ciò che il codice sta facendo sta usando il codice-splitting di scaricare solo il codice per visualizzare le immagini quando è necessaria l'immagine, che come potete vedere, è solo una riga di codice per immagine.

provare questo codice:

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

Le immagini verranno scaricati e visualizzati quando è necessaria l'immagine rilevante solo. Puoi utilizzare Firebug o Chrome's Developer Tools per vedere quando le tue immagini vengono scaricate, devono essere richieste solo quando necessario.

Se hai altre domande o trovi che tutte le tue immagini sono state scaricate al caricamento della pagina, fammelo sapere e modificherai di nuovo la mia risposta per aiutarti.

+1

Non riesco a capirti! potresti per favore dare un esempio? Se non lo faccio, con la prima chiamata a "setImageFromId (..)" tutte le risorse vengono scaricate come x.cache.js (40 * 5 KB = 200 KB) mentre ne avevo solo bisogno uno (5 KB) – Nav

+0

che ho modificato la mia risposta è, si spera, più chiara. Fammi sapere se non lo è, o se trovi che non funziona per te. –

+0

vuoi dire in questi casi dovrei ottenere immagini da setUrl non setResource? – Nav

Problemi correlati