Советы и замечания
Этот шаблон влечет много накладных расходов (на смену контекста исполнения на интерфейс веб‑браузера и обратно), поэтому общее время выполнения задачи может быть намного больше, чем если запустить ее вычисление в обычном режиме.
Чем короче каждый цикл, тем больше накладные расходы, тем более интерактивен интерфейс пользователя (он лучше реагирует на действия пользователя), но тем больше общее время выполнения скрипта.
Если есть уверенность, что каждая итерация алгоритма занимает совсем немного времени (скажем, 10 мс), тогда можно сгруппировать несколько итераций в одну группу, чтобы уменьшить издержки. Решение, начинать ли новый цикл (прерывать текущий) или сделать еще одну итерацию, должно приниматься на основе того, как долго выполняется весь цикл.
Никогда не передавайте строку в setTimeout! Если передать строку, то браузер будет каждый раз выполнять дополнительный eval при ее запуске, что, в общем случае, довольно сильно увеличит суммарное время выполнения скрипта за счет ненужных вычислений.
При использовании глобальных переменных в вычислениях перед выходом из очередного цикла убедитесь, что все необходимые данные синхронизированы, чтобы любой другой JavaScript‑поток, который может быть запущен между двумя циклами, мог их свободно изменить.
Заключение
Мы можем, в конце концов, выполнять все вычисления такого рода на сервере (хотя в этом случае придется иметь дело с преобразованием данных из одной формы в другую и сетевыми задержками, особенно если объем данных достаточно велик). Запуск «тяжелых» вычислений на клиенте, скорее всего , является признаком глубоких, серьезных архитектурных проблем в нашем приложении.
Также в качестве альтернативного варианта можно рассмотреть отправку каких‑либо данных на сервер с помощью XHR‑запроса, их обработку и отображение на клиенте. Поскольку JavaScript – интерпретируемый язык в браузере, то он выполняется на несколько порядков дольше серверных аналогов.
Дата добавления: 2015-05-19; просмотров: 774;