Одна вещь является ФАКТОМ: с 2010 года в JavaScript нет потока, останавливающего функцию «сна» (кроме той, которая просто записывает циклы процессора).
Я работал с JavaScript по крайней мереза год до публикации этого комментария, и я пришел к выводу, что отсутствие функции сна, останавливающей поток, является настоящей задержкой показа для связанного с потоками кода.
Следствием отсутствия функции сна является невозможность симуляции Ruby / C # / C ++ / и т. Д.как модель потоков в JavaScript, что, в свою очередь, означает, что невозможно перевести любой из языков с поддержкой потоков в JavaScript, независимо от того, что он делает, если JavaScript не дополнен сном (предпочтительно без циклического горения)функция.
Если кто-то путешествует, то можно найти много комментариев, которые утверждают, что функция сна даже не нужна, что setTimeout достаточно и т. Д., Но я думаю, что люди, которые утверждают, что не пыталисьреализовать многопоточную инфраструктуру в JavaScript.(Вспомните мьютексы, критические секции. Я отказываюсь вступать в дискуссию о том, что критические секции / синхронизация не нужны / не нужны в случаях, когда содержимое виджета состоит из нескольких компонентов данных, которые образуют «атомное целое».)
Вторым ограничителем шоу для всей DOM-модели является реализация, которая отображает элементы DOM в фоновой нити.
Вот что происходит:
В Javascript: create_my_awsome_widget_in_DOM ();править() и рендеринг DOM.Если поток рендеринга «достаточно быстр» для рендеринга DOM до того, как поток JavasSript вызовет edit_my_awsome_widget_by_editing_DOM_inside_it (), все работает нормально, но если все наоборот, тогда JavaScript начинает изменять область DOM, которая этого не делает (пока) существовать.
По сути это означает, что из-за фонового рендеринга DOM функции create_my_awsome_widget_in_DOM () и edit_my_awsome_widget_by_editing_DOM_inside_it () выполняются в случайном порядке, и, очевидно, приложение вылетает, если edit_my_awsome_wid_id______________id____id___id_____1017 *