2012-04-17 13 views
20

que sé sobre un similar question pero es un poco pequeña fuera de lo que estoy pidiendo aquí, así que por favor no lo hacen flag como un duplicado.¿Por qué tenemos líneas nuevas en JavaScript miniaturizado?

Cuando vea el production version of jQuery, ¿por qué hay una nueva línea después de un tiempo? Descargué una copia y borré todas las líneas nuevas (aparte de la licencia) y todavía funcionó. (Me encontré con todo el conjunto de pruebas unidad contra mis cambios en Mozilla Firefox, Google Chrome y Opera.)

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

sé tres saltos de línea (sin contar la licencia) no va a reducir la velocidad de una mucho, pero aún así, ¿no ayuda un poquito?

Me he asignado un pequeño reto, exprimir cada pequeño rendimiento de mi código JavaScript.

+0

¿Puede incluir las líneas correspondientes? –

+0

@JamesMontagne ¿qué quieres decir con eso? de jQuery? –

+0

¿Ejecutó el conjunto de pruebas de ** unidades ** enteras contra sus cambios? – mgnoonan

Respuesta

24

jQuery currently use UglifyJS para minimizar su código fuente. En their build script, que specifically set la directiva max_line_length sea 32 * 1024:

El documentation for UglifyJS tiene esto que decir sobre la directiva max-line-len;

--max-line-len (caracteres predeterminados de 32K): agregue una línea nueva después de unos 32K caracteres. He visto tanto a FF como a Chrome croar cuando todo el código estaba en una sola línea de alrededor de 670K. Pase -max-line-len 0 para desactivar esta característica de seguridad.

+0

¿Por qué no eliminan manualmente las nuevas líneas? –

+6

@AnishGupta ¿qué no consigues? QUIEREN las nuevas líneas. Configuraron su script minify para que PONGA las nuevas líneas allí. –

+1

@ Xeon06 ¿Pero por qué? –

4

Las líneas (excluyendo la licencia) tienen alrededor de 30k caracteres de longitud. Podría ser para evitar errores donde algunos analizadores de Javascript mueren en líneas extremadamente largas. Probablemente esto no ocurra en los navegadores actuales, pero tal vez algunos más antiguos o más oscuros tengan tales límites.


(respuesta Viejo continuación, que también podría ser aplicable, pero no en este caso)

Esto podría ser debido a JSMin, un Javascript populares Minifier conservará saltos de línea en la salida bajo ciertas condiciones . Esto se debe a que en las alimentaciones de línea de Javascript son significativas si omite puntos y comas, por ejemplo. La documentación dice:

Es más conservador al omitir saltos de línea, porque los avances de línea a veces se tratan como punto y coma. Un salto de línea no se omite si precede un carácter no ASCII o una carta ASCII o dígitos o uno de estos caracteres:

\ $ _ { [ (+ - 

y si se sigue un carácter no ASCII o una carta ASCII o dígitos o uno de estos personajes:

\ $ _ } ]) + - " ' 

Otros minifiers podrían tener reglas similares.

Esto es principalmente una precaución contra la eliminación accidental de un avance de línea que puede ser necesario, sintaxis. Lo último que quieres es que tu JS minificado no funcione más porque el minificador destruyó su semántica.

En cuanto »Conozco tres saltos de línea (sin contar la licencia) no va a reducir la velocidad mucho, pero aún así, no cada pequeño ayuda poco«:? Cuando el servidor utiliza la compresión gzip la diferencia será probablemente sea discutible de todos modos.

+1

Pero, ¿por qué jQuery no elimina las líneas nuevas en la versión de producción –

+1

? Estas reglas no parecen ser relevantes en donde [jQuery 1.7.2.min está dividido] (http://code.jquery.com/jquery-1.7) .2.min.js); el primero es entre 'G = function (' y 'a)' y el segundo es entre 'var a = f' y' .clean (argumentos); ' – Matt

+0

¿Por qué deberían? La versión de producción probablemente se generará automáticamente sin que un humano la mire. – Joey

13

citar el Closure Compiler FAQ:

El Closure Compiler añade intencionadamente saltos de línea cada 500 caracteres o menos.Los cortafuegos y los servidores proxy a veces corrompen o ignoran grandes archivos JavaScript con líneas muy largas. Agregar saltos de línea cada 500 caracteres previene este problema. La eliminación de los saltos de línea no tiene efecto en la semántica de un script. El impacto en el tamaño del código es pequeño, y el compilador optimiza la ubicación del salto de línea para que la penalización del tamaño del código sea aún menor cuando los archivos están comprimidos.

Esto es relevante para cualquier programa de minificación en general.

+0

Gracias por responder. No lo sabía. EDIT: raro, escribí esto hace un tiempo, pero ahora solo aparece? –

+0

El mensaje debe haber estado atascado entre el firewall y el proxy. – katspaugh

+0

Nunca se supo que los servidores de seguridad y los servidores proxy pudieran ser tan estúpidos. PBFAP. Además, ¿alguien sabe de un ejemplo? Soy muy escéptico de que alguien pueda escribir un firewall tan malo que corrompa los archivos (y que las personas que lo siguen le sigan pagando). –

Cuestiones relacionadas