JSMin – The JavaScript Minifier

JSMin es un filtro que elimina comentarios y espacios en blanco innecesarios en archivos JavaScript (.js). Reduce significativamente (50%) el tamaño de los archivos JavaScript, dando como resultado tasas de transferencias más rápidas. También anima un estilo de programación más expresivo.

¿Qué hace JSMin?

JSMin es un filtro que omite o modifica algunos caracteres. Esto no significa que te vaya a cambiar el comportamiento del programa, ni va a eliminar errores de programación. Lo que si que hace es dejarlo más limpio para ser leído con mayor facilidad.

JSMin substituye las vueltas de carro (» r») por los linefeeds (» n»). Substituye el resto de caracteres de control (incluido tab) por espacios. Además, substituye comentarios de // por linefeeds y de /* */ por espacio. Cuando hablo de espacio me refiero a un solo espacio, al igual que al decir linefeed es solo uno.

Omite espacios a menos que el espacio esté precedido o seguido por un carácter no-ASCII, letra o dígito ASCII, o por uno de estos caracteres:  & _

El filtro es más conservador a la hora de omitir linefeeds porque a veces son tratados como punto y comas. Un linefeed no se omite si precede un caracter no-ASCII o una letra o dígito ASCII o uno de estos carácteres: & _ { [ ( + –

y si sigue un caracter no-ASCII o una letra o dígito ASCII o cualquier de estos carácteres: & _ } ] ) + – » ‘

JSMin sabe que no tiene que modificar sentencias protegidas ni expresiones regulares.

Antes:

// archivo.js

// Creado por Nombre

// 27 septiembre de 2007

// is

// El objeto -is- es utilizado para identificar la página.

// Cada edición de la página se identifica pero no hay una manera estándar de hacerlo.

var is = {

       ie:               navigator.appName == ‘Microsoft Internet Explorer’,

       java:          navigator.javaEnabled(),

       ns:              navigator.appName == ‘Netscape’,

       ua:             navigator.userAgent.toLowerCase(),

       version:     parseFloat(navigator.appVersion.substr(21)) ||

                          parseFloat(navigator.appVersion),

        win:           navigator.platform == ‘Win32’

 }

is.mac = is.ua.indexOf(‘mac’) >= 0;

if (is.ua.indexOf(‘opera’) >= 0) {

     is.ie = is.ns = false;

     is.opera = true;

}

if (is.ua.indexOf(‘gecko’) >= 0) {

       is.ie = is.ns = false;

       is.gecko = true;

}

Después:

var is={ie:navigator.appName==’Microsoft Internet Explorer’,java:navigator.javaEnabled(),ns:navigator.appName==’Netscape’,ua:navigator.userAgent.toLowerCase(),version:parseFloat(navigator.appVersion.substr(21))||parseFloat(navigator.appVersion),win:navigator.platform==’Win32′}

is.mac=is.ua.indexOf(‘mac’)>=0;if(is.ua.indexOf(‘opera’)>=0){is.ie=is.ns=false;is.opera=true;}

if(is.ua.indexOf(‘gecko’)>=0){is.ie=is.ns=false;is.gecko=true;}

Codificación de Caracteres

JSMin requiere, no verifica, que los caracteres estén en codificación ASCII o UTF-8, cualquier otra codificación puede hacer que no funcione correctamente.

Precaución

Es aconsejable guardar una copia original del código fuente. JSMin no te da la opción de deshacer los cambios que él puede producir.

Usa xhh en vez de otro.

Evita confusiones de secuencias con + o -, por ejemplo:

a + ++b llegaría a ser ->  a+++b, y podría ser interpretado como a++ + b y sería incorrecto. Para evitar eso puedes usar los paréntesis: a + (++b).

JSLint comprueba todos estos problemas. Se sugiere utilizar antes de usar JSMin.

Opciones de Línea de Comandos

Los parámetros opciones serán enumerados al principio de la salida como comentarios. Ésta es una manera conveniente de substituir los mensajes del copyright y documentación.

Ejemplo:

        jsmin <fulljslint.js >jslint.js «(s) Nombre 2007 islaBit»

Errores

JSMin puede producir tres mensajes de error al stderr:

      Unterminated comment.

      Unterminated string constant.

      Unterminated regular expression.

Ignorará todos los otros errores que puedan estar presentes en el código fuente del programa.

Conseguir Minifield

Puedes conseguirlo en un archivo .zip de MS-DOS.exe o puede obtener el código fuente de C y construirlo tú mismo. También lo tienes ahora en C#, Java, JavaScript, Perl, PHP, Python, OCAML y Ruby.


Deja un comentario