2012-04-17 5 views
20

So di un similar question ma è un po 'piccola fuori da quello che sto chiedendo qui, quindi si prega di no flag come un duplicato.Perché abbiamo newline in JavaScript minisito?

Quando vedi lo production version of jQuery, perché c'è una nuova linea dopo un po '? Ho scaricato una copia e cancellato tutte le newline (tranne la licenza) e funzionava ancora. (Ho eseguito l'intera suite di test unità contro le mie modifiche su Mozilla Firefox, Google Chrome e Opera.)

The problem. In Google Chrome's "view source"

so tre nuove righe (senza contare la licenza) non ha intenzione di rallentare un molto, ma ancora, non ogni piccolo aiuto?

Mi sono assegnato una piccola sfida, per spremere ogni piccolo risultato dal mio codice JavaScript.

+0

È possibile includere le righe pertinenti? –

+0

@JamesMontagne cosa intendi con questo? di jQuery? –

+0

Hai eseguito la ** suite di test unità ** completa contro le tue modifiche? – mgnoonan

risposta

24

jQuery currently use UglifyJS per minimizzare il codice sorgente. In their build script, hanno specifically set la direttiva max_line_length di essere 32 * 1024:

Il documentation for UglifyJS ha questo da dire sulla direttiva max-line-len;

--max-line-len (caratteri 32K predefiniti) - aggiungere una nuova riga dopo circa 32 caratteri. Ho visto sia FF che Chrome gracchiare quando tutto il codice era su una singola riga di circa 670K. Pass -max-line-len 0 per disabilitare questa funzione di sicurezza.

+0

Perché non eliminano manualmente le nuove linee? –

+6

@AnishGupta cosa non ottieni? VOGLIONO le novità. Hanno configurato il loro script minify in modo che avrebbe messo le newline lì. –

+1

@ Xeon06 Ma perché? –

4

Le linee (esclusa la licenza) hanno una lunghezza di circa 30 caratteri. Potrebbe essere evitare errori in cui alcuni parser di Javascript muoiono su linee estremamente lunghe. Questo probabilmente non succederà sui browser di oggi, ma forse alcuni più vecchi o più oscuri hanno tali limiti.


(Old risposta qui sotto, che potrebbe anche essere applicabile, non solo in questo caso)

Questo potrebbe essere dovuto al fatto JSMin, un Javascript popolare minifier manterrà la linea feed in uscita a determinate condizioni . Questo perché nei feed di riga Javascript sono significativi se si esclude il punto e virgola, ad esempio. La documentazione dice:

È più prudente nell'omettere i linefeed, poiché i linefeed sono talvolta trattati come punti e virgola. Un avanzamento non è omessa se precede un carattere non ASCII o una lettera ASCII o cifre, o uno dei seguenti caratteri:

\ $ _ { [ (+ - 

e se segue un carattere non ASCII o una lettera ASCII o cifre, o uno dei questi personaggi:

\ $ _ } ]) + - " ' 

Altri minifiers potrebbero avere regole simili.

Quindi questa è principalmente una precauzione contro la rimozione accidentale di un avanzamento di riga che potrebbe essere necessario, in termini di sintassi. L'ultima cosa che vuoi è che il tuo JS minificato non funzioni più perché il minificatore ha distrutto la sua semantica.

Per quanto riguarda »So che tre nuove righe (senza contare la licenza) non ha intenzione di rallentare molto, ma ancora, non ogni piccolo po 'di aiuto«:? Quando il server utilizza la compressione gzip la differenza sarà probabilmente sarà discutibile comunque.

+1

Ma perché jQuery non elimina le newline nella versione di produzione –

+1

Queste regole non sembrano rilevanti in [jQuery 1.7.2.min è diviso] (http://code.jquery.com/jquery-1.7 .2.min.js); il primo è tra 'G = function (' e 'a)' e il secondo è tra 'var a = f' e' .clean (argomenti); ' – Matt

+0

Perché dovrebbero? Molto probabilmente la versione di produzione verrà generata automaticamente senza la presenza di un umano. – Joey

13

di citare la Closure Compiler FAQ:

la chiusura compilatore aggiunge intenzionalmente linea rompe ogni 500 caratteri o giù di lì.Firewall e proxy a volte corrompono o ignorano i file JavaScript di dimensioni notevoli con linee molto lunghe. Aggiunta di interruzioni di riga ogni 500 caratteri impedisce questo problema. La rimozione delle interruzioni di riga non ha alcun effetto sulla semantica di uno script. L'impatto sulla dimensione del codice è ridotto e il Compiler ottimizza il posizionamento dell'interruzione di riga in modo che la penalità del codice sia ancora più piccola quando i file vengono compressi con gzip.

Questo è rilevante per tutti i programmi di minifoto in generale.

+0

Grazie per aver risposto. Non lo sapevo. EDIT: Strano, l'ho scritto qualche tempo fa, ma ora si vede solo ??? –

+0

Il messaggio deve essere rimasto bloccato tra il firewall e il proxy. – katspaugh

+0

Non si sapeva mai che i firewall e i proxy potevano essere così stupidi. PBFAP. Inoltre, qualcuno sa di un esempio? Sono davvero scettico sul fatto che qualcuno possa scrivere un firewall così male da corrompere i file (e essere pagato dalle persone che lo usano ancora). –

Problemi correlati