JavaScript. Оптимизация производительности

High Performance JavaScript
Н. Закас Н. Закас
Автор
Название в оригиналеHigh Performance JavaScript
ИздательствоСимвол
Год издания2012
Страниц256
ПереплетМягкая обложка
Формат70х100/16 (170х240 мм, увеличенный)
ISBN978-5-93286-213-1
ИзготовительООО "Издательство "Символ-плюс". 193144, РФ, г. Санкт-Петербург, ул. 5-я Советская, 44/59
ИмпортерООО «НТЦ АПИ», г. Минск, ул. Уманская, 54, пом. 1, каб. 34

Шестое издание JavaScript. Подробное руководство от Дэвида Флэнагана стало супер бестселлером и самым надежным помощником всех JavaScript-программистов. Но один аспект темы JavaScript автор раскрыл недостаточно широко...

Шестое издание JavaScript. Подробное руководство от Дэвида Флэнагана стало супер бестселлером и самым надежным помощником всех JavaScript-программистов. Но один аспект темы JavaScript автор раскрыл недостаточно широко... Все, что Вы хотели знать об оптимизации производительности, но не знали, где спросить - в новой книге от "Символ-Плюс" и O`Reilly!

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

Николас Закас (Nicholas C. Zakas), программист из компании Yahoo!, специализирующийся на разработке пользовательских интерфейсов веб-приложений, и пять других экспертов в области использования JavaScript - Росс Хармс (Ross Harmes), Жюльен Лекомте (Julien Lecomte), Стивен Левитан (Steven Levithan), Стоян Стефанов (Stoyan Stefanov) и Мэтт Суини (Matt Sweeney) - представят оптимальные способы загрузки сценариев и другие приемы программирования, которые помогут вам обеспечить наиболее эффективное и быстрое выполнение программного кода на JavaScript. Вы познакомитесь с наиболее передовыми приемами сборки и развертывания файлов в действующем окружении и с инструментами, которые помогут вам в поиске проблем.

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

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

Главы в этой книге организованы в соответствии с обычным циклом разработки сценариев на языке JavaScript. Сначала в главе 1 «Загрузка и выполнение» рассказывается о параллельной загрузке JavaScript-файлов одновременно с другими ресурсами.

Плохо написанный программный код, использование неэффективных алгоритмов и утилит являются существенным фактором снижения производительности JavaScript. В главах 2-8 представлены конкретные приемы программирования, которые позволяют максимально увеличить скорость выполнения программного кода.

В главе 2 «Доступ к данным» описывается, как JavaScript-сценарии сохраняют и извлекают данные. Важно не только решить, какие данные хранить, но и где их хранить, и эта глава демонстрирует, как такие понятия, как цепочки областей видимости и цепочки прототипов, могут влиять на производительность сценариев. Здесь рассказывается об ускорении доступа к данным и разрешении идентификаторов, об управлении областями видимости, о динамических областях видимости, об использовании цепочек областей видимости и сохранении данных в замыканиях. Этот материал позволит глубже понять особенности работы областей видимости в языке JavaScript.

В главе 3 «Работа с деревом DOM» объясняется, что из-за особенностей реализации операции с деревом DOM являются самыми медленными в JavaScript. Рассматриваются все аспекты, касающиеся DOM, включая описание того, как перерисовка и реорганизация элементов страниц могут уменьшить скорость выполнения программного кода.

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

Глава 4 «Алгоритмы и управление потоком выполнения» описывает, как распространенные приемы программирования, такие как циклы и рекурсия, могут работать против вас, снижая производительность во время выполнения. Здесь рассматриваются такие методы оптимизации, как мемоизация, а также некоторые ограничения, накладываемые браузерами.

Многие веб­-приложения выполняют сложные операции со строками, обсуждение которых в главе 5 «Строки и регулярные выражения» ведет Стивен Левитан, эксперт по обработке текстовых данных. На протяжении многих лет веб­разработчики боролись с неэффективной реализацией строковых операций в браузерах, и Стивен объясняет, почему некоторые операции выполняются слишком медленно и как обходить это при разработке.

Глава 6 «Отзывчивые интерфейсы» концентрируется на ощущениях пользователей. В процессе выполнения JavaScript-сценарий может «подвешивать» броузер, вызывая неудовольствие у пользователей. Здесь обсуждаются некоторые приемы, гарантирующие сохранение отзывчивости пользовательского интерфейса в любых условиях. Рассказывается, как решаются проблемы, обусловленные тем фактом, что выполнение JavaScript-сценариев и обновление пользовательского интерфейса производится в одном потоке выполнения. Демонстрируются такие приемы, как применение таймеров, разделение задач и использование фоновых потоков для выполнения программного кода за рамками главного потока управления.

В главе 7 «Ajax» обсуждаются способы реализации быстрых взаимодействий между клиентом и сервером, показывается, как различные форматы представления данных могут влиять на производительность механизмов Ajax и почему применение объекта XMLHttpRequest не всегда является лучшим выбором.

Глава 8 «Приемы программирования» представляет собой коллекцию наиболее эффективных приемов программирования, уникальных для языка JavaScript.

После того как JavaScript-сценарий будет написан и отлажен, наступает момент сделать внесенные изменения доступными всем желающим. Однако недостаточно просто скопировать исходные файлы на действующий сервер. В главе 9 «Сборка и развертывание высокопроизводительных приложений на JavaScript» демонстрируется, как повысить производительность сценариев при развертывании, обсуждаются особенности использования систем сборки, автоматически минимизирующих файлы, и применение функции сжатия в протоколе HTTP при отправке этих файлов броузерам.

Следующий шаг после развертывания JavaScript-сценариев - тестирование их производительности. Глава 10 «Инструменты» охватывает инструменты исследования производительности, способные помочь в поиске проблем, которые могут появиться после развертывания сценариев. Рассказывается об инструментах для профилирования JavaScript-сценариев и анализа сетевого трафика, таких как Firebug, инструменты разработчика в Chrome, dynaTrace, Fiddler, Page Speed, YSlow, веб-инспектор в Safari, инструменты разработчика в IE.

Эта книга адресована веб-­разработчикам со средним и высоким уровнем владения языком 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
    • В заключение
  • Алфавитный указатель

Кадры Все 8

Похожие лоты

Вход

В течение нескольких секунд вам придёт SMS с одноразовым кодом для входа. Если ничего не пришло — отправьте код ещё раз.
Это бесплатно, безопасно и займёт всего несколько секунд
Войдите с помощью своего профиля

Регистрация

Введите номер вашего мобильного телефона:
Войдите с помощью электронной почты или номера телефона
Войдите с помощью своего профиля

Восстановление пароля

Укажите адрес электронной почты, который вы использовали при регистрации
Нужна помощь? Напишите нам

Восстановление пароля

Инструкции по восстановлению пароля высланы на 
Нужна помощь? Напишите нам