2009-09-19 16 views
11

Tengo un trabajo intensivo de CPU que hacer y no quiero degradar la experiencia del usuario. dado que los trabajadores web (http://ejohn.org/blog/web-workers/) son una característica nueva y no son compatibles con todos los navegadores, pensé abrir un iframe con HTML + JS que haría todo el trabajo sucio y usaría algunas comunicaciones entre dominios para transmitir los resultados. Desafortunadamente noté que el propietario del iframe sufre del trabajo de la CPU de la ventana del iframe.¿Iframe se ejecuta en el mismo hilo que el propietario?

¿Este comportamiento es como se diseñó? ¿Hay una manera de resolver esto?

Respuesta

8

Una forma de simular el multi-threadedness sería tener una función de Javascript hacer un poco de trabajo, luego llamar al setTimeout con esa misma función; entonces la función hará un poco de trabajo y llamará al setTimeout nuevamente, y este ciclo continuará por siempre o hasta que cierren el cuadro o usted señalice que deja de funcionar. MDN has a good example of how to set this up.

Entre los tiempos de espera, Javascript no debe consumir ningún tiempo de procesador. Puede que tenga que jugar un poco para ver cuánto tiempo deben durar sus tiempos de espera, 1ms es probablemente demasiado corto, pero 1s es definitivamente demasiado largo. Otro factor será la velocidad del procesador de la computadora que ejecuta el trabajo, por lo que es posible que tenga que hacer alguna pseudo-evaluación comparativa por parte del cliente a través de Javascript antes de poder determinar cuánto tiempo demorar cada vez.

+6

w3schools! = 16 ms es W3C –

+0

actualización de la pantalla, lo recomiendo. – Fresheyeball

4

JavaScript tiene un solo título. Las pestañas o ventanas separadas pueden ejecutarse en subprocesos o procesos independientes según el navegador, sin embargo, no puede comunicarse entre estas ventanas, por lo que no hay manera de que pueda utilizar explícitamente más de un subproceso o proceso en JavaScript.

Si se trata de la respuesta de la IU, Rushakoff tiene una buena respuesta. Mientras se ejecuta JavaScript, no se produce ninguna representación HTML y la interfaz de usuario no responde. Al utilizar los tiempos de espera, el control se puede volver a liberar periódicamente en el hilo de renderización/UI, lo que le da una sensación más receptiva, incluso si solo se ejecuta con un solo hilo.

+5

> Sin embargo no se puede comunicar entre estas ventanas 'postMessage' –

Cuestiones relacionadas