2015-08-16 19 views
6

Quale risulterebbe in una maggiore velocità/efficienza: riferimento a un file JavaScript per tutti i file nella directory O riferimento a un file JavaScript diverso per ogni file nella directory?Riferimento a file JS separati rispetto a un file JS

Fondamentalmente, facendo riferimento allo stesso file JavaScript in tutte le pagine Web rispetto a un file JavaScript univoco per ogni pagina web.

Nota: ho pensato che la referenziazione del singolo file sarebbe stata più lenta in quanto è presente del codice obsoleto in alcuni file, che quindi esegue codice inutile e causa l'esecuzione del file meno efficiente.

+0

Per quanto riguarda la lettura di codice inutile da altri file, non dovrebbe un singolo file JS essere più lento a causa del codice obsoleto coinvolto con altri file? –

risposta

8

Ci sono dei compromessi in modo che tu possa in definitiva dover misurare le tue circostanze specifiche per essere sicuro. Ma, spiegherò alcuni dei compromessi.

  1. Se hai quantità enormi di dati o gli importi enormi di codice che vengono utilizzati solo in una o poche pagine, allora probabilmente si desidera separare quello fuori nel proprio file solo così si può solo caricarlo, inizializzarlo e farlo prendere memoria quando è effettivamente necessario. Ma, nota con la quantità di memoria nei computer moderni (anche i telefoni di questi tempi), i dati o il codice devono essere abbastanza grandi da giustificare un download separato.

  2. A parte l'articolo 1, si preferisce sempre ottimizzare per la memorizzazione nella cache massima. Il recupero di un file (anche di un file più grande del necessario) dalla cache è molto più rapido del recupero di qualsiasi file (anche di un file di piccole dimensioni) sulla rete che si desidera ottimizzare per il caching. Inoltre, il tempo necessario per recuperare questi file supera di gran lunga il tempo di analisi di JS (le CPU sono piuttosto veloci al giorno d'oggi), quindi è improbabile che un download aggiuntivo per salvare un po 'di tempo di analisi JS sia più veloce.

  3. Il modo migliore per ottimizzare la memorizzazione nella cache è : la maggior parte delle pagine fa riferimento agli stessi file di script comuni. Quindi, vengono caricati una volta quando l'utente visualizza per la prima volta il tuo sito e tutti i carichi successivi provengono direttamente dalla cache del browser. Questo è l'ideale Questa efficienza di caching supera facilmente il codice inutilizzato o non codificato nel file master che non viene utilizzato in alcune pagine.

  4. Un sacco di piccoli download (anche dalla cache) è meno efficiente di un download più grande. Più richieste separate in genere non sono altrettanto efficienti né per il browser né per il server. Quindi, combinare file JS in file concatenati più grandi è generalmente una buona cosa.

  5. Ci sono dei limiti a tutto questo. Se avessi completamente separato il codice per 100 pagine separate tutte concatenate insieme e ogni parte di codice cercherebbe il DOM per più elementi di pagina (e non li troverà il 99% delle volte), allora probabilmente non è un modo efficiente di fare le cose . Ma, in genere, puoi rendere il tuo codice condiviso più intelligente suddividendo le cose in categorie basate su un nome di classe di alto livello. Quindi, ad esempio, in base alla presenza di un nome di classe sul tag <body>, si esegue quindi solo parte del codice di inizializzazione, saltando il resto perché la sua classificazione non è presente.Quindi, quando si combina il codice, molti dei quali non saranno rilevanti in nessuna pagina, è saggio essere intelligenti nel modo in cui si decide quale codice di inizializzazione nel file condiviso venga effettivamente eseguito.

3

È necessario misurare per il caso specifico - poiché ogni sito/pagina ha il proprio equilibrio tra il caricamento di meno file/il caricamento di script aggiuntivi non necessari (lo stesso vale anche per i CSS).

Generalmente il singolo file è più veloce in HTTP v1 in quanto vi sono restrizioni sul numero totale di download paralleli, HTTP v2 dovrebbe rimuovere la differenza.

Problemi correlati