2010-10-09 9 views
12

¿Es posible ejecutar código JavaScript en paralelo en el navegador? Estoy dispuesto a sacrificar algo de soporte de navegador (IE, Opera, cualquier otra cosa) para obtener algo de ventaja aquí.Código de JavaScript paralelo

+1

Er, si está dispuesto a sacrificar la compatibilidad, ¿por qué no puede implementar su programa en algo que se ejecuta más rápido que JavaScript y ejecutar eso? –

+1

@Ira: ¿Tienes algo en mente? –

+0

Comencé a responder a su comentario y decidí convertirlo en una respuesta. –

Respuesta

12

Si usted no tiene que manipular el DOM, se puede usar webworkers ... Hay algunas otras restricciones, pero echa un vistazo @http://ejohn.org/blog/web-workers/

+0

Hmmm. Aunque parece perfecto, estoy interactuando con un elemento 'canvas'. Probablemente no funcionará con eso, ¿estoy en lo correcto? –

+0

Creo que actualizar un nodo canvas es lo mismo que interactuar con el DOM. Pero nunca está de más probar. –

+4

Puede utilizar sus trabajadores web para enviar mensajes de control que luego se interpretan para cambiar el DOM, simplemente no hay acceso directo. – JKirchartz

2

Tal vez sería mejor volver a codificar su código JavaScript en algo que por lo general funciona más rápido, en lugar de tratar de acelerar el Javascript yendo en paralelo. (Espero que encuentre que el costo de bifurcar las actividades paralelas de JavaScript es bastante alto, y eso puede anular cualquier ganancia paralela posible, este es un problema común con la programación paralela).

Javascript se interpreta en la mayoría de los navegadores IIRC, y es dinámico en la parte superior, lo que significa que, bueno, se ejecuta lentamente.

Tengo la impresión de que puede escribir código Java y ejecutarlo en los complementos del navegador. Java es tipo seguro y JIT compila código máquina. Esperaría que cualquier gran computación hecha en Javascript fuera mucho más rápida en Java. No estoy sugiriendo específicamente Java; cualquier lenguaje compilado para el que pueda obtener un complemento lo haría.

Como alternativa, Google proporciona Closure, a JavaScript compiler. Es afirmado para ser un compilador, pero se parece a un optimizador para mí y no sé mucho "optimiza". Pero, quizás puedas usar eso. Esperaría que el compilador de Closure se construyera en Chrome (pero no lo sé con certeza) y tal vez simplemente al ejecutar Chrome tu compilador de JavaScript sería "gratis".

EDIT: Después de leer acerca de Closure, como compilador, no estoy muy impresionado. Parece que gran parte del énfasis está en reducir el tamaño del código, lo que minimiza el tiempo de descarga, pero no necesariamente el rendimiento. Lo único bueno que hacen en la función es en línea. Dudo que eso ayude tanto como cambiar a un lenguaje realmente compilado.

EDIT2: Aparentemente el compilador "Closure" es diferente del motor que ejecuta JavaScript en Chrome. Me dijeron, pero no lo sé, que el motor Chrome tiene un compilador real.

+0

Compila JavaScript en JavaScript, optimizando en el camino (funciones de alineación, etc.).Consulte [las preguntas frecuentes] (http://code.google.com/closure/compiler/faq.html#how-different). Me preocupa que esté haciendo grandes suposiciones sobre cómo se compara el rendimiento de JavaScript con Java, por ejemplo, el motor JavaScript de WebKit usa un compilador JIT, y si Java es apropiado para el caso de uso del OP. – s4y

+1

Java * no * se ejecuta más rápido en un navegador que JavaScript. No solo es lento y torpe codificar (para una aplicación web) sino que limita severamente la interacción con el DOM a menos que toda la página sea un applet. Cualquier gran computación * podría * hacerse en Java, sin embargo, no tengo cálculos realmente grandes. Me gustaría hacer una operación paralela en un [proyecto de mascota en el que estoy trabajando] (http://joshuakehn.com/blog/static/sort.html) cuyo objetivo es no tener necesidad de un complemento de navegador u otro externo lib. –

+0

@Sidnicious: sí, me di cuenta de que era JavaScript -> JavaScript, y por eso lo llamé un "optimizador". Sugerí que existía un compilador real (tal vez en Chrome); me alegra saber que hay otro de WebKit. Habiendo dicho eso, el modelo de datos de Java y los accesos en mi humilde opinión están más cerca de las máquinas reales que JavaScript y me sorprendería mucho si los cálculos idénticos compilados por Java JIT con el equipo de Sun/IBM fueran más lentos que Webkit o cualquier otro JavaScript "compilado". OP no especificó lo que estaba haciendo, solo que era lento, y uno asume como predeterminado que es computación. –

6

Parallel.js tiene una buena API para procesamiento multihilo en Javascript. Funciona tanto en navegadores web como en nodo.

Cuestiones relacionadas