Dump-IT Загрузка и инициализация JavaScript

Mikhail Davydov
Mikhail DavydovJavaScript & Node.js Developer at Yandex
Загрузка и инициализация
JavaScript приложения
Михаил Давыдов
@azproduction
JavaScript и Node.js разработчик

Dump-IT, Екатеринбург, 25 мая 2012
Мобильный веб
2
40      %



    Не весь код используется
3
Браузерный кэш

4
Тестовый прототип, 7 Кб/с




        http://tinyurl.com/loader-test
5
Последовательная загрузка и
    исполнение

<script src="main.js">
</script>
<script src="module.js">
</script>



6
9 Запросов


    131.5 Кб


    18 с

               DOM 17.5 c
7
Параллельная загрузка и
    исполнение

<script src="main.js" async>
</script>
<script src="module.js" async>
</script>



8
9 Запросов


    131.5 Кб


    18 с

       DOM 1.5 c
9
Параллельная загрузка,
 последовательный запуск

 $LAB
     .script('main.js')
     .wait()
     .script('module.js');

                     http://labjs.com/
10
10 Запросов           ↑1


     136.9 Кб             ↑5.4


     18.2 с               ↑0.2

              DOM 3.7 c
11
Собираем и пакуем


 $ cat **/*.js > main.js
 $ java -jar yuicompressor.jar 
 main.js -o main.min.js



     http://tinyurl.com/yui-compressor
12
6 Запросов     ↓3

     48 Кб        ↓83.5


     9.5 с        ↓8.5

     DOM 9.1 c
13
AppCache — оффлайн
 хранилище




14
AppCache Манифест
 <html manifest="example.appcache">
 </html>


 CACHE MANIFEST
 # v1 - 2011-08-13
 http://example.com/index.html
 http://example.com/main.js

15
Преимущества AppCache
1. Надежное кэширование
2. Работа оффлайн
3. Простое управление версиями
4. Своевременное обновление


      http://tinyurl.com/mdn-appcache
16
Кэш — 0 запросов, 0 Кб
17
Выборочная загрузка


     AMD — Асинхронная
     декларация модулей


              http://requirejs.org/
18
Преимущества АMD
1. Грузим основные части
2. Остальное по необходимости
3. Автодогрузка зависимостей
4. ...
5. PROFIT


19
8 Запросов           +2    ↑2


     31.5    +30     Кб    ↓16.5


     7.4 с    +4 c             ↓2.1

             DOM 5.1 c
20
Ленивая загрузка и
 инициализация

         LMD — Ленивая
       декларация модулей


     https://github.com/azproduction/lmd
21
Преимущества LMD
1. Ленивая инициализация
2. Node.js-подобные модули
3. Встроенный сборщик и упаковщик
4. Гибкий объем библиотеки
5. Горячая сборка проекта


22
6 Запросов         +2     ↓2

     18      +30   Кб        ↓13.5


     5.1 с    +4 c           ↓2.3

              DOM 5.1 c
23
6 Запросов            9    ↓3

     18            131.5 Кб    ↓113


     5.1 с               18 с ↓12.9

             DOM 5.1 c
24
1. Используйте AppCache           +
http://tinyurl.com/mdn-appcache
http://tinyurl.com/confessjs

2. Соберите скрипты
3. LMD или AMD


25
1. Используйте AppCache
2. Соберите скрипты        +
http://tinyurl.com/yui-compressor

3. LMD или AMD



26
1. Используйте AppCache
2. Соберите скрипты       +
3. LMD или AMD

https://github.com/azproduction/lmd
http://requirejs.org/



27
OVER 9000

              JS


     Achievement unlocked!
28
Вопросы?

Тест http://tinyurl.com/loader-test

 LMD       https://github.com/azproduction/lmd
 Confess   http://tinyurl.com/confessjs
 Require   http://requirejs.org/
 YUIC      http://tinyurl.com/yui-compressor
 CanIUse   http://caniuse.com/


29
Михаил Давыдов
     JavaScript и Node.js разработчик

     azproduction@yandex-team.ru

     Twitter @azproduction

     Habr http://azproduction.habrahabr.ru

     GitHub https://github.com/azproduction



30
1 of 30

Recommended

Конструктор / Денис Паясь (Яндекс) by
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Ontico
1.3K views67 slides
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов by
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис РечкуновJSib
663 views15 slides
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов by
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис РечкуновJSib
2.1K views42 slides
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov by
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo KazymyrovFwdays
200 views79 slides
Знакомство с WebAssembly by
Знакомство с WebAssemblyЗнакомство с WebAssembly
Знакомство с WebAssemblyNikita Zimin
365 views33 slides
non-blocking java script by
non-blocking java scriptnon-blocking java script
non-blocking java scriptEcommerce Solution Provider SysIQ
5.9K views45 slides

More Related Content

What's hot

Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта by
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаITCrowd Almaty
993 views42 slides
Разработка API для большого, нагруженного сервиса by
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаendeveit
1.7K views30 slides
Современный фронтенд -- как не утонуть в море хайпа? by
Современный фронтенд -- как не утонуть в море хайпа?Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Vladimir Malyk
1.6K views50 slides
Инфраструктура распределенных приложений на Node.js by
Инфраструктура распределенных приложений на Node.jsИнфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.jsStanislav Gumeniuk
421 views75 slides
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru) by
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
3.1K views61 slides
Vagrant puppet by
Vagrant puppetVagrant puppet
Vagrant puppetPeri Innovations
497 views34 slides

What's hot(20)

Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта by ITCrowd Almaty
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
ITCrowd Almaty993 views
Разработка API для большого, нагруженного сервиса by endeveit
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
endeveit1.7K views
Современный фронтенд -- как не утонуть в море хайпа? by Vladimir Malyk
Современный фронтенд -- как не утонуть в море хайпа?Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?
Vladimir Malyk1.6K views
Инфраструктура распределенных приложений на Node.js by Stanislav Gumeniuk
Инфраструктура распределенных приложений на Node.jsИнфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.js
Stanislav Gumeniuk421 views
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru) by Ontico
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Ontico3.1K views
Сергей Яковлев "Phalcon 2 - стабилизация и производительность" by Fwdays
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Fwdays2.2K views
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD... by Egor Konovalov
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...
Egor Konovalov664 views
Maven 3 : уличная магия by Aleksey Solntsev
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магия
Aleksey Solntsev5.5K views
Maven как средство сборки проекта by Yova Stoika
Maven как средство сборки проектаMaven как средство сборки проекта
Maven как средство сборки проекта
Yova Stoika2.1K views
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake) by Ontico
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Ontico5.8K views
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru) by Ontico
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Ontico5.3K views
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз by Timur Batyrshin
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько разRootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
Timur Batyrshin555 views
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации" by Provectus
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
Provectus175 views
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко by JSib
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
JSib903 views
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub... by QAFest
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QAFest882 views
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js) by 7bits
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
7bits350 views
Алексей Фомкин, Практическое применение Web Workers by Aleksey Fomkin
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
Aleksey Fomkin385 views

Viewers also liked

JavaScript. Basics (in russian) by
JavaScript. Basics (in russian)JavaScript. Basics (in russian)
JavaScript. Basics (in russian)Mikhail Davydov
602 views51 slides
JavaScript. Loops and functions (in russian) by
JavaScript. Loops and functions (in russian)JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)Mikhail Davydov
680 views59 slides
JavaScript. Event Loop and Timers (in russian) by
JavaScript. Event Loop and Timers (in russian)JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)Mikhail Davydov
1.5K views76 slides
Ajax and Transports (in russian) by
Ajax and Transports (in russian)Ajax and Transports (in russian)
Ajax and Transports (in russian)Mikhail Davydov
570 views31 slides
JavaScript. OOP (in russian) by
JavaScript. OOP (in russian)JavaScript. OOP (in russian)
JavaScript. OOP (in russian)Mikhail Davydov
727 views77 slides
Dart - светлая сторона силы? by
Dart - светлая сторона силы?Dart - светлая сторона силы?
Dart - светлая сторона силы?Mikhail Davydov
599 views29 slides

Viewers also liked(11)

JavaScript. Loops and functions (in russian) by Mikhail Davydov
JavaScript. Loops and functions (in russian)JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)
Mikhail Davydov680 views
JavaScript. Event Loop and Timers (in russian) by Mikhail Davydov
JavaScript. Event Loop and Timers (in russian)JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)
Mikhail Davydov1.5K views
Ajax and Transports (in russian) by Mikhail Davydov
Ajax and Transports (in russian)Ajax and Transports (in russian)
Ajax and Transports (in russian)
Mikhail Davydov570 views
Dart - светлая сторона силы? by Mikhail Davydov
Dart - светлая сторона силы?Dart - светлая сторона силы?
Dart - светлая сторона силы?
Mikhail Davydov599 views
Introduction in Node.js (in russian) by Mikhail Davydov
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
Mikhail Davydov1.5K views
JavaScript. Event Model (in russian) by Mikhail Davydov
JavaScript. Event Model (in russian)JavaScript. Event Model (in russian)
JavaScript. Event Model (in russian)
Mikhail Davydov789 views

Similar to Dump-IT Загрузка и инициализация JavaScript

Изоморфные react-приложения by
Изоморфные react-приложенияИзоморфные react-приложения
Изоморфные react-приложенияDenis Izmaylov
3.6K views115 slides
Симаков Алексей - Системы управления кластерами by
 Симаков Алексей - Системы управления кластерами   Симаков Алексей - Системы управления кластерами
Симаков Алексей - Системы управления кластерами Yandex
815 views46 slides
Системы автоматизированной сборки (Lecture 05 – gradle) by
Системы автоматизированной сборки (Lecture 05 – gradle)Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Noveo
323 views32 slides
"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25 by
"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25
"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25MoscowJS
608 views27 slides
GitLab, Prometheus и Grafana с Kubernetes by
GitLab, Prometheus и Grafana с KubernetesGitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesVictor Login
977 views39 slides
Moscow js 26 webpack by
Moscow js 26   webpackMoscow js 26   webpack
Moscow js 26 webpacklgordey
465 views41 slides

Similar to Dump-IT Загрузка и инициализация JavaScript(20)

Изоморфные react-приложения by Denis Izmaylov
Изоморфные react-приложенияИзоморфные react-приложения
Изоморфные react-приложения
Denis Izmaylov3.6K views
Симаков Алексей - Системы управления кластерами by Yandex
 Симаков Алексей - Системы управления кластерами   Симаков Алексей - Системы управления кластерами
Симаков Алексей - Системы управления кластерами
Yandex815 views
Системы автоматизированной сборки (Lecture 05 – gradle) by Noveo
Системы автоматизированной сборки (Lecture 05 – gradle)Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)
Noveo323 views
"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25 by MoscowJS
"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25
"Изоморфный D3 + MALEVICH", Алексей Охрименко, MoscowJS 25
MoscowJS608 views
GitLab, Prometheus и Grafana с Kubernetes by Victor Login
GitLab, Prometheus и Grafana с KubernetesGitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с Kubernetes
Victor Login977 views
Moscow js 26 webpack by lgordey
Moscow js 26   webpackMoscow js 26   webpack
Moscow js 26 webpack
lgordey465 views
MoscowJS 26 webpack presentation by lgordey
MoscowJS 26 webpack presentationMoscowJS 26 webpack presentation
MoscowJS 26 webpack presentation
lgordey323 views
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность by ScrumTrek
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальностьДенис Измайлов, JavaScript сегодня: React, Redux и новая реальность
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
ScrumTrek1.6K views
JavaScript сегодня: React, Redux и новая реальность by Denis Izmaylov
JavaScript сегодня: React, Redux и новая реальностьJavaScript сегодня: React, Redux и новая реальность
JavaScript сегодня: React, Redux и новая реальность
Denis Izmaylov2.1K views
Движение по хрупкому дну / Сергей Караткевич (servers.ru) by Ontico
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Ontico701 views
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай... by JSib
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
JSib5.3K views
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow... by MoscowJS
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
MoscowJS532 views
Изоморфные React-приложения производительность и масштабирование / Денис Изма... by Ontico
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Ontico1.8K views
JavaScript-модули "из прошлого в будущее" by oelifantiev
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
oelifantiev1.7K views
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ... by Andrey Taritsyn
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
Andrey Taritsyn322 views
Владимир Кузнецов — Прототип сайта: разработка и развёртывание by Yandex
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеВладимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
Yandex1.8K views

Dump-IT Загрузка и инициализация JavaScript