SlideShare uma empresa Scribd logo
1 de 21
Эффективный JavaScript
Dmitriy Yakubovskiy
Что можно оптимизировать?



Время загрузки             Скорость работы
страницы                   интерфейсов

Способ загрузки скриптов   Взаимодействия с DOM
Объединение скриптов       JS сценарии
Сжатие скриптов            ...
Оптимизация виджетов
...
Пороги оптимизации



        < 0.1c                    > 0.1c
Быстрый сайт / интерфейс   Нужен индикатор
                           прогресса
Процесс отрисовки
Процесс отрисовки
Исходный HTML   DOM дерево   Дерево отрисовки
Webkit Engine Main Flow




               Reflow
Gecko Engine Main Flow




                  Reflow
Визуализация Reflow
Причины Reflow + Repaint


Добавление, удаление или обновление DOM элемента

Изменение стилевых свойств элементов

Скрытие DOM элемента при помощи display: none

Анимация DOM элемента на странице

Изменения размера окна
Пример Reflow + Repaint
Очередь Reflow

Лавина Reflow спускается при измерениях DOM элементов:




Решение:
- отделить измерения от изменений
- делать кэширование значений
Сведение Reflow к минимуму

                              2000
                             Reflow




                               1
                             Reflow
Сведение Reflow к минимуму

Локальное кэширование:
Сведение Reflow к минимуму

Обертка display:none, display:block:
Сведение Reflow к минимуму
documentFragment для промежуточных результатов:
Сведение Reflow к минимуму

Операции над копиями DOM узлов:
Сведение Reflow к минимуму

Вставка через innerHTML:
Сведение Reflow к минимуму

Анимация:

Анимируем элементы только с position: fixed или absolute

Элемент глубоко в DOM анимируется медленнее
(Лучше вынести в body + position:absolute)

Заменить несколько таймаутов на один
Инструменты


• DynaTrace Ajax (IE)
http://ajax.dynatrace.com/ajax/en/download/download.aspx

• SpeedTracer (Webkit)
http://code.google.com/webtoolkit/speedtracer/

• Webkit Developer Toolbar (Timeline Tab)
Полезные ссылки


• How browsers work (Tali Garsiel)
http://www.html5rocks.com/en/tutorials/internals/howbrowserswork/

• История одной оптимизации (Сергей Чикуёнок)
http://chikuyonok.ru/2010/11/optimization-story/

• Rendering: repaint, reflow/relayout, restyle (Stoyan Stefanov)
http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
Dmitriy Yakubovskiy
d.iakubovskiy@sysiq.com

Mais conteúdo relacionado

Mais procurados

Asynchronous Applications in Ruby. Roman Gorel
Asynchronous Applications in Ruby. Roman GorelAsynchronous Applications in Ruby. Roman Gorel
Asynchronous Applications in Ruby. Roman GorelSphere Consulting Inc
 
Облачные решения на платформе IO
Облачные решения на платформе IOОблачные решения на платформе IO
Облачные решения на платформе IOOntheIO
 
бэм методология
бэм методология бэм методология
бэм методология racoons
 
Оптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решенияОптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решенияMedia Gorod
 
Александр Кириллов. Веб разработка: Что такое Ruby On Rails. РИФ-Воронеж 2016
Александр Кириллов. Веб разработка: Что такое Ruby On Rails. РИФ-Воронеж 2016Александр Кириллов. Веб разработка: Что такое Ruby On Rails. РИФ-Воронеж 2016
Александр Кириллов. Веб разработка: Что такое Ruby On Rails. РИФ-Воронеж 2016РИФ-Воронеж
 
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...Positive Hack Days
 
Нагрузочное тестирование сайтов
Нагрузочное тестирование сайтовНагрузочное тестирование сайтов
Нагрузочное тестирование сайтовMageCloud
 
Mafiozi Performance1
Mafiozi Performance1Mafiozi Performance1
Mafiozi Performance1barcamplv09
 
Cloudmail - корпоративная web-почта
Cloudmail - корпоративная web-почтаCloudmail - корпоративная web-почта
Cloudmail - корпоративная web-почтаЕлена Кузовкина
 

Mais procurados (9)

Asynchronous Applications in Ruby. Roman Gorel
Asynchronous Applications in Ruby. Roman GorelAsynchronous Applications in Ruby. Roman Gorel
Asynchronous Applications in Ruby. Roman Gorel
 
Облачные решения на платформе IO
Облачные решения на платформе IOОблачные решения на платформе IO
Облачные решения на платформе IO
 
бэм методология
бэм методология бэм методология
бэм методология
 
Оптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решенияОптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решения
 
Александр Кириллов. Веб разработка: Что такое Ruby On Rails. РИФ-Воронеж 2016
Александр Кириллов. Веб разработка: Что такое Ruby On Rails. РИФ-Воронеж 2016Александр Кириллов. Веб разработка: Что такое Ruby On Rails. РИФ-Воронеж 2016
Александр Кириллов. Веб разработка: Что такое Ruby On Rails. РИФ-Воронеж 2016
 
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
 
Нагрузочное тестирование сайтов
Нагрузочное тестирование сайтовНагрузочное тестирование сайтов
Нагрузочное тестирование сайтов
 
Mafiozi Performance1
Mafiozi Performance1Mafiozi Performance1
Mafiozi Performance1
 
Cloudmail - корпоративная web-почта
Cloudmail - корпоративная web-почтаCloudmail - корпоративная web-почта
Cloudmail - корпоративная web-почта
 

Destaque

Доступность веб-сайтов: WWW для всех?
Доступность веб-сайтов: WWW для всех?Доступность веб-сайтов: WWW для всех?
Доступность веб-сайтов: WWW для всех?Ecommerce Solution Provider SysIQ
 
Психология восприятия и UX дизайн
Психология восприятия и UX дизайнПсихология восприятия и UX дизайн
Психология восприятия и UX дизайнEcommerce Solution Provider SysIQ
 
Гибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSSГибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSSEcommerce Solution Provider SysIQ
 
Правила хорошего SEO тона в Frontend разработке
Правила хорошего SEO тона в Frontend разработкеПравила хорошего SEO тона в Frontend разработке
Правила хорошего SEO тона в Frontend разработкеEcommerce Solution Provider SysIQ
 

Destaque (20)

Getting to know magento
Getting to know magentoGetting to know magento
Getting to know magento
 
Seo and Marketing Requirements in Web Architecture
Seo and Marketing Requirements in Web ArchitectureSeo and Marketing Requirements in Web Architecture
Seo and Marketing Requirements in Web Architecture
 
Going global
Going globalGoing global
Going global
 
Доступность веб-сайтов: WWW для всех?
Доступность веб-сайтов: WWW для всех?Доступность веб-сайтов: WWW для всех?
Доступность веб-сайтов: WWW для всех?
 
External Widgets Performance
External Widgets PerformanceExternal Widgets Performance
External Widgets Performance
 
Unexpected achievements 2013
Unexpected achievements 2013Unexpected achievements 2013
Unexpected achievements 2013
 
Developing for e commerce is important
Developing for e commerce is importantDeveloping for e commerce is important
Developing for e commerce is important
 
Java serialization
Java serializationJava serialization
Java serialization
 
QA evolution, in pictures
QA evolution, in picturesQA evolution, in pictures
QA evolution, in pictures
 
User focused design
User focused designUser focused design
User focused design
 
Speed Up Your Website
Speed Up Your WebsiteSpeed Up Your Website
Speed Up Your Website
 
Психология восприятия и UX дизайн
Психология восприятия и UX дизайнПсихология восприятия и UX дизайн
Психология восприятия и UX дизайн
 
Гибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSSГибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSS
 
QA evolution to the present day
QA evolution to the present dayQA evolution to the present day
QA evolution to the present day
 
Management and Communications (IPAA)
Management and Communications (IPAA)Management and Communications (IPAA)
Management and Communications (IPAA)
 
Mastering Java ByteCode
Mastering Java ByteCodeMastering Java ByteCode
Mastering Java ByteCode
 
Правила хорошего SEO тона в Frontend разработке
Правила хорошего SEO тона в Frontend разработкеПравила хорошего SEO тона в Frontend разработке
Правила хорошего SEO тона в Frontend разработке
 
Manifest of modern engineers
Manifest of modern engineersManifest of modern engineers
Manifest of modern engineers
 
IGears: Template Architecture and Principles
IGears: Template Architecture and PrinciplesIGears: Template Architecture and Principles
IGears: Template Architecture and Principles
 
Frontend Servers and NGINX: What, Where and How
Frontend Servers and NGINX: What, Where and HowFrontend Servers and NGINX: What, Where and How
Frontend Servers and NGINX: What, Where and How
 

Semelhante a Эффективный JavaScript - IQLab Frontend Fusion 2012

Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"MobiDev
 
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Yandex
 
Олег Мохов: Модель Отображения. Браузеры
Олег Мохов: Модель Отображения. БраузерыОлег Мохов: Модель Отображения. Браузеры
Олег Мохов: Модель Отображения. БраузерыYandex
 
Osvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshinOsvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshinyaevents
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakAmasty
 
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере" Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"MskDotNet Community
 
Governance of content
Governance of contentGovernance of content
Governance of contentrglab
 
1 2 2_1_c-bitrix_kuleshov
1 2 2_1_c-bitrix_kuleshov1 2 2_1_c-bitrix_kuleshov
1 2 2_1_c-bitrix_kuleshovelenae00
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
Как сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпутиКак сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпутиAndrew Mayorov
 
Роман Комаров — «Механизм работы браузера»
Роман Комаров — «Механизм работы браузера»Роман Комаров — «Механизм работы браузера»
Роман Комаров — «Механизм работы браузера»Yandex
 
Доклад "Веб-компоненты — будущее или настоящее?" на MoscowJS Meetup
Доклад "Веб-компоненты — будущее или настоящее?" на MoscowJS MeetupДоклад "Веб-компоненты — будущее или настоящее?" на MoscowJS Meetup
Доклад "Веб-компоненты — будущее или настоящее?" на MoscowJS MeetupBadoo Development
 
"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20
"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20
"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20MoscowJS
 
Артем Тритяк, Lead Front-End developer в Electric Cloud
 Артем Тритяк, Lead Front-End developer в Electric Cloud Артем Тритяк, Lead Front-End developer в Electric Cloud
Артем Тритяк, Lead Front-End developer в Electric CloudProvectus
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без болиAnton Piskunov
 
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Ontico
 
Roman Zdebskiy - Client vs. Browser
Roman Zdebskiy - Client vs. BrowserRoman Zdebskiy - Client vs. Browser
Roman Zdebskiy - Client vs. BrowserAndrew Mayorov
 
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...UNETA
 

Semelhante a Эффективный JavaScript - IQLab Frontend Fusion 2012 (20)

Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"
 
How React works
How React works How React works
How React works
 
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
 
Олег Мохов: Модель Отображения. Браузеры
Олег Мохов: Модель Отображения. БраузерыОлег Мохов: Модель Отображения. Браузеры
Олег Мохов: Модель Отображения. Браузеры
 
Osvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshinOsvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshin
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
 
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере" Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 
Governance of content
Governance of contentGovernance of content
Governance of content
 
1 2 2_1_c-bitrix_kuleshov
1 2 2_1_c-bitrix_kuleshov1 2 2_1_c-bitrix_kuleshov
1 2 2_1_c-bitrix_kuleshov
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
Как сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпутиКак сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпути
 
Роман Комаров — «Механизм работы браузера»
Роман Комаров — «Механизм работы браузера»Роман Комаров — «Механизм работы браузера»
Роман Комаров — «Механизм работы браузера»
 
Доклад "Веб-компоненты — будущее или настоящее?" на MoscowJS Meetup
Доклад "Веб-компоненты — будущее или настоящее?" на MoscowJS MeetupДоклад "Веб-компоненты — будущее или настоящее?" на MoscowJS Meetup
Доклад "Веб-компоненты — будущее или настоящее?" на MoscowJS Meetup
 
"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20
"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20
"Веб-компоненты — будущее или настоящее?", Денис Иогансен, MoscowJS 20
 
Артем Тритяк, Lead Front-End developer в Electric Cloud
 Артем Тритяк, Lead Front-End developer в Electric Cloud Артем Тритяк, Lead Front-End developer в Electric Cloud
Артем Тритяк, Lead Front-End developer в Electric Cloud
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
 
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
 
Roman Zdebskiy - Client vs. Browser
Roman Zdebskiy - Client vs. BrowserRoman Zdebskiy - Client vs. Browser
Roman Zdebskiy - Client vs. Browser
 
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
 

Mais de Ecommerce Solution Provider SysIQ (14)

All things php
All things phpAll things php
All things php
 
Developing for e commerce is important
Developing for e commerce is importantDeveloping for e commerce is important
Developing for e commerce is important
 
Magento code audit
Magento code auditMagento code audit
Magento code audit
 
Scalability and performance for e commerce
Scalability and performance for e commerceScalability and performance for e commerce
Scalability and performance for e commerce
 
Lupan big enterprise ecommerce fusion 2013
Lupan   big enterprise ecommerce fusion 2013Lupan   big enterprise ecommerce fusion 2013
Lupan big enterprise ecommerce fusion 2013
 
non-blocking java script
non-blocking java scriptnon-blocking java script
non-blocking java script
 
Going Global
Going GlobalGoing Global
Going Global
 
Quick Intro to Clean Coding
Quick Intro to Clean CodingQuick Intro to Clean Coding
Quick Intro to Clean Coding
 
User Behavior: Interacting With Important Website Elements
User Behavior: Interacting With Important Website ElementsUser Behavior: Interacting With Important Website Elements
User Behavior: Interacting With Important Website Elements
 
Databases on Client Side
Databases on Client SideDatabases on Client Side
Databases on Client Side
 
Testing schools overview
Testing schools overviewTesting schools overview
Testing schools overview
 
Interactive web prototyping
Interactive web prototypingInteractive web prototyping
Interactive web prototyping
 
Модульные сетки в реальном мире
Модульные сетки в реальном миреМодульные сетки в реальном мире
Модульные сетки в реальном мире
 
Understanding Annotations in Java
Understanding Annotations in JavaUnderstanding Annotations in Java
Understanding Annotations in Java
 

Эффективный JavaScript - IQLab Frontend Fusion 2012

Notas do Editor

  1. Представиться! Сегодня я расскажу про то, как эффективно использовать JS на сайте. Чтобы ваши интерфейсы работали и реагировали быстро, а посетители были довольны. Веб приложение не сравнится с десктопным по скорости реакции на действия пользователя. Поэтому речь идет об максимальном увеличении скорости отклика. Сейчас все больше сложных интерфейсов и интерактива на сайтах. И эта вся нагрузка ложится на плечи браузера.
  2. Можно выделить 2 основные группы Мы подробнее остановимся на работе с DOM. Поскольку это одно из узких мест любого веб приложения.
  3. Для того чтобы оптимизировать наши сценарии Нужно понять как html и css превращается в то что мы видим в браузере. Браузер делает: 1) Анализ HTML -&gt; DOM дерево 2) Анализ CSS -&gt; Структура стилей 3) Построение &amp;quot;Дерева отрисовки&amp;quot; 4) Отрисовка Reflow только с Repaint!
  4. Типы Reflow Начальный - возникает при первичном отображении дерева. Инкрементный - возникает при манипуляциях с DOM. Источником этого изменения является элемент, над которым проводятся манипуляции - целевой фрейм . 1 фрейм(кадр) соответствует геометрической информации в общем для одного элемента страницы. Фрейм имеет ширину, высоту и смещение. Расчет геометрии страницы происходит одним потоком. Элементы, которые находятся позже в потоке, обычно не влияют на расположение элементов, которые раньше в потоке. Макет строится слева-направо, сверху-вниз по странице. Все HTML reflow начинается с корневого фрейма, который соответствует элементу &lt;html&gt; HTML документа. И рекурсивно проходит по иерархии фреймов, вычисляя геометрию каждого необходимого фрейма. В большинстве случаев возможно построить геометрию страницы в один проход. Для отрисовки таблицы браузеру нужно сделать два прохода. Это связано с тем, что рассчет ширины столбца зависит от наполнения каждой ячейки столбца. Но этого можно избежать, задав фиксированные ширины для каждого столбца. (table-layout: fixed) Операции reflow очень ресурсоемки и являются одной из причин замедления работы веб-приложений.
  5. При скроллинге - только Repaint!
  6. Браузерные движки стараются оптимизировать Reflow Браузер может создать очередь и выполнять эти изменения пачками Очередь сбрасывается по времени (100-200мс) или при достижении 10-20 изменений Несколько изменений могут быть объединены вместе и будет 1 Reflow Но! Иногда наши скрипты могут предотвратить такое поведение браузера и применить все изменения в очереди сразу. Это происходит при запросе информации о стилях, чтобы выдать актуальную информацию
  7. Индексируем содержимое страницы
  8. Подходит как для анимации так и для статического изменения контента