2011-10-18 9 views
15

Tengo un JavaScript bastante grande para la página HTML de un dispositivo.Compilación JavaScript Just In Time

Pero es un poco lento. Intenté comprimir archivos JavaScript, pero todavía no es satisfactorio.

Así que estaba pensando, ¿es posible hacerlo como un "Just in Time" que se compila convertido a código de máquina y usarlo? (Espero que mi comprensión sea correcta) Uso un navegador basado en WebKit.

Cualquiera que haya hecho esto, proporcione enlaces a páginas de "Cómo hacer" o información sobre el mismo.

+8

Un motor JavaScript siempre compilará "justo a tiempo"; no puede servir JavaScript binario o algo así. Sin embargo, nunca debería ser un problema. ¿Estás seguro de que no puedes implementar la carga diferida, por lo que el contenido solo se carga/recupera cuando desplazas algo a la vista? – pimvdb

+0

@pimvdb Ahora puede ejecutar el código asm.js precompilado en todos los navegadores modernos utilizando Emscripten. – niutech

Respuesta

49

Ambos Safari y Chrome ya compilan JIT de Javascript. De hecho, el único navegador de uso extendido que no lo es IE8 y anteriores. Esta es una de las razones principales por las que IE8 es mucho más lento que la competencia en estos días.

Pero entre las líneas de su pregunta, supongo que no está entendiendo qué compilación JIT es. La compilación de JIT ocurre en el navegador; no necesita cambiar su código de ninguna manera para que el navegador pueda hacer la compilación de JIT por usted.

En realidad, lo que parece que estás pensando es en la compilación de códigos de bytes, como hace Java. Este bytecode es efectivamente un lenguaje compilado a mitad de camino que luego se compila por JIT cuando ejecuta el programa. Si esto es lo que estás pensando, puedo confirmar que esta no es una opción para el código Javascript basado en el navegador.

Google ha estado jugando con una tecnología llamada 'Native Client' (NaCl), que le permitiría proporcionar código compilado para el navegador, pero esto aún no está disponible, excepto en las versiones de desarrollo de Chrome.

En cualquier caso, la compilación puede hacer que su código se ejecute más rápido, pero no resolvería la cuestión fundamental de por qué se ejecuta lentamente, lo que probablemente sea mucho mejor para resolver. (incluso el código compilado funcionará mal si tiene cuellos de botella; la compilación en sí misma no mejora mágicamente el código lento)

Si quiere saber por qué su script se ejecuta lentamente, le recomiendo usar una herramienta de creación de perfiles, como el integrado en Firebug o Chrome's Developer Tools. Esto lo ayudará a identificar las partes de su código que se ejecutan lentamente.

También podría probar la herramienta YSlow, que también puede brindar información útil sobre el rendimiento de JavaScript.

También indica que ha comprimido su secuencia de comandos para intentar que sea más rápido. Comprimir el script lo ayudará a descargar más rápido (porque es un archivo más pequeño), pero no hará nada por la velocidad a la que se ejecuta el código.

Espero que ayude.

+0

@pimvdb - bastante justo; La última vez que miré estaba en desarrollo, pero Chrome se mueve rápido, y no me había mantenido al día. Sin embargo, solo está en Chrome, y esto no es adecuado para uso general en la web. – Spudley

+0

Lo siento, estaba confundiendo las cosas. Parece que todavía no. – pimvdb

+0

@Spudley Gracias por hacerme entender. Como se sugirió, ya comencé a perfilar y descubrí dónde lleva tiempo.Dado que la aplicación HTML fue proporcionada por otro cuerpo, lleva mucho tiempo y energía hacer que cambien el código. :(Por lo tanto, estaba intentando buscar una solución rápida. También, en mi entender, JavaScript utiliza principalmente la comparación de cadenas para muchas cosas, por lo tanto estaba haciendo el "Compress" o el uso de "Clouser Compiler" para optimizar JavaScript. – hari