Una cosa es HECHO: a partir de 2010, JavaScript no tiene una función de "detención" de hilo (que no sea la que acaba de grabar los ciclos de CPU).
He estado trabajando con JavaScript durante al menos un año antes de publicar este comentario y he llegado a la conclusión de que la falta de una función de suspensión de hilos es un verdadero obstáculo para enhebrar el código relacionado.
Una consecuencia de la falta de la función de reposo es que no es posible simular un Ruby/C#/C++/etc. como el modelo de subprocesamiento en JavaScript, lo que a su vez significa que no es posible traducir ninguno de los lenguajes habilitados para enhebrar a JavaScript, sin importar lo que haga, a menos que el JavaScript se complemente con un modo de dormir (preferiblemente sin CPU) función.
Si uno navega, entonces uno puede encontrar muchos comentarios que afirman que la función de suspensión ni siquiera es necesaria, que el setTimeout es suficiente, etc., pero supongo que las personas que dicen eso, no han intentado implementar un marco de enhebrado en JavaScript. (Piense en mutexes, secciones críticas. Me niego a entrar en una discusión que las secciones críticas/sincronización son/no son necesarias para casos, donde el contenido del widget consiste en múltiples componentes de datos que forman un "todo atómico".)
El segundo stop-show para todo el modelo DOM es la implementación que representa elementos DOM EN EL HILO DE FONDO.
de aquí, lo que sucede:
en javascript: create_my_awsome_widget_in_DOM(); edit_my_awsome_widget_by_editing_DOM_inside_it() if_we_are_lucky_we_reach_here_without_crashing_the_app()
Como el DOM se procesa en segundo plano (es decir: en un hilo separado), no será una condición de carrera entre el hilo que inició la edición de DOM, haciendo una llamada a la create_my_awsome_widget_in_DOM(), y la representación DOM. Si el hilo de renderización es "lo suficientemente rápido" para representar el DOM antes de que el hilo de JavasSript llame a edit_my_awsome_widget_by_editing_DOM_inside_it(), todo funciona bien, pero si es al revés, entonces el JavaScript comienza a modificar la región del DOM que no (aún) existe.
Esencialmente significa que debido a la DOM renderización de fondo del create_my_awsome_widget_in_DOM() y edit_my_awsome_widget_by_editing_DOM_inside_it() se ejecutan en un orden aleatorio y, obviamente, la aplicación se bloquea, si el edit_my_awsome_widget_by_editing_DOM_inside_it() es llamado antes de la create_my_awsome_widget_in_DOM().
Los complementos pueden presentar inmensas pérdidas de seguridad y problemas de rendimiento. Tomemos, por ejemplo, el complemento flash, que consume demasiado el procesador para funcionar correctamente en los teléfonos móviles y tiene un parche a intervalos regulares para cerrar una peligrosa fuga de seguridad. JavaScript ES el idioma del navegador, en todo caso, busque un compilador de Ruby a JavaScript. – BGerrissen