Кто на сайте
Сейчас 24 гостей онлайн
Вход на сайт
Новости
JavaScript. Оптимизация производительности.
Опубликовано: 19.10.2017
Шестое издание 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, желающим повысить производительность интерфейсов веб-приложений.