2013-02-23 19 views
14

Ho notato in chrome che se carico un'immagine come una stringa base64 e poi scorrono attraverso quella parte della pagina, essa rallenta.È meglio caricare molti piccoli file JavaScript o un file JavaScript di grandi dimensioni?

Ho anche notato che quando esco da una scheda con il mio Javascript al suo interno e poi torno a quella scheda, sarà lento per alcuni secondi come se V8 ricominciasse a js.

Ci sono tre opzioni che posso pensare, ma non so quale sia il migliore:

  1. carico un piccolo caricamento della pagina prima e gestire successivo carico eloquentemente
  2. carico uno js enormi o file css con tutto (jquery + il mio codice + ecc)
  3. ciuffo determinati codici insieme (utilizzare jQuery CDN ma il mio codice di gruppo insieme)

Qual è il modo migliore per ottenere i vostri js caricati più velocemente e eloque nettamente possibile?

+0

Re tuo primo scenario, sarei sorpreso se così fosse - dopo tutto, il è probabile che l'immagine venga convertita in un formato interno che sarà lo stesso per base64 e per risorse esterne. –

+0

La risposta dipende. Se non hai bisogno di tutti gli script java subito, allora potrebbe essere meglio caricarli su richiesta in seguito. Esistono strumenti lato server come Require.js che consentono di risolvere questo problema. Cioè, che combinare e minimizzare, e che a carico pigro. – eSniff

risposta

2

Bene c'è un molto popolare concetto chiamato concatenazione. L'idea è di avere il minor numero possibile di richieste HTTP sul tuo server. Poiché ogni richiesta indica una nuova connessione, per la quale avviene la ricerca DNS, quindi l'handshake viene negoziata e quindi dopo alcuni passaggi più basati su protocollo, il server invia il file richiesto come risposta.

È possibile controllare http-archive per un elenco di best practice relative alle prestazioni.

Quindi sì, si dovrebbero mettere insieme tutti i file JS in uno (ci sono alcune eccezioni, come js alla testa e js a piè di pagina)

questa è la risposta per la domanda-titolo e punti 2 & 3.

Per quanto riguarda l'altra parte, non sono chiaro sullo scenario di cui stai parlando.

13

In genere, il caricamento di più file comporta un sovraccarico in HTTP piuttosto che combinarli in un numero inferiore di file. Esistono diversi modi per combinare i file per tutti i tipi di contenuto:

  • Per immagini, utilizzare CSS sprites.
  • Per javascript, compile your client-side code and libraries into one file, e ridurre per ridurre le dimensioni.
  • Per css, è possibile fare qualcosa di simile a quanto sopra. hem compiles stylus in un file css, ad esempio, e questo può aiutare anche organizzativamente.
  • Inoltre, quando si concatenano Javascript e CSS, il server web o il proxy inverso possono send them in compressed form per carichi di pagina più veloci. Questo sarà più efficiente per i file di grandi dimensioni in quanto c'è più da guadagnare dalla compressione.
+0

Commento per downvote? –

+0

(a proposito, non ti ho minimizzato). Generalmente sono d'accordo con te, ma ci sono alcune cose da considerare dal livello TCP. Ecco una buona lettura sull'argomento: http://www.stevesouders.com/blog/2010/07/13/velocity-tcp-and-the-lower-bound-of-web-performance/ – eSniff

0

Il numero di file da caricare ha un impatto sulla velocità di caricamento dell'intero sito. Vorrei raccomandare di inserire in un unico file javascript tutte le funzionalità richieste per la visualizzazione corretta del sito web.

8

Ci sono troppi maybes per questo avere alcuna soluzione garantiti, ma qui si va:

1) carico del CSS in alto - caricare tutto lì, se si sta facendo un sito con più pagine. Se stai realizzando un'applicazione di una pagina (in cui esegui gallerie e feed e articoli di Twitter, ecc. Sulla stessa pagina, e puoi aprire e chiudere diverse sezioni), puoi prendere in considerazione il caricamento di CSS specifici per widget, al momento stai caricando il tuo widget (se non è necessario all'avvio).

Do NON usa @import nel tuo CSS, se vuoi che si carichi rapidamente (lo fai).

2) carica la maggior parte del tuo JS nella parte inferiore della pagina.
Non c'è praticamente nulla che non possa essere pigro-caricato, o almeno non può essere inizializzato nella parte inferiore della pagina, dopo che il DOM è pronto, e se c'è davvero, servi quelli come file separati nella parte superiore della pagina e considera come potresti riscrivere per dipendere da loro meno.

3) fai attenzione ai timer - specialmente setInterval ... ... puoi far sì che le prestazioni della tua pagina siano un sacco di problemi con i timer gestiti male.

4) sii ancora più attento con gli event-handler su elementi come scroll, ridimensionamento, spostamento del mouse o key-down. Queste cose sparano molte, molte volte al secondo, quindi se hai scritto programmi di fantasia che dipendono da loro, devi ripensare a come fai il programma (ad esempio: non eseguirlo ogni volta che il gestore si spegne).

5) servire file JS è un compromesso: Compilare JS richiede un po '. Quindi, se stai caricando 40.000 righe in un file, il tuo browser si fermerà per un po 'mentre compila tutto questo.
Se si servono 18 file separati, è necessario effettuare 18 diverse chiamate al server.
Non è bello, neanche.

Quindi un buon bilanciamento è concatenare i file insieme che SAPETE che avrete bisogno per quella pagina, e quindi caricare pigro tutto ciò che è opzionale sulla pagina (come un widget per aggiungere un commento, o la lightbox widget, ecc.).
E caricarli entrambi dopo che tutti i prodotti principali sono attivi e funzionanti, O caricarli all'ultimo secondo possibile (come quando un utente preme il pulsante "aggiungi commento").

Se hai bisogno di avere 40.000 linee caricate nella tua app, non appena inizia, poi prendi il colpo, o decidi in quale ordine puoi caricarne ciascuno, e fornisci gli indicatori di "caricamento" (che dovresti fare su lazy-load sempre) per ciascun widget finché non è pronto (caricando il JS uno alla volta).

Queste sono le linee guida per aggirare i problemi di prestazioni generali.
Le specifiche sono difficili da rispondere anche quando il sito è direttamente di fronte a voi. Utilizza la console di sviluppo di Chrome per informazioni di profilo e prestazioni di rete e prestazioni di rendering, eccetera.

1

Recentemente ho avuto lo stesso problema, quindi ho sviluppato e rilasciato una libreria JS (licenza MIT) per eseguire questa operazione. Fondamentalmente, puoi mettere tutte le tue cose (js, immagini, css ...) in un archivio tar standard (che puoi creare lato server), e la libreria lo legge e ti permette di usare facilmente i file.

Troverete qui: https://github.com/sebcap26/FileLoader.js

Funziona con tutti i browser Recenti e IE> = 10.

Problemi correlati