0

Я новичок в JavaScript, так что простите меня за то, что я n00b.Моделирование параллельной обработки в Javascript

Когда требуется интенсивный расчет, это более чем вероятно включает в себя циклы, которые являются рекурсивными или другими. Иногда это может означать наличие рекурсивного цикла, который выполняет четыре функции, и, возможно, каждая из этих функций просматривает все дерево DOM, считывает позиции и делает некоторую математику для обнаружения столкновений или чего-то еще.

В то время как первая функция идет по дереву DOM, следующей нужно будет ждать завершения первого и т. Д. Вместо этого, почему бы не запускать эти петли внутри контуров отдельно, вне программ, и действовать на их вычисления в другом цикле, который работает медленнее, потому что он сам не выполняет эти вычисления?

Замедленный или умный?

Заранее спасибо!

+0

ПЕРВЫЙ, почему вы идете по дереву? Почему бы не собрать все элементы DOM, с которыми можно столкнуться, и поместить их в массив. Я уверен, что его только несколько, которые являются точками столкновения, не все из них. Во-вторых, вы можете использовать Pseudo multi-thread в javascript, используя функцию setTimeout, например. setTimeout (function() {...}, 1); будет выполнять заданную функцию в 1 мс. – Zoidberg

+0

Не имея отношения к вашему вопросу, вы можете найти в Chromes [NaCl] (https://developers.google.com/native-client/overview) полезный –

ответ

0

JavaScript никогда не должен был выполнять такие интенсивные вычислительные задачи, и хотя это и меняется, факт остается фактом: JavaScript по сути является однопоточным. Недавняя технология web workers предоставляет ограниченную форму многопоточности, но эти рабочие потоки не могут напрямую обращаться к DOM; они могут отправлять и получать сообщения только в основной поток, который затем может получить к нему доступ от их имени.

0

В настоящее время единственным способом иметь реальную параллельную обработку в JS является использование Web Workers, но оно поддерживается только очень недавними браузерами. И если ваша программа требует такой вещи, это может означать, что вы не используете нужные инструменты (например, прохождение дерева DOM обычно выполняется с помощью DOM-селекторов, таких как querySelectorAll).

4

Долгосрочные вычисления - это именно то, для чего нужны Web Workers. То, что вы описываете, является общей моделью производителей и/или потребительских потоков. Хотя вы можете сделать это с помощью Web Workers, накладные расходы на синхронизацию, скорее всего, превзойдут любые выгоды даже в высокопараллельных системах.

JavaScript не является идеальным языком для приложений, требующих вычислительных требований. Кроме того, вычислительная мощность веб-браузеров может сильно различаться (подумайте о недорогом смартфоне и рабочей станции 16core). Поэтому рассмотрите возможность расчета сложных вещей на сервере и отправку результата клиенту для отображения.

Для повседневного веб-приложения вы должны использовать однопоточный подход и анализировать производительность, как только это станет проблемой. Черт возьми, почему бы не попросить о помощи в решении проблемы с производительностью?

Смежные вопросы