| « Поставить закладку » « Сделать стартовой » | |||
|
|||
| Статьи:: Интернет технологии :: Java Script :: Оптимизируем «тяжелые» JavaScript-вычисления
Оптимизируем «тяжелые» JavaScript-вычисленияПримечание: ниже приведен перевод заметки из блога разработчика YUI-утилит Julien Lecomte "Running CPU Intensive JavaScript Computations in a Web Browser", в которой автор рассматривает выполнение «тяжелых» вычислений в веб-браузере и приводят ряд методов для их «оптимизации». Мои комментарии даны курсивом. ВведениеШаблон, который я хочу ниже обсудить, хорошо известен и используется уже более 10 лет. Целью данной заметки является представить этот шаблон в новом свете и, что более важно, обсудить возможные пути для уменьшения накладных расходов. Наиболее существенным препятствием для выполнения в веб-браузере «тяжелых» вычислений является тот факт, что весь интерфейс пользователя в браузере останавливается и ждет окончания исполнения JavaScript-кода. Это означает, что ни при каких условиях нельзя допускать того, чтобы для завершения работы скрипта требовалось более 300 мс (а лучше, если горадо меньше). Нарушение этого правила неминуемо ведет к плохому восприятию ресурса пользователем (bad user experience). К тому же в веб-браузерах у JavaScript-процесса имеется ограниченное время для завершения своего выполнения (это может быть как фиксированное число в случае браузеров на движке Mozilla или какое-либо другое ограничение, например, максимальное число элементарных операций в случае Internet Explorer). Если скрипт выполняется слишком долго, то пользователю выводится диалоговое окно, в котором запрашивается, нужно ли прервать скрипт. Оптимизируем вычисленияGoogle Gears обеспечивает выполнение напряженных вычислений без двух вышеоговоренных ограничений. Однако, в общем случае нельзя полагаться на наличие Gears (в будущем я предпочел бы, чтобы решение по типу Gears WorkerPool API стало частью стандартного API браузеров). К счастью, у глобального объекта есть метод function doSomething (callbackFn [, additional arguments]) {
// Выполняем инициализацию
(function () {
// Делаем вычисления...
if (конечное условие) {
// мы закончили
callbackFn();
} else {
// Обрабатываем следующий кусок
setTimeout(arguments.callee, 0);
}
})();
}
Улучшаем шаблонЭтот шаблон можно немного видоизменить, чтобы он обрабатывался не по завершению процесса, а в ходе его исполнения. Это нам очень поможет при использовании индикатора состояния (progress bar): function doSomething (progressFn [, дополнительные аргументы]) {
// Выполняем инициализацию
(function () {
// Делаем вычисления...
if (условие для продолжения) {
// Уведомляем приложение о текущем прогрессе
progressFn(значение, всего);
// Обрабатываем следующий кусок
setTimeout(arguments.callee, 0);
}
})();
}
Здесь выложен пример, который демонстрирует сортировку очень большого массива с использованием этого шаблона. Советы и замечания
ЗаключениеМы можете, в конце концов, выполнять все вычисления такого рода на сервере (хотя вам придется иметь дело с преобразованием данных из одной формы в другую и сетевыми задержками, особенно, если объем данных достаточно велик). Запуск «тяжелых» вычислений на клиенте, скорее всего, является признаком глубоких, серьезных архитектурных проблем в вашем приложении. Перевод: Николай Мациевский aka sunnybear Источник: http://webo.sunnybear.ru/ Рубрика: Java Script
Инструменты Internet Explorer 8 Beta 2 для разработчиков.
Подробнее... |
Рубрика: Вебмастеру
| Добавлено: 05.09.2008
Google Developer Day 2008 в Москве.
Дата проведения: 28 октября 2008 г.; Место проведения: Амбер Плаза, Москва, Россия. Конференция для веб-разработчиков и разработчиков мобильных приложений в Москве. Узнайте, как наилучшим образом использовать инструменты разработки и API от Google, чтобы создавать социальные, мобильные и картографические приложения, как использовать AJAX/JavaScript инструменты и библиотеки от Google и многое другое из первых уст.
Подробнее... |
Рубрика: Мероприятия
| Добавлено: 05.09.2008
ТОП 10 самых раздражающих факторов для программиста.
Совсем недавно наткнулся в интернете на забавный "хит-парад" наиболее раздражающих вещей для программиста. Поскольку он был на английском — решил перевести текст и несколько адаптировать к нашим реалиям…
Подробнее... |
Рубрика: Разное
| Добавлено: 03.09.2008
Остальные статьи:
Windows Server 7, 8 и 9
jQuery для JavaScript-программистов
Инновационный веб-броузер Google Chrome стартует уже сегодня
Windows 7: подход к производительности системы
Trac + Subversion @ Ubuntu: Revisited
[g]Vim в режиме Python: Рекомпиляция в Windows
Java + JSON. Пути к дружбе
Драйвер SQL Server 2005 для PHP
Типы данных в MySQL (сжатый справочник для PHP программиста)
PHP класс для работы с Яндекс.XML
Ошибки начинающих PHP разработчиков
Наследование шаблонов в Smarty
Особенности хранения сессий PHP в memcached
Internet Explorer 8 beta 2
9 правил для начинающего Ajax-разработчика
ExtJS 2.2 - полная поддержка Firefox 3, новые виджеты и другие нововведения |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|