SlideShare a Scribd company logo
Асинхронная модульность в API Яндекс.Карт — Александр Зинчук
Асинхронная 
модульность в API 
Яндекс.Карт 
Александр Зинчук 
! 
Я.Субботник, Киев, 22.11.2014
Асинхронная модульность в API Яндекс.Карт — Александр Зинчук
1815
〉1815
〉1815
Ада Лавлейс 
〉1815
1815 ?
Модульная 
система
10 
〉Модульная система / Что это?
11 
〉Модульная система / Что это?
Что выбрать?
13 
〉Модульная система / Что выбрать? 
! 
— 
CommonJS 
! 
! 
var http = require('http'), 
express = require('express'), 
config = require('./config'); 
! 
module.exports = setupServer(); 
! 
function setupServer () { 
/* ... module goes here ... */ 
}
14 
〉Модульная система / Что выбрать? 
! 
— 
CommonJS 
! 
— AMD 
! 
define([ 
'http', 'express', 'config' 
], function (http, express, config) { 
/* ... module goes here ... */ 
! 
return server; 
});
15 
〉Модульная система / Что выбрать? / 
Требования 
1. Асинхронный require 
! 
2. Асинхронный provide 
! 
3. Возможность расширить или заменить 
модуль
16 
〉Модульная система / Что выбрать? 
! 
— 
CommonJS 
! 
— AMD 
! 
— YM 
modules.define('server', [ 
'http', 'express', 'config' 
], function (provide, http, express, config) { 
/* ... module goes here ... */ 
! 
setTimeout(function () { 
/* ... and then here ... */ 
! 
provide(server); 
}, 3000); 
});
17 
〉Модульная система / Что выбрать? 
! 
— 
CommonJS 
! 
— AMD 
! 
— YM 
modules.define('server', [ 
'http', 'express', 'config' 
], function (provide, http, express, config) { 
/* ... module goes here ... */ 
https://github.com/ymaps/modules 
! 
setTimeout(function () { 
/* ... and then here ... */ 
! 
provide(server); 
}, 3000); 
});
18 
〉Модульная система / Что выбрать? 
EcmaScript 6 Modules 
http://www.2ality.com/2014/09/es6-modules-final.html
Зачем?
20 
〉Модульная система YM / Зачем? 
Зависимости от не-модулей
21 
〉Модульная система YM / Зачем? 
modules.define('jquery', [ 
Зависимости от не-модулей 
'loader' 
], function (provide, loader) { 
loader( 
'//yandex.st/jquery/2.1.0/jquery.min.js', 
function () { provide(jQuery.noConflict(true)); } 
); 
});
22 
〉Модульная система YM / Зачем? 
Зависимости от асинхронных процессов
23 
〉Модульная система YM / Зачем? 
modules.define('ymaps', [ 
'loader', 'config' 
], function (provide, loader, config) { 
loader(config.hosts.ymaps_api, function () { 
ymaps.ready(function () { 
provide(ymaps); 
}); 
Зависимости от асинхронных процессов 
}); 
});
24 
〉Модульная система YM / Зачем? 
modules.define('DomEventManager', [ 
'browser' 
], function (provide, browser) { 
var implementation = browser.oldIE ? 
'domEventManager/OldIE' : 
'domEventManager/Standard'; 
Зависимости от среды исполнения 
! 
modules.require(implementation, provide); 
});
25 
〉Модульная система YM / Зачем? 
/* Balloon.js */ 
// ... 
getOverlay: function () { 
return this._overlayPromise || 
modules.require(this.options.get('overlay')) 
.then(this._createOverlay, this); 
Загрузка кода по требованию 
} 
/* BalloonOverlay.js */ 
modules.define('BalloonOverlay', [ 
'moduleLoader' 
], function (provide, moduleLoader) { 
moduleLoader.load('BalloonOverlay', provide); 
});
Сборка
〉Сборка
28 
〉Сборка 
•JS 
! 
•CSS 
— Оптимизация (csso) 
— Оборачивание в модуль (provideCss()) 
— url(…) → DataURI 
! 
•Шаблоны 
— Прекомпиляция 
— Оборачивание в модуль 
•Модули 
— Модульная система 
— Загрузчик модулей 
— Хелперы 
— Оборачивание в замыкания 
— Сборка пакетов 
— Сжатие (uglifyjs) 
! 
!
29 
〉Сборка 
•JS 
! 
•CSS 
— Оптимизация (csso) 
— Оборачивание в модуль (provideCss()) 
— url(…) → DataURI 
! 
•Шаблоны 
— Прекомпиляция 
— Оборачивание в модуль 
•Модули 
— Модульная система 
— Загрузчик модулей 
— Хелперы 
— Оборачивание в замыкания 
— Сборка пакетов 
— Сжатие (uglifyjs) 
! 
!
30 
〉Сборка 
•JS 
! 
•CSS 
— Оптимизация (csso) 
— Оборачивание в модуль (provideCss()) 
— url(…) → DataURI 
! 
•Шаблоны 
— Прекомпиляция 
— Оборачивание в модуль 
•Модули 
— Модульная система 
— Загрузчик модулей 
— Хелперы 
— Оборачивание в замыкания 
— Сборка пакетов 
— Сжатие (uglifyjs) 
! 
!
31 
〉Сборка 
•JS 
! 
•CSS 
— Оптимизация (csso) 
— Оборачивание в модуль (provideCss()) 
— url(…) → DataURI 
! 
•Шаблоны 
— Прекомпиляция 
— Оборачивание в модуль 
•Модули 
— Модульная система 
— Загрузчик модулей 
— Хелперы 
— Оборачивание в замыкания 
— Сборка пакетов 
— Сжатие (uglifyjs) 
! 
!
32 
〉Сборка 
•JS 
! 
•CSS 
— Оптимизация (csso) 
— Оборачивание в модуль (provideCss()) 
— url(…) → DataURI 
! 
•Шаблоны 
— Прекомпиляция 
— Оборачивание в модуль 
•Модули 
— Модульная система 
— Загрузчик модулей 
— Хелперы 
— Оборачивание в замыкания 
— Сборка пакетов 
— Сжатие (uglifyjs) 
! 
!
Что выбрать?
34 
〉Сборка / Что выбрать?
35 
〉Сборка / ym-builder 
+ плагины + gulpfile + build.json 
= 
ym-builder 
http://github.com/yandex/ym-builder 
http://npmjs.org/package/ym-builder
36 
〉Сборка / ym-builder 
> ym-builder .
37 
〉Сборка / ym-builder 
> ym-builder [build] [DIR=.] 
> ym-builder watch [DIR=.] 
> ym-builder configure [DIR=.] [=build.json] [gulpfile] [-f] 
> ym-builder help
Ещё больше 
модульности
Modules Plus 
! 
YM + Promises + Загрузчик 
модулей 
https://tech.yandex.ru/maps/doc/jsapi/2.1/dg/concepts/modules-docpage/ 
https://tech.yandex.ru/maps/jsbox/2.1/module_request
40 
〉Модульная система / Что выбрать? / 
Требования 
1. Асинхронный require 
! 
2. Асинхронный provide 
! 
3. Возможность расширить или заменить 
модуль
Отложенная инициализация: использование заглушки 
41 
〉Modules Plus / Асинхоронная загрузка 
/* Balloon.js */ 
// ... 
getOverlay: function () { 
return this._overlayPromise || 
modules.require(this.options.get('overlay')) 
.then(this._createOverlay, this); 
} 
/* BalloonOverlay.js */ 
modules.define('BalloonOverlay', [ 
'moduleLoader' 
], function (provide, moduleLoader) { 
moduleLoader.load('BalloonOverlay', provide); 
});
42 
〉Modules Plus / Асинхоронная загрузка 
•На сервере 
— Формирование списка модулей 
! 
•На клиенте 
— Создание заглушек, вызывающих загрузчик 
— Первый запрос к combine.xml: загрузка содержимого load 
— Последующая загрузка по запросу
Контакты 
Александр Зинчук 
Разработчик интерфейсов 
@ajaxy_ru 
zinchuk@yandex- alx.zinchuk

More Related Content

PDF
Управление образами виртуальных машин: libguestfs, virt-tools
PDF
MySQL 101
PDF
Unit-тестирование скриншотами: преодолеваем звуковой барьер
PPTX
Александр Шуменко - Varnish for authenticated users
PPT
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
PDF
Сергей Бережной — bem-core v1.0.0
PPTX
Chef @DevWeb
Управление образами виртуальных машин: libguestfs, virt-tools
MySQL 101
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Александр Шуменко - Varnish for authenticated users
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Сергей Бережной — bem-core v1.0.0
Chef @DevWeb

What's hot (7)

PPTX
Yeoman generator своими руками
PDF
PDF
Произвольная смена дизайна системного скроллбара
PPTX
07 virtual hosts_ru
PDF
Машинное обучение в рекламной системе Mail.Ru, Игорь Кретинин (Mail.Ru Group)
PDF
Василий Устинов - Drupal + Drush
PDF
Grossum - Docker
Yeoman generator своими руками
Произвольная смена дизайна системного скроллбара
07 virtual hosts_ru
Машинное обучение в рекламной системе Mail.Ru, Игорь Кретинин (Mail.Ru Group)
Василий Устинов - Drupal + Drush
Grossum - Docker
Ad

Similar to Асинхронная модульность в API Яндекс.Карт — Александр Зинчук (20)

PDF
Марина Степанова "Как мы заставили API Яндекс.Карт работать быстрее"
PDF
Frontend: Путешествие в мир модульных загрузчиков
PDF
RequireJS і Magento 2
PDF
Михаил Давыдов "Масштабируемые JavaScript-приложения"
PPTX
JavaScript-модули "из прошлого в будущее"
PDF
A.pleshkov
PDF
Современный фронтенд -- как не утонуть в море хайпа?
PDF
Сергей Константинов — Что интересного готовит нам W3C
PPTX
Быстрая и безболезненная разработка клиентской части веб-приложений
PDF
Frontend весна 2014 лекция 1
PDF
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
PDF
Dump-IT Загрузка и инициализация JavaScript
PDF
Михаил Давыдов "Масштабируемые JavaScript-приложения"
PDF
Изоморфные Java script приложения с catberry.js
PDF
Современный фронтенд за 30 минут.
PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
PDF
webpack: 7 бед - один ответ
PPTX
Сергей Константинов (Яндекс)
PPTX
1. yandex maps
PDF
Modules and assembling of JavaScript (in russian)
Марина Степанова "Как мы заставили API Яндекс.Карт работать быстрее"
Frontend: Путешествие в мир модульных загрузчиков
RequireJS і Magento 2
Михаил Давыдов "Масштабируемые JavaScript-приложения"
JavaScript-модули "из прошлого в будущее"
A.pleshkov
Современный фронтенд -- как не утонуть в море хайпа?
Сергей Константинов — Что интересного готовит нам W3C
Быстрая и безболезненная разработка клиентской части веб-приложений
Frontend весна 2014 лекция 1
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
Dump-IT Загрузка и инициализация JavaScript
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Изоморфные Java script приложения с catberry.js
Современный фронтенд за 30 минут.
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
webpack: 7 бед - один ответ
Сергей Константинов (Яндекс)
1. yandex maps
Modules and assembling of JavaScript (in russian)
Ad

More from Yandex (20)

PDF
Предсказание оттока игроков из World of Tanks
PDF
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
PDF
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
PDF
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
PDF
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
PDF
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
PDF
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
PDF
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
PDF
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
PDF
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
PDF
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
PDF
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
PDF
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
PDF
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
PDF
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
PDF
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
PDF
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
PDF
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
PDF
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Предсказание оттока игроков из World of Tanks
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...

Асинхронная модульность в API Яндекс.Карт — Александр Зинчук

  • 2. Асинхронная модульность в API Яндекс.Карт Александр Зинчук ! Я.Субботник, Киев, 22.11.2014
  • 13. 13 〉Модульная система / Что выбрать? ! — CommonJS ! ! var http = require('http'), express = require('express'), config = require('./config'); ! module.exports = setupServer(); ! function setupServer () { /* ... module goes here ... */ }
  • 14. 14 〉Модульная система / Что выбрать? ! — CommonJS ! — AMD ! define([ 'http', 'express', 'config' ], function (http, express, config) { /* ... module goes here ... */ ! return server; });
  • 15. 15 〉Модульная система / Что выбрать? / Требования 1. Асинхронный require ! 2. Асинхронный provide ! 3. Возможность расширить или заменить модуль
  • 16. 16 〉Модульная система / Что выбрать? ! — CommonJS ! — AMD ! — YM modules.define('server', [ 'http', 'express', 'config' ], function (provide, http, express, config) { /* ... module goes here ... */ ! setTimeout(function () { /* ... and then here ... */ ! provide(server); }, 3000); });
  • 17. 17 〉Модульная система / Что выбрать? ! — CommonJS ! — AMD ! — YM modules.define('server', [ 'http', 'express', 'config' ], function (provide, http, express, config) { /* ... module goes here ... */ https://github.com/ymaps/modules ! setTimeout(function () { /* ... and then here ... */ ! provide(server); }, 3000); });
  • 18. 18 〉Модульная система / Что выбрать? EcmaScript 6 Modules http://www.2ality.com/2014/09/es6-modules-final.html
  • 20. 20 〉Модульная система YM / Зачем? Зависимости от не-модулей
  • 21. 21 〉Модульная система YM / Зачем? modules.define('jquery', [ Зависимости от не-модулей 'loader' ], function (provide, loader) { loader( '//yandex.st/jquery/2.1.0/jquery.min.js', function () { provide(jQuery.noConflict(true)); } ); });
  • 22. 22 〉Модульная система YM / Зачем? Зависимости от асинхронных процессов
  • 23. 23 〉Модульная система YM / Зачем? modules.define('ymaps', [ 'loader', 'config' ], function (provide, loader, config) { loader(config.hosts.ymaps_api, function () { ymaps.ready(function () { provide(ymaps); }); Зависимости от асинхронных процессов }); });
  • 24. 24 〉Модульная система YM / Зачем? modules.define('DomEventManager', [ 'browser' ], function (provide, browser) { var implementation = browser.oldIE ? 'domEventManager/OldIE' : 'domEventManager/Standard'; Зависимости от среды исполнения ! modules.require(implementation, provide); });
  • 25. 25 〉Модульная система YM / Зачем? /* Balloon.js */ // ... getOverlay: function () { return this._overlayPromise || modules.require(this.options.get('overlay')) .then(this._createOverlay, this); Загрузка кода по требованию } /* BalloonOverlay.js */ modules.define('BalloonOverlay', [ 'moduleLoader' ], function (provide, moduleLoader) { moduleLoader.load('BalloonOverlay', provide); });
  • 28. 28 〉Сборка •JS ! •CSS — Оптимизация (csso) — Оборачивание в модуль (provideCss()) — url(…) → DataURI ! •Шаблоны — Прекомпиляция — Оборачивание в модуль •Модули — Модульная система — Загрузчик модулей — Хелперы — Оборачивание в замыкания — Сборка пакетов — Сжатие (uglifyjs) ! !
  • 29. 29 〉Сборка •JS ! •CSS — Оптимизация (csso) — Оборачивание в модуль (provideCss()) — url(…) → DataURI ! •Шаблоны — Прекомпиляция — Оборачивание в модуль •Модули — Модульная система — Загрузчик модулей — Хелперы — Оборачивание в замыкания — Сборка пакетов — Сжатие (uglifyjs) ! !
  • 30. 30 〉Сборка •JS ! •CSS — Оптимизация (csso) — Оборачивание в модуль (provideCss()) — url(…) → DataURI ! •Шаблоны — Прекомпиляция — Оборачивание в модуль •Модули — Модульная система — Загрузчик модулей — Хелперы — Оборачивание в замыкания — Сборка пакетов — Сжатие (uglifyjs) ! !
  • 31. 31 〉Сборка •JS ! •CSS — Оптимизация (csso) — Оборачивание в модуль (provideCss()) — url(…) → DataURI ! •Шаблоны — Прекомпиляция — Оборачивание в модуль •Модули — Модульная система — Загрузчик модулей — Хелперы — Оборачивание в замыкания — Сборка пакетов — Сжатие (uglifyjs) ! !
  • 32. 32 〉Сборка •JS ! •CSS — Оптимизация (csso) — Оборачивание в модуль (provideCss()) — url(…) → DataURI ! •Шаблоны — Прекомпиляция — Оборачивание в модуль •Модули — Модульная система — Загрузчик модулей — Хелперы — Оборачивание в замыкания — Сборка пакетов — Сжатие (uglifyjs) ! !
  • 34. 34 〉Сборка / Что выбрать?
  • 35. 35 〉Сборка / ym-builder + плагины + gulpfile + build.json = ym-builder http://github.com/yandex/ym-builder http://npmjs.org/package/ym-builder
  • 36. 36 〉Сборка / ym-builder > ym-builder .
  • 37. 37 〉Сборка / ym-builder > ym-builder [build] [DIR=.] > ym-builder watch [DIR=.] > ym-builder configure [DIR=.] [=build.json] [gulpfile] [-f] > ym-builder help
  • 39. Modules Plus ! YM + Promises + Загрузчик модулей https://tech.yandex.ru/maps/doc/jsapi/2.1/dg/concepts/modules-docpage/ https://tech.yandex.ru/maps/jsbox/2.1/module_request
  • 40. 40 〉Модульная система / Что выбрать? / Требования 1. Асинхронный require ! 2. Асинхронный provide ! 3. Возможность расширить или заменить модуль
  • 41. Отложенная инициализация: использование заглушки 41 〉Modules Plus / Асинхоронная загрузка /* Balloon.js */ // ... getOverlay: function () { return this._overlayPromise || modules.require(this.options.get('overlay')) .then(this._createOverlay, this); } /* BalloonOverlay.js */ modules.define('BalloonOverlay', [ 'moduleLoader' ], function (provide, moduleLoader) { moduleLoader.load('BalloonOverlay', provide); });
  • 42. 42 〉Modules Plus / Асинхоронная загрузка •На сервере — Формирование списка модулей ! •На клиенте — Создание заглушек, вызывающих загрузчик — Первый запрос к combine.xml: загрузка содержимого load — Последующая загрузка по запросу
  • 43. Контакты Александр Зинчук Разработчик интерфейсов @ajaxy_ru zinchuk@yandex- alx.zinchuk