2012-02-21 25 views
9

En mi aplicación de JavaScript, utilizo varios objetos solo para fines internos (los usuarios no necesitan acceder a ellos). por ejemplo:¿Solución para minificar las propiedades del objeto?

var images={ 
    blank:"blank.gif", 
    plus:"plus.gif", 
    minus:"minus.gif" 
} 

Cuando uso una Minifier como Uglify.js, los nombres de propiedad (en blanco, más, menos) se mantienen lo es. ¿Hay alguna manera de minimizarlos?

Lo que he considerado hasta ahora:

  • uso Google Closure Minifier en modo avanzado, pero esto aplasta mi código
  • sustituir a las propiedades del objeto con variables (por ejemplo var imagesBlank = "blank.gif"), pero hace que el código sea menos legible

¿Hay una manera mejor?

+3

* use Google Closure en modo avanzado, pero esto aplasta mi código * ... debe leer detenidamente la documentación y ajustar el código para que no se cuelgue. Creo que el compilador de Google Closure es la mejor opción. –

+0

@FelixKling ¿tienes enlaces específicos relacionados con mi pregunta? Además, siéntete libre de publicarlos como respuesta para que yo pueda aceptarlo. – Christophe

+0

No, realmente no ... solo la documentación (http://code.google.com/closure/compiler/docs/api-tutorial3.html). –

Respuesta

-3

Bueno, en este caso, usted podría simplemente reemplazar todas las referencias a images.blank con "blank.gif", lo mismo con plus y minus. Si bien eso significa más trabajo si, por alguna razón, decide cambiar todos sus nombres de archivo, no hay nada que una búsqueda y reemplazo global no pueda solucionar. No es necesario el objeto images en absoluto.

+0

Eso fue solo un ejemplo. En mi código, el enlace de la imagen es realmente más largo: "http: //domainName/hierarchy/blank.gif". La repetición de la cadena no aborda el problema de la minificación. Podría almacenarlo en una variable, pero luego volvemos a mi pregunta. – Christophe

+0

Bueno, podría tener una variable 'baseimgurl =" http: // example.com/hierarchy/";' y simplemente anteponga eso a sus enlaces de imagen ... Tal vez. –

4

El uso de un objeto permite el uso de variables como propiedades. Envolverlo en un cierre hace que esas variables sean dignas de minificación.

//Wrap in closure 
(function() { 

    //Property Variables 
    var blank = 0; 
    var plus = 1; 
    var minus = 2; 

    //Define Object 
    var image = []; 
    image[blank] = "blank.gif"; 
    image[plus] = "plus.gif"; 
    image[minus] = "minus.gif"; 

    //Accessors - must be within closure 
    image[blank]; //blank.gif 
    image[plus]; //plus.gif 
    image[minus]; //minus.gif 

})(); 

Para acceder a los valores anteriores, las constantes deben utilizarse dentro del cierre.

Si se utiliza Closure Compiler de Google, usando var image = []; será más eficiente en la declaración de la matriz ya que los valores de propiedad están numerados de cero, es decir 0, 1, 2.

De lo contrario, var image = {}; funciona bien también.

0

Si hace un prefijo único de sus propiedades internas, puede intentar --mangle-props regex por https://github.com/mishoo/UglifyJS2.

Aquí está su uso en mi gulpfile que requiere gulp-uglify.

var uglifyOpts = { 
    // Mangles the private "p1_" prefixed properties in an object 
    mangleProperties: { 
     regex: /^p1_/ 
    } 
}; 
Cuestiones relacionadas