2010-08-15 16 views
7

Estoy tratando de ingresar a una competencia de JavaScript donde la secuencia de comandos tiene que ser < = 1kb de tamaño. Se permite la minimización y la evaluación, así que lo he ejecutado a través del compilador de cierre de Google (que lo hace un poco mejor que cualquier otro que he probado).Compresión de cadenas de Javascript

Pero he encontrado que si convierto la secuencia de comandos en una cadena, y reemplazo las palabras largas como 'función' y 'volver' con caracteres únicos, puedo reducir aún más eso. Luego, al insertar la cadena en mi script, realizar la sustitución para restaurarla y luego 'evaluarla', puedo obtener el comportamiento original.

Me preguntaba si podría generalizar este último método. ¿Alguien ha visto o escrito código para comprimir/descomprimir cadenas de esta manera? ¿Quieres pensar en eso?

EDITAR Para hacer myslelf claro, yo estoy preguntando por la compresión y descompresión cadenas en Javascript - no minifying. P.ej. cómo encontrar los patrones más comunes en una cadena, y cómo escribir un pequeño descompresor en javascript para cadenas donde estas ocurrencias han sido reemplazadas por caracteres únicos.

Gracias.

+1

Erm ... tal vez Dean Edward's/packer /? –

+1

http://compressorrater.thruhere.net/ - una herramienta útil para comparar resultados de diferentes minificadores o métodos de compresión –

+0

Ninguno de los minificadores que he probado funcionan tan bien como los de Google (incluido el empaquetador), que ya estoy usando. La pregunta es sobre comprimir/descomprimir cadenas, simplemente sucede que mi cadena es js minimizada. – sje397

Respuesta

3

hace suceder que estar buscando http://www.iteral.com/jscrush/? Lo encontré útil para la misma competencia (supongo que es js1k).

+0

No. Ese es otro minificador. Estoy buscando comprimir y descomprimir cadenas. – sje397

+0

Disculpas. Ese es exactamente el tipo de cosa de la que estaba hablando. – sje397

0

Tokenización es el método preferido para comprimir secuencias de comandos, ya que funciona con las palabras clave individuales y otros nombres.

+1

La mayoría de esto lo hace el compilador de cierre: hay muy pocas palabras clave de JavaScript que estoy usando (función, devolución, etc.) pero el compilador de cierre hace que todos los nombres de función tengan solo 1 letra de longitud, etc. – sje397

2

¿Usted ha considerado acortando su código mediante la creación de un acceso directo para aquellos JavaScript objetos y métodos que se utilizan mucho en su código:

var d = document; var id = d.getElementById; 

Y entonces, en lugar de escribir

document.getElementById("foo") 

Puede escribir

id("foo"); 
+3

Sí, ya lo hice. ... pero también, el compilador de cierre lo hace como parte de su optimización también. – sje397

Cuestiones relacionadas