Симуляция параллельной обработки в Javascript - PullRequest
0 голосов
/ 05 февраля 2011

Я новичок в JavaScript, так что прости меня за то, что я n00b.

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

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

Отсталый или умный?

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

Ответы [ 3 ]

4 голосов
/ 05 февраля 2011

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

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

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

0 голосов
/ 05 февраля 2011

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

0 голосов
/ 05 февраля 2011

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

...