La nostra azienda ha utilizzato le versioni più recenti del framework Dojo, che sono progredite in un formato caricatore basato su AMD. Attualmente sto cercando di trovare dei modi logici per separare i file di livello, prendere un modulo e tutte le sue dipendenze e avvolgerli tutti in singoli file minificati. I miei obiettivi sono generalmente i seguenti:
- Riduci al minimo il numero di richieste separate effettuate per pagina
- Se possibile, utilizza la cache in modo da recuperare nuovamente i moduli di grandi dimensioni già utilizzati.
La nostra app è composta da molte centinaia di pagine e finestre di dialogo, molte delle quali hanno una propria logica personalizzata e script correlati.
Sto iniziando a imbattersi in problemi sempre più complessi in termini di trovare il modo giusto per costruire file di livelli per le migliori prestazioni. Proprio di recente, mi sono imbattuto nel seguente tipo di scenario:
A dipende da B, dipende da C, dipende da D ... ecc ... dipende da Z.
A1 dipende da D (che dipende da ... Z)
A2 dipende da L (che dipende da ... Z)
Lo scenario è per lo più solo un esempio: non ho 24 dipendenze in un albero retto. Ma con il nostro metodo precedente di dichiarare semplicemente tutti gli oggetti globalmente sotto uno spazio dei nomi, si tratta semplicemente di minimizzare tutto in un file di livello incluso nelle pagine pertinenti. Così com'è ora, non sono sicuro di cosa guadagnerei facendo di D il suo livello, o A o L. Proprio per evitare di caricare lo stesso codice due volte, lo separeremmo in circa 3 o 4 richieste. Un dato problematico è il modo in cui lo script della pagina emette immediatamente nuove richieste di script per qualsiasi cosa nel suo blocco "require ()" che non ha ancora memorizzato nella cache. Inoltre, è diventato molto complicato solo per comprendere e discutere.
Volevo sapere in che modo le altre persone tendono ad affrontare questo problema, si spera in un modo più semplice; la versione precedente del nostro prodotto presentava alcuni significativi problemi di caricamento in tempo reale, quindi questo non è certamente l'ottimizzazione prematura (potrebbe essere "passato-maturo"). Stiamo iniziando a cambiare le nostre pagine per utilizzare tag script caricati in modo asincrono ora che la maggior parte dei nostri script lo supporta, nel caso sia utile.