2010-07-13 10 views
17

Se il tuo sito web ha abilitato la compressione di deflate/zip, c'è qualche punto per la minifrazione di JavaScript?C'è qualche punto per la minifrazione di JavaScript se la compressione è attivata?

La mia teoria è che la differenza tra un file JavaScript minuscolo compresso e un file JavaScript non ancora compresso è trascurabile.

Ci sono pochissimi browser rimasti fuori che non supportano la compressione. Immagino che alcuni bot (spider) potrebbero non supportare la compressione (ne conosco almeno uno), ma è improbabile che siano "interessati" al tuo JavaScript, poiché è improbabile che eseguano JS e quindi non dovrebbero scaricarlo.

+2

Vedere [Gzip versus minify] (http://stackoverflow.com/questions/807119/gzip-versus-minify). –

+1

Il minification estrae i commenti, riducendo le dimensioni oltre la compressione da sola. –

+1

minified analizzerà più velocemente il client e farà risparmiare più spazio rispetto alla sola compressione –

risposta

28

Proviamo a testarlo. Ho usato jQuery 1.4.2 e gzip (senza bandiere; non sembra fare una differenza significativa) per ottenere i seguenti numeri.

  • sviluppo: 163.855 byte
  • Sviluppo compressi: 45.994 bytes
  • minified: 72,174 bytes
  • minified compressi: 24.565 byte

Quindi, in questo particolare caso, minification rende il file quasi due volte più piccolo. Certo, la versione di sviluppo è piena di commenti. Diamo spellare quelli fuori, e vediamo cosa succede:

  • Stripped: 131.155 byte
  • Stripped compressi: 32.914 byte

che è ancora significativamente più grande rispetto alla versione minified.

2

Avere un file minificato prima di gzip farà una leggera differenza nelle prestazioni del server, anche se dubito che si sommi molto. Minification rimuoverà i commenti, che gzip/deflate non lo faranno, ma a parte questo direi che sei corretto.

Naturalmente, c'è sempre IE6. Nella mia esperienza, questo browser è inaffidabile quando si tratta di gzippare qualcosa di diverso da text/html. È quasi al punto in cui non ha importanza, tuttavia, poiché l'utilizzo di IE6 continua a diminuire.

+1

È quasi * al punto in cui non ha importanza? Vorrei che i miei clienti avessero la stessa opinione. È come il tropo "un po 'incinto": purché uno dei tuoi clienti insista sul supporto IE6, devi supportarlo. Vorrei che l'inferno Microsoft forzasse questo problema in qualche modo e lo sbarazzasse del tutto. – Robusto

+0

Certo, se stai facendo il lavoro del cliente tocca a loro. In caso contrario, è una tua discrezione: recentemente solo il 2,5% dei visitatori dei siti con cui lavoro utilizza IE6. Continuiamo a supportarlo, ma probabilmente se non lo facessimo, l'effetto non sarebbe molto grande. Mi aspetto di smetterla di preoccuparmene tra circa un anno. – JAL

+0

MS potrebbe aiutare a forzare il problema offrendo aggiornamenti gratuiti dalle vecchie versioni di InfoPath a InfoPath 2010. Vedo "InfoPath" in un sacco di stringhe user-agent IE6 dal mondo aziendale (tramite un sito che ha ancora circa il 30% IE6 perdenti utenti). Apparentemente, se installi IE7 con il vecchio InfoPath, le cose si interrompono. – Matt

2

ho cercato di zip jquery-1.3.2 in entrambe le versioni originali e minified:

jquery-1.3.2.js  118 kb -> 36 kb 
jquery-1.3.2.min.js 56 kb -> 20 kb 

Quindi, prima di comprimere Minimizzando fa fare un diffence sostanziale.

+0

È interessante. Qualche speculazione sul perché potrebbe essere, oltre alla rimozione dei commenti? – JAL

+1

Minification rende il codice molto più omogeneo, il che significa che può essere meglio compresso. Hai meno "rumore" (nomi di variabili lunghe) e molti altri simboli '() [] {}' ecc.che consente un rapporto di compressione più alto, proprio come un file pieno di zeri finirà per essere piccolo quando compresso, rispetto a uno con dati reali (non tutti gli zeri ecc.) –

+0

Certo, se si utilizza il minification che rinomina le variabili che hanno senso . Non è qualcosa di più simile a Closure Compiler? Stavo pensando al tipo che rimuove solo spazi e commenti. – JAL

1

Credo che una versione minificata sarà più veloce. Le variabili sono ora 1-2 glifi lunghi, quindi l'analisi è più veloce, gli spazi bianchi e i commenti non sono un problema. Ovviamente, è necessario progettare un test per poter effettivamente effettuare indicare qualsiasi differenza.

La compressione per la piattaforma mobile presenta vantaggi e svantaggi. Sì, si scarica un po 'più velocemente, ma la decompressione consuma la durata della batteria.

--Dave

0

Ogni byte conta. Più risparmi, meglio è.

0

È anche possibile utilizzare un compressore/packer JavaScript che utilizza qualcosa come la codifica base-62 (ad esempio, this).

Può trasformare 72174 byte (jquery-1.4.2.min.js) in circa 50640 byte. Tuttavia, se gzipping ulteriormente, non migliorerà la compressione rispetto a un gzipping diretto del file minified (anche 24K).

(Potrebbe anche essere necessario conservare le intestazioni di licenza se si utilizza un compressore/packer, circa 400 byte in questo esempio).

+0

Non utilizzare un compressore JavaScript; il file da trasferire avrà approssimativamente le stesse dimensioni, ma si caricherà più lentamente, poiché la decompressione all'interno di JavaScript è * più * più lenta della decompressione utilizzando GZip nativo. Vedi http://www.ericmmartin.com/comparison-of-javascript-compression-methods/ –

+0

Stavo considerando la dimensione, ma hai ragione. – Bruno

0

Controlla il sito per gli sviluppatori di Yahoo - http://developer.yahoo.com/performance/rules.html - per alcune spiegazioni sul perché la minimizzazione e la compressione sono buone. Inoltre, dai un'occhiata a Steve Souders (High Performance Web Sites - fantastico sito e libro!).

Eviterei di offuscare a meno che non si voglia davvero spremere il più possibile dai propri script. L'offuscamento, a seconda di come hai scritto il tuo JavaScript, potrebbe causare errori. Potresti stare meglio solo minificando e ricevendo l'80-90% della strada.

Buona fortuna!

0

Tenere presente che la minificazione in realtà elimina le informazioni. Gli spazi bianchi/commenti/nomi di variabili lunghe/ecc ... sono completamente scartati (non possono essere recuperati).

La compressione del server, d'altra parte, deve essere senza perdite, quindi non può eliminare alcuna informazione. Può solo comprimere it.

La compressione del server non può quindi (teoricamente) raggiungere gli stessi livelli di compressione che può raggiungere (teoricamente) la minificaiton.

Remember, though that while theory and practice are theoretically the same, in practice they never are. :-)

Problemi correlati