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