Если вы относитесь к подавляющему большинству веб-разработчиков, то наверняка широко применяете JavaScript для создания интерактивных веб-приложений с малым временем отклика. Проблема состоит в том, что строки с программным кодом на языке JavaScript могут замедлять работу приложений. Эта книга откроет вам приемы и стратегии, которые помогут в ходе разработки устранить узкие места, влекущие за собой снижение производительности. Вы узнаете, как ускорить выполнение, загрузку, операции с деревом DOM, работу страницы в целом и многое другое. Николас Закас, программист из компании Yahoo!, специализирующийся на разработке пользовательских интерфейсов веб-приложений, и еще пять экспертов в области использования JavaScript представят оптимальные способы загрузки сценариев и другие приемы программирования, которые помогут вам обеспечить наиболее эффективное и быстрое выполнение программного кода на JavaScript. Вы познакомитесь с наиболее передовыми приемами сборки и развертывания файлов в действующем окружении и с инструментами, которые помогут в поиске проблем. Книга адресована веб-разработчикам со средним и высоким уровнем владения языком JavaScript, желающим повысить производительность интерфейсов веб-приложений.
Предисловие 1. Загрузка и выполнение Местоположение сценария Группировка сценариев Неблокирующая загрузка сценариев Отложенные сценарии Динамические элементы script Инъекция сценариев с помощью XMLHttpRequest Рекомендуемые способы неблокирующей загрузки В заключение 2. Доступ кданным Управление областью видимости Цепочки областей видимости и разрешение идентификаторов Производительность разрешения идентификаторов Увеличение цепочки областей видимости Динамические области видимости Замыкания, области видимости и память Члены объектов Прототипы Цепочки прототипов Вложенные члены Кэширование значений членов объектов В заключение 3. Работа с деревом DOM Модель DOM в мире броузеров Врожденная медлительность Доступ к дереву DOM и его модификация Свойство innerHTML в сравнении с методами DOM Копирование узл о в HTML-коллекции Обход дерева DOM Перерисовывание и перекомпоновка Когда происходит перекомпоновка? Буферизация и применение изменений в дереве отображения Уменьшение количества операций перерисовывания и перекомпоновки Кэширование информации о размещении Исключение элементов из потока отображения для внесения изменений IE и: hover Делегирование обработки событий В заключение 4. Алгоритмы и управление потоком выполнения Циклы Типы циклов Производительность цикла Итерации на основе функций Условные инструкции Сравнение if-else и switch Оптимизация инструкций if-else Поисковые таблицы Рекурсия Ограниченность размера стека вызовов Шаблоны реализации рекурсии Итерации Мемоизация В заключение 5. Строки и регулярные выражения Конкатенация строк Операторы плюс (+) и плюс-равно (+=) Слияние элементов массива String.prototype.concat() Оптимизация регулярных выражений Как работают регулярные выражения Возвраты Исключение возвратов Примечание к измерению производительности Дополнительные пути повышения производительности регулярных выражений Когда не следует использовать регулярные выражения Усечение строк Усечение с применением регулярных выражений Усечение без применения регулярных выражений Смешанное реш ение В заключение 6. Отзывчивые интерфейсы Поток выполнения пользовательского интерфейса броузера Ограничения броузеров Слишком долго - это сколько? Использование таймеров Основы таймеров Точность таймера Обработка массивов с помощью таймеров Деление заданий Хронометраж выполнения программного кода Таймеры и производительность Фоновые потоки выполнения Окружение фонового потока выполнения Взаимодействие с фоновыми потоками выполнения Загрузка внешних файлов Практическое использование В заключение 7. Ajax Передача данных Запрос данных Отправка данных Форматы данных XML JSON HTML Нестандартное форматирование Заключительные выводы о форматах данных Рекомендации по повышению производительности Ajax Кэширование данных Известные ограничения библиотек поддержки Ajax В заключение 8. Приемы программирования Предотвращение повторной интерпретации Использование литералов объектов/массивов Предотвращение повторного выполнения работы Отложенная загрузка Предварительная условная загрузка Использование сильных сторон Битовые операторы Встроенные методы В заключение 9. Сборка и развертывание высокопроизводительных приложений на JavaScript Apache Ant Объединение JavaScript-файлов Предварительная обработка JavaScript-файлов Минификация JavaScript-файлов Сборка в виде отдельного этапа или во время выполнения Сжатие JavaScript-сценариев Кэширование JavaScript-файлов Решение проблем, связанных с кэшированием Использование сети распространения содержимого Развертывание JavaScript-ресурсов Гибкий процесс сборки JavaScript-файлов В заключение 10. Инструменты Профилирование JavaScript-сценариев YUI Profiler Анонимные функции Firebug Панель профилировщика в консоли Прикладной интерфейс консоли Панель Net Инструменты разработчика в Internet Explorer Веб-инспектор в броузере Safari Панель Profiles Панель Resources Инструменты разработчика в Chrome Блокирование сценариями отображения страницы Page Speed Fiddler YSlow dynaTrace Ajax Edition В заключение Алфавитный указатель