2008-11-29 21 views
7

Bene .. abbiamo sviluppato un'applicazione j2ee usando le funzionalità ajax di struts2. Scopriamo che l'implementazione del dojo è piuttosto lenta. Abbiamo fatto le seguenti cose: 1. Creazione personalizzata della libreria dojo. (aumento di dojo.js da 240kb a 350kb) 2. Estrasse tutta la roba statica dal barattolo e la tenne fuori.I file Struts 2 e Dojo sono troppo pesanti e influiscono sulle prestazioni del sito. Eventuali rimedi?

Le prestazioni sono state notevolmente migliorate. Ma è ancora abbastanza pesante, come si può intuire con una dimensione di 350kb.

È supponente che atsax2 sia così pesante? o è disponibile un'implementazione più leggera?


Modifica: ho usato Firebug e YSlow con la mia applicazione. Paio di modifiche che hanno migliorato la mia situazione di enorme sono di seguito indicate: costruire

  1. personalizzato del dojo (ridotto il numero di I/O)
  2. Spostare i file statici dal vaso Struts (aiutato molto)
  3. sintonizzare il vostro server per gzip la risposta (ridotto le dimensioni risposta a 1/3)
  4. ridurre il numero di immagini sul vostro sito. (questo è ovvio)

Vi consentirà di mantenere l'aggiornamento di ulteriori modifiche ..

risposta

8

Prima di tutto verifica di aver eseguito tutto sul server per facilitare la memorizzazione nella cache (ad esempio, impostando intestazioni HTTP corrette, compressione, memorizzazione nella cache sul lato server, cache upstream e così via). Vedi Improving performance… per maggiori dettagli.

L'obiettivo è ridurre il più possibile l'I/O — utilizzare Firebug o qualsiasi altro strumento di monitoraggio del traffico di rete per vedere quanto viene inviato avanti e indietro. Cerca di minimizzare il numero di richieste I/O e il numero totale di byte.

Non dimenticare che si applica anche ai dati dinamici — scegli formati efficienti, raggruppa più richieste correlate insieme, rimuovi tutto il deadwood che viene inviato ripetutamente invariato.

Se la modifica personalizzata e le modifiche apportate al lato server non sono state d'aiuto, è consigliabile ristrutturare l'app Web in modo che sia più leggera. Esempi:

  • Valutare la tecnica della schermata iniziale discussa nel collegamento sopra.
  • Se si utilizzano molti widget di moduli diversi, verificare se è realmente necessario e utilizzare elementi DOM regolari come "input", "button", "textarea", "select".
  • Lo stesso vale per i widget di layout. Verifica se il CSS semplice può aiutarti.
  • Valutare la costruzione di Dojo in strati invece di un dojo.js monolitico in modo che solo il sottoinsieme necessario venga caricato dalle pagine Web. Vedere i dettagli in The Package System and Custom Builds.

di applicazioni Web con Dojo per una vita per ultimi 2 anni ancora non ho visto quello che non può essere ottimizzato correttamente fino a quando non è completamente accettato e percepito dagli utenti finali come "veloce", "agile", e "leggero".

+0

Ciao Eugene .. È normale avere dojo.js filesize di 300+ kb? poiché questa era una delle mie preoccupazioni pure ... Grazie. – Satya

+0

La base è 26k. 300k significa che hai incluso molte altre cose. –

0

L'ultima volta che ho controllato, i montanti inviavano una versione di Dojo (0.4) che sta succedendo a 2 anni. Dojo ha effettuato una riscrittura per la versione 0.9/1.0 che ha ottenuto miglioramenti significativi delle prestazioni e dimensioni ridotte del codice. Dovresti assicurarti di avere una versione recente di Dojo (la versione corrente è la 1.2.3) e utilizzare la build e i suggerimenti di Eugene, sopra.

+0

Quanto è buona la compatibilità di Struts con le versioni avanzate di dojo? Non l'ho provato ma ne dubito. Grazie. – Satya

2

Assicurati di seguire questa faq prima: http://struts.apache.org/2.x/docs/performance-tuning.html

Io di solito ri-scrivere il mio proprio tema invece di usare il tema Ajax Struts2 che ha dojo costruito in questo modo posso utilizzare qualsiasi toolkit voglio usare. (jQuery). Ho visto i più grandi miglioramenti delle prestazioni quando ho copiato la cartella dei modelli dal jar alla directory web di root per la webapp.