AJAX está en uno de sus mejores momentos y de paso le ha dado un empujoncito al tan poco querido JavaScript (JS). Ahora vemos sitios con un gran porcentaje de JS y eso ha traído con sigo varias cuestiones como la seguridad del código como el tamaño de los archivos .js.
Los archivos .js se descargan al cliente como archivos de texto plano y son fácilmente visibles por cualquier ojo curioso y al mismo tiempo si el programador fue muy juicioso comentando, indentando y escribiendo nombres de variables claros los .js empiezan a pesar más Kb de lo normal.
Para solventar esto hay 3 técnicas que permiten hacer el código más pequeño en peso y menos legible para el ojo humano (solo menos legible, ya que existe obligatoriamente la inversa para estos métodos).
- Minimizar el código :
Básicamente lo que hace es eliminar comentarios, espacios y tabuladores al código.
Está técnica es muy segura para el código (de aquí en adelante cuando hablemos de seguridad estamos hablando de la compatibilidad del código generado) pues no lo modifica demasiado, no requiere tampoco un proceso de traducción pues el código sigue intacto, pero, no comprime demasiado ni da mucha seguridad.
El mejor de su genero es el JSMin. - Ofuscar el contenido :
Está técnica, además de minimizar, modifica el código cambiando el nombre las variables y de las funciones por nombres más pequeños (obviamente menos descriptivos), por ejemplo la variable "textoBusqueda" se transforma en "abc" y de igual forma con nombres de funciones, eventos y el resto de vairables.
Por modificar el código tan agresivamente es menos seguro (quiero decir que en su traducción el .js puede quedar inservible), pero al mismo tiempo su peso es menor y su lectura más complicada. También requiere de una traducción por parte del cliente (ya que las funciones no se llaman como deberían) y esto es tiempo y recursos en la máquina del cliente.
Entre las opciones que hay son: - YUI Compressor:
Escrito en Java y uno de los más conocidos, también uno de los más seguros. Además también sirve para CSS. - Packer:
Para mucho es el mejor, tiene buena compresión, aunque se cree que no están seguro como YUI pero si tiene un alto nivel de seguridad. - Crunchy:
Otra opción de obfuscation, es más agresivo que YUI y no es tan seguro. - JSCruncher Pro:
Es comercial, no lo he probado pero se dice que es bueno. - Dojo ShrinkSafe:
Se dice que es uno de los más seguros. - JSMart:
No lo he probado, comprime también CSS. - Encontré también una paginilla interesante que compara algunos de los métodos que describimos arriba, CompressorRater.
- GZip o HTTP Compression:
En esta técnica se pasa un .js o un .css o .html (si, también sirve) comprimido al navegador, este lo descomprime y lo ejecuta. Todo lo que se pasa está compreso por ende se usa menos ancho de banda del servidor, pero, más RAM al tener que comprimir todo antes de pasárselo al cliente. El cliente a su vez debe descomprimir antes de ejecutar.
Es una técnica no siempre tan segura ya que no todos los navegadores soportan gzip (en el link de arriba hay una lista de navegadores que lo soportan, está en ingles), he escuchado que IE 6 tiene un error leyendo ciertos contenidos comprimidos.
Encontré una página que explica muy bien como usar esta técnica en gonzo.teoriza.com:
Parte 1
Parte 2
Conclusión
Comprimir nuestros scripts puede tener ventajas en el uso del ancho de banda (por ende $$$) pero también desventajas en el uso de la RAM tanto del servidor (gzip) como en el cliente (ofuscación).
Las pruebas con nuestros scripts nos dirán que técnica o técnicas usar y en que casos (no olvidar las pruebas con el navegador).
No creo que sea muy recomendable para el cliente hacer gzip y ofuscación al mismo tiempo, pero no le veo problema al gzip y minimizar.
No olvidar, siempre hacer una copia de seguridad antes de minimizar el código u ofuscarlo.Los archivos ya modificados son buenos para el servidor final (producción) pero para desarrollo definitivamente toca con los normalitos.
Espero les sea de utilidad y quedo en espera de comentarios y/o correcciones.
Quizás también te interesen otros tips sobre Javascript :
- Adobe Spry, nuevo framework de AJAX para diseñadores
- Cargar HTML externo con jQuery
- Lector de feeds RSS en ajax con jQuery
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por gcm el 14 de Febrero de 2008
Por Skatos el 15 de Febrero de 2008
No conocerás algún ofuscador de ActionScript también?
Por Leandro el 15 de Febrero de 2008
Por JoH el 20 de Febrero de 2008
Skatos :
Navegando un rato vi este link: http://www.flashincrypt.com/features_sp.htm
A tener en cuenta:
* Es un programa comercial (125 USD)
* Los test se hicieron con ASV 4, actualmente existe ASV 5 y ya casi la 6, así que sería bueno probarlo con estos nuevos decompiladores.
También encontré este link: http://www.amayeta.com/software/swfencrypt/
Al parecer es una versión mejorada del anterior.
Por zen el 28 de Febrero de 2008
Y es totalmente gratis, oigan.
Hasta tiene una sección para que los desarrolladores coloquen sus códigos protegidos, y los usuarios los prueben. Y en verdad es lo único que pueden hacer, porque la protección incluye una linea con información sobre el autor, que si se elimina produce que el código no funcione.
Incluso nos ofrecen a los desarrolladores de javascript la opción de permitir la descarga del fuente original, previo envio del visitante de un SMS, que deja al menos algo de beneficio para el autor de los códiogos. Pero esto es totalmente opcional. Yo por ejemplo, para algunos desarrollos, no utilizo esta opción, y simplemente coloco una web de referencia, en la que están incluidos mis desarrollos.
¿He dicho ya que es gratis?
Merece la pena la visita al sitio este.
Saludos.
Por ingjuanfelipe el 29 de Mayo de 2009
Por ingjuanfelipe el 19 de Junio de 2009
Por Pipo el 23 de Noviembre de 2010
No deberias de usar variables globales. Deberias de crear un namespace (usando JSON) para organizarlas.
Ejemplo:
var MiApp = {
Global1:'valor',
Global2:44
}
Asi sera mas seguro usarlas en tu app.
Yo agregaria
http://www.jscompressor.com
Es una implementacion online del YUI Compressor en C#.
Por ireferpesa el 10 de Agosto de 2012
Por neleocloris el 13 de Septiembre de 2012
Por Jose Pablo el 21 de Noviembre de 2014
http://www.protegerjavascript.kom.gt
Saludos!