SlideShare a Scribd company logo
HTML5 Web Components:
следующий шаг к модульности
вашего проекта
Андрей Рахманов, Enaza
DevConf 2015, 19 июня 2015 г.
2
Как мы решили попробовать
3
Single-Page App
4
Google I/O 2014
5
Google I/O 2014
<google-map></google-map>
6
7
Поиск подходящего решения
• Плохо сочетать Backbone.js с другими
фреймворками
• Надо использовать native-реализацию или
библиотеку
8
Составные части Web Components
• Templates
• HTML Imports
• Custom Elements
• Shadow DOM
9
Native: Пока весьма печально…
Templates
HTML Imports
Custom Elements
Shadow DOM
10
Polyfills: Уже лучше!
Templates
HTML Imports
Custom Elements
Shadow DOM
11
Какие варианты есть на текущий
момент?
Bosonic
X-Tag (Mozilla)
Native
Polymer (Google)
12
Мы выбрали Polymer
• Декларативное описание элементов
• Удобный «синтаксический сахар» над
нативной реализацией
13
14
На пороге интеграции
в существующий проект
Подключаем один компонент
my-component
15
Подключаем один компонент
my-component
level_1_1
polymer.html
16
Подключаем один компонент
my-component
level_2_1
level_2_2
level_2_3
level_1_1
polymer.html
17
1 import == 6 запросов
а за ним пойдут…
18
Out-of-box: Polymer Vulcanize
Реализация:
Использование:
19
polymer.html
component_1.html
component_2.html component_3.html
styles.css
script.js
20
Подключение: HTML Import сборки
1 лишний запрос
не так страшен
Сборка
кэшируется
21
Взаимодействие
с используемым стеком:
Jade, Stylus и Browserify
22
Стек технологий
23
Стек технологий
24
Стек технологий
25
Как делаем мы
26
Чего ожидает от нас Polymer
<dom-module>
<style>
</style>
<template>
</template>
</dom-module>
<script>
</script>
Файл с компонентом
}
27
? vulcanize
28
Вот кто нам поможет!
29
Gulp Task: Jade -> HTML
30
Gulp Task: Stylus -> CSS
31
Gulp Task: склеим 3 файла в 1
32
first.html
second.html
third.html
33
first.html
second.html
third.html
vulcanize
register_components.html
html imports:
first.html
second.html
third.html
34
Этот реестр формирует Gulp
35
Управление JS-зависимостями
<script src="…"> VS require('module')
36
<script src="…"> VS require('module')
• Одного JS-файла в компоненте не хватает
• Почему не использовать <script src="…">?
CommonJS удобнее!
• Polymer не поддерживает CommonJS.
Как формировать сборку в таком случае?
37
* jQuery *
* plugins *
* lodash *
* Backbone *
vendor.js
expose external
app.js
external
components.html
main.js
module_1.js
* jQuery *
не дублируется 38
Генерация шаблонов
39
40
Резюме
• Web Components успешно интегрируются с
имеющимися инструментами
• Gulp способен решить множество задач
по сборке Web Components
• Создание нового компонента сводится к
одной строке кода для генератора
41
42
Где применить
веб-компоненты?
Декомпозиция Single-Page App
Переиспользуемые логические блоки
На высоком уровне
Расширение стандартных элементов управления
На низком уровне
43
Низкий уровень
Расширение стандартных
элементов управления
44
Расширение стандартных
элементов управления
• <input is="up-autoresizable" />
- автоподстройка длины
• <input is="up-colorpicker" />
- выбор цвета с альфа-каналом
- указание цвета числом
• <up-textarea-count></..>
- подсчет числа оставшихся символов
• <up-select></..>
- иерархия
- запрещенные значения в списке
45
<input is="up-autoresizable"/>
| наследование
| от input
| подключение
| плагина
| отключение
| плагина
| зависимости через
| Browserify
46
<input is="up-colorpicker"/>
| наследование
| от input
| кастомное
| событие
47
48
<up-textarea-count>
| Public API
| для взаимодействия
|
|
|
49
50
<up-select>
| свойства
| для биндинга
|
|
|
|
|
|
|
51
52
Высокий уровень
Переиспользуемые
логические блоки
53
<внешний блок (атрибуты…)>
<внутренний блок 1 (атрибуты…)>
<поле 1>
<поле 2>
<внутренний блок 2 (атрибуты…)>
<поле 1>
<поле 2>
54
Полигон для испытаний 55
Полигон для испытаний 56
<up-inspector>
<!– элементы управления -->
<!– элементы управления -->
<up-inspector-list label="Позиционирование"
<!– элементы управления -->
<up-inspector label="Свойства"…
<up-inspector-list label="Отступы"
<!– элементы управления -->
57
58
<up-sausage>
<up-state-marker />
<up-sausage type="full" inner-length="200" length="400" …
59
60
Резюме
• Web Components сильны на обоих уровнях
• И разметка, и логика превращаются в
набор логических блоков
• Полученный результат удобно
поддерживать
61
Так здорово ли работать
с веб-компонентами
в реальном проекте?
62
63
Определенно, ДА!
Наиболее частые проблемы
• Не все документировано
• Возможны изменения API
• Мало информации на stackoverflow
по свежим версиям библиотек
(…но это временно)
64
Полезные ресурсы
65
webcomponents.org
66
customelements.io
67
component.kitchen
68
Pluralsight - HTML5
Web Component Fundamentals
69
polymer-project.org
70
Резюме
• Интеграция в реальный проект – уже возможна
• Инструменты – активно развиваются
• Библиотеки уже сегодня имеют широкие
возможности
• Вы получаете модульность, о которой можно
только мечтать!
71
Андрей Рахманов
rahmanov@enaza.ru
Дмитрий Чертков
chertkov@enaza.ru
goo.gl/xBTtuu
Попробуйте Web Components
Это вкусно!
Презентация
goo.gl/McfoKL
Проект UnderPage
72

More Related Content

Similar to DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьНепрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьPVasili
 
Непрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуНепрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуИгорь Родионов
 
непрерывная интеграция шаг к непрерывному деплою родионов игорь
непрерывная интеграция   шаг к непрерывному деплою родионов игорьнепрерывная интеграция   шаг к непрерывному деплою родионов игорь
непрерывная интеграция шаг к непрерывному деплою родионов игорьdrupalconf
 
Андрей Стахиевич - Измеряем производительность веб-приложения на стороне клие...
Андрей Стахиевич - Измеряем производительность веб-приложения на стороне клие...Андрей Стахиевич - Измеряем производительность веб-приложения на стороне клие...
Андрей Стахиевич - Измеряем производительность веб-приложения на стороне клие...
COMAQA.BY
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
Amasty
 
Go для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчикаGo для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчика
UP2IT
 
инструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэлинструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэлdrupalconf
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
Andrei Kaleshka
 
selenium stack in python
selenium stack in pythonselenium stack in python
selenium stack in python
COMAQA.BY
 
Phalcon. Что нового?
Phalcon. Что нового?Phalcon. Что нового?
Phalcon. Что нового?
Oleksandr Torosh
 
инструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэлинструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэлdrupalconf
 
aOS Moscow - R2 - PnP provisioning engine in the wild
aOS Moscow - R2 - PnP provisioning engine in the wildaOS Moscow - R2 - PnP provisioning engine in the wild
aOS Moscow - R2 - PnP provisioning engine in the wild
aOS Community
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
Alexander Babich
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015
GetDev.NET
 
инструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэлинструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэлPVasili
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Ontico
 
C&C for coffee'n'code
C&C for coffee'n'codeC&C for coffee'n'code
C&C for coffee'n'codeIvan Mosiev
 
Веб-аналитика на практике
Веб-аналитика на практикеВеб-аналитика на практике
Веб-аналитика на практикеRoman.ua
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 

Similar to DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта (20)

Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов ИгорьНепрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
Непрерывная интеграция шаг к непрерывному деплою. Родионов Игорь
 
Непрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойментуНепрерывная интеграция - шаг к непрерывному деплойменту
Непрерывная интеграция - шаг к непрерывному деплойменту
 
непрерывная интеграция шаг к непрерывному деплою родионов игорь
непрерывная интеграция   шаг к непрерывному деплою родионов игорьнепрерывная интеграция   шаг к непрерывному деплою родионов игорь
непрерывная интеграция шаг к непрерывному деплою родионов игорь
 
Андрей Стахиевич - Измеряем производительность веб-приложения на стороне клие...
Андрей Стахиевич - Измеряем производительность веб-приложения на стороне клие...Андрей Стахиевич - Измеряем производительность веб-приложения на стороне клие...
Андрей Стахиевич - Измеряем производительность веб-приложения на стороне клие...
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
 
Hl2009 1c Bitrix
Hl2009 1c BitrixHl2009 1c Bitrix
Hl2009 1c Bitrix
 
Go для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчикаGo для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчика
 
инструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэлинструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэл
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
selenium stack in python
selenium stack in pythonselenium stack in python
selenium stack in python
 
Phalcon. Что нового?
Phalcon. Что нового?Phalcon. Что нового?
Phalcon. Что нового?
 
инструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэлинструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэл
 
aOS Moscow - R2 - PnP provisioning engine in the wild
aOS Moscow - R2 - PnP provisioning engine in the wildaOS Moscow - R2 - PnP provisioning engine in the wild
aOS Moscow - R2 - PnP provisioning engine in the wild
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015
 
инструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэлинструкция по оптимизации сайтов на Drupal херени даниэл
инструкция по оптимизации сайтов на Drupal херени даниэл
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
 
C&C for coffee'n'code
C&C for coffee'n'codeC&C for coffee'n'code
C&C for coffee'n'code
 
Веб-аналитика на практике
Веб-аналитика на практикеВеб-аналитика на практике
Веб-аналитика на практике
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 

DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта