SlideShare une entreprise Scribd logo
1  sur  100
Télécharger pour lire hors ligne
DOM-шаблонизаторы – 

не только «быстро»
Июнь 2014
Роман Дворнов
Ostrovok.ru
О себе
• Работаю в ostrovok.ru
• Автор basis.js
2
Сегодня мы создаем
динамические интерфейсы
3
Динамические интерфейсы

=

работа с DOM
4
Построение интерфейса
=

создание DOM-фрагментов
и их композиция
5
Что можно использовать для
создания DOM-фрагментов?
6
Что можно использовать для
создания DOM-фрагментов?
• Руки ;)
6
Что можно использовать для
создания DOM-фрагментов?
• Руки ;)
• String-шаблонизаторы
6
Что можно использовать для
создания DOM-фрагментов?
• Руки ;)
• String-шаблонизаторы
• DOM-шаблонизаторы
6
String vs. DOM
7
String-шаблонизаторы
8
Описание шаблона =

набор строк + инструкции
9
10
<div class="entry">	
<h1>{{title}}</h1>	
<div class="body">	
{{body}}	
</div>	
</div>
… + title +	
… + body +	
…
String-шаблонизаторы
Описание (handlebars) Интерпретация
Не известно какая в итоге
получится DOM-структура 

и как она будет меняться
11
Зато достаточно
универсальный подход,
а HTML частный случай
12
Строковые шаблонизаторы
производят функции,
которые производят строки
13
После этого 

innerHTML + пост-процессинг
14
Пост-процессинг
• Получение ссылок на элементы
• Навешивание обработчиков событий
• Модификация DOM

(использование jQuery-like плагинов,
вставка DOM фрагментов etc)
• и т.д.
15
Пост-процессинг
самая медленная фаза
16
Процесс
• герерация HTML
• innerHTML
• пост-процессинг
17
Создание Обновление
• генерация HTML
• innerHTML
• пост-процессинг
Процесс
• герерация HTML
• innerHTML
• пост-процессинг
17
Создание Обновление
• генерация HTML
• innerHTML
• пост-процессинг
=
DOM-шаблонизаторы
18
19
Описание шаблона =

DOM узлы + инструкции
20
<div class="entry">	
{{title}}	
</div>
DOM шаблонизаторы
Атрибут
Текстовый узел
Элемент
Известно какая будет 

DOM-структура и как будет
меняться
21
... еще до построения
нативного DOM
22
Ориентированы
на работу с DOM*
23
* Но не обязательно производят только DOM
DOM-шаблонизаторы
производят и обслуживают
DOM-фрагменты
24
Знания о DOM структуре
позволяют использовать
оптимизации
25
Например
• cloneNode(true) – быстрое создание 

DOM-фрагмента
• обработка событий через один глобальный
capture-обработчик на документе для
каждого уникального события
26
Процесс
• построение 

DOM-фрагмента или
cloneNode(true)
• DOM-операции
27
Создание Обновление
• DOM-операции
Работают быстрее
28
Могут проигрывать 

при генерации больших
фрагментов неизменяемой
верстки
29
Но выигрывают на
генерации повторяющихся
фрагментов
30
TodoMVC
31
100 items 1000 items
AngularJS 125 ms 1491 ms
Backbone 53 ms 510 ms
Knockout 39 ms 489 ms
jQuery 20 ms 184 ms
Backbone + basis.js templates 18 ms 202 ms
basis.js 8 ms 95 ms
Всегда выигрывают
на обновлении
32
Подробнее в докладе
Как построить DOM
33
tinyurl.com/build-dom
Уже используется в ...
• Ractive
• Basis.js
• Ember: HTMLBars (в разработке)
• Meteor
• React*
34
* нет шаблонизатора, но внутри DOM-подход
Не холивара ради…
35
DOMString
Универсальное решение
для сайтов и
приложений, подходит
для сервера и клиента
Оптимально для
больших динамических
одностраничных
приложений
String-шаблонизаторы
36
DOM-шаблонизаторы
37
Развивая идеи
DOM-шаблонизации…
38
На примере basis.js
Абстрагирование 

от верстки
39
В коде
• Абстрагируемся от верстки
• Нет селекторов
• Нет указания CSS классов, имен тегов
• Нет HTML
• Нет стилей
40
Не знаем о разметке 

и как используются
значения
41
42
<div{el} class="example">	
{text}	
</div>
{	
el: <div>,	
text: #text,	
set: function(name, value){	
// black magic box	
}	
}
Описание Интерфейс к экземпляру
Работаем с интерфейсом
Отдаем значения, 

но что там происходит не знаем
Не знаем какие классы
в разметке, не используем
селекторы в JavaScript
43
44
<div{el} class="example">	
<h1>{text}</h1>	
<ul{content}/>	
</div>
el = fragment.firstChild	
text = el.firstChild.firstChild	
content = el.lastChild	
Описание Получение ссылок
Жизнь без селекторов
(пути генерирует шаблонизатор)
Подключение стилей
<b:style>
45
46
<b:style src="block.css"/>	
!
<div class="block block_{hidden}">	
{caption}	
</div>
Подключение стилей
.block	
{	
...	
}	
.block_hidden	
{	
...	
}
block.cssblock.tmpl
Включение других шаблонов
<b:include>
47
48
<b:style src="./example.css"/>	
<div class="wrapper">	
<b:include src="./button.tmpl">	
<b:after ref="caption"> {count}</b:after>	
</b:include>	
</div>
Включение шаблонов
Результат
example.tmpl
<b:style src="./button.css"/>	
<b:style src="./example.css"/>	
<div class="wrapper">	
<button class="button">	
{caption} {count}	
</button>	
</div>
<b:style src="./button.css"/>	
<button class="button">	
{caption}	
</button>
button.tmpl
Изоляция стилей
<b:isolate>
49
50
<b:style src="option.css"/>	
!
<div class="xo-bookings-change-status-popup-option
xo-bookings-change-status-popup-option_{disabled}
xo-bookings-change-status-popup-option_{hidden}">	
<span class="xo-bookings-change-status-popup-
option__caption xo-bookings-change-status-popup-
option__caption_{selected}">	
{title}	
</span>	
</div>
До
51
<b:style src="option.css"/>	
<b:isolate/>	
!
<div class="option {disabled} {hidden}">	
<span class="caption caption_{selected}">	
{title}	
</span>	
</div>
После
В топку BEM?
52
В топку префиксы!
53
Но фишка не только в
префиксах…
54
Переопределение стилей
вместо добавления
модификаторов
55
56
Безопасное дополнение стилей
<b:style src="./button.css"/>	
<button class="button">	
click me	
</div>
button.tmpl
<b:isolate/>	
<b:style>	
.button { color: green; }	
</b:style>	
<b:include src="./button.tmpl"/>
ok-button.tmpl
<b:isolate/>	
<b:style>	
.button { color: red; }	
</b:style>	
<b:include src="./button.tmpl"/>
cancel-button.tmpl
57
<b:isolate/>	
<b:style>	
.abc-foo { color: red; }	
.xyz-foo { color: blue; }	
</b:style>	
<div class="panel">	
<b:include src="./foo.tmpl" isolate="abc-"/>	
<b:include src="./foo.tmpl" isolate="xyz-"/>	
</div>
Изоляция включений
<b:style src="./foo.css"/>	
<div class="foo">	
example	
</div>
example.tmpl foo.tmpl
58
Изоляция включений: результат
<b:style src="./foo.css?prefix=hs83shyf_abc-"/>	
<b:style src="./foo.css?prefix=hs83shyf_xyz-"/>	
<b:style>	
.hs83shyf_abc-foo { color: red; }	
.hs83shyf_xyz-foo { color: blue; }	
</b:style>	
<div class="hs83shyf_panel">	
<div class="hs83shyf_abc-foo">	
example	
</div>	
<div class="hs83shyf_xyz-foo">	
example	
</div>	
</div>
59
Пространства имен
<b:style src="./bootstrap.css" ns="bt"/>	
<b:style src="./glyphs.css" ns="glyph"/>	
<b:style src="./style.css"/>	
!
<div class="glyph:active bt:active active">	
...	
</div>
(Побочный продукт методики)
Гарантия уникальности классов

=

более сильные оптимизации
60
61
Например
<b:isolate/>	
<b:style src="./style.css"/>	
<div class="foo bar">	
..	
</div>
.foo {	
color: red;	
width: 100px;	
}	
.bar {	
color: green;	
}
example.tmpl style.css
62
Оптимизация: слияние стилей
<b:isolate/>	
<b:style src="./style.css"/>	
<div class="baz">	
..	
</div>
.baz {	
/* color: red; */	
width: 100px;	
color: green;	
}
example.tmpl style.css
И мы продолжаем
экспериментировать ;)
63
«Эээ… но у нас же есть
Web Components…»
64
Кто-то из зала
Все таки их пока нет* ;)
65
* в процессе разработки и имплементации
Web Components –
деклативная обертка для
инкапсулированных ресурсов 

(DOM, CSS, JS)
66
В моем понимании
В простом случае:
!
1 DOM фрагмент
+
DOM-манипуляции*
67
* мог бы делать шаблонизатор
В комплексном случае:
!
Много фрагментов
+
возвращаемся к проблеме
шаблонизации
68
Web Components
69
Хорошо для виджетов
(проигрыватели, карты и т.д)
Web Components
70
Не решает проблем самих
компонент и приложений
Не совсем про шаблонизатор, 

но мы храним
шаблоны в отдельных файлах
71
И остальные тоже скоро будут так делать ;)
Абстрагирование
+
внешние файлы
=
Live update
72
Live update –
обновление DOM-фрагментов 

без перезагрузки страницы
73
74
<div class="sidebar">	
...	
<ul class="list">	
<li>item 1</li>	
<li>item 2</li>	
</ul>	
...	
</div>
<div class="list-wrapper">	
<h2>Header</h2>	
<ul class="list">	
	
</ul>	
</div>
Замена DOM-фрагмента
Старый DOM Новый DOM
74
<div class="sidebar">	
...	
<ul class="list">	
<li>item 1</li>	
<li>item 2</li>	
</ul>	
...	
</div>
<div class="list-wrapper">	
<h2>Header</h2>	
<ul class="list">	
	
</ul>	
</div>
insertBefore
Замена DOM-фрагмента
Старый DOM Новый DOM
74
<div class="sidebar">	
...	
<ul class="list">	
<li>item 1</li>	
<li>item 2</li>	
</ul>	
...	
</div>
<div class="list-wrapper">	
<h2>Header</h2>	
<ul class="list">	
	
</ul>	
</div>
replaceChild
insertBefore
Замена DOM-фрагмента
Старый DOM Новый DOM
Live update
экономит время и
разгоняет разработку
75
Live update
+
Логика
=
Адаптивные View
76
Абстрагирование
+
Наборы шаблонов
=
Темы
77
78
Результат
basis.template.theme('base').define({	
foo: resource('path/to/file.tmpl'),	
...	
});	
basis.template.theme('myTheme').define({	
foo: resource('path/to/file.tmpl'),	
...	
});	
!
var view = new basis.ui.Node({	
template: basis.template.get('foo'),	
...	
});
Набор шаблонов 

базовой темы
Еще одна тема
Использование 

шаблона по имени
Тема = HTML + CSS
79
Тоже
без перезагрузки страницы
80
Но это побочный эффект ;)
Экземпляры шаблонов
хранят мета-информацию*
81
* только в dev-режиме
Это дает возможность
определять к какому шаблону
относится DOM-узел
82
Heat map

показывает где и 

как часто меняется DOM
83
Demo
84
github.com/lahmatiy/template-demos
Вне шаблонизатора
85
Анализ и выявление проблем
• какие классы используются в разметке,
но их нет в стилях
• какие селекторы никогда не сработают
• конфликты стилей
• и т.д.
86
Оптимальная сборка
• Минимизация классов
• Удаление разметки и стилей, которые
не используются
• и т.д.
87
И многое другое…
88
И все благодаря DOM
89
В строковых шаблонизаторах
многое из этого невозможно
или крайне сложно
90
DOM это круто!
91
Главное начать 

думать в терминах DOM
92
Попробуйте ;)
93
Вопросы?
94
Роман Дворнов
@rdvornov
rdvornov@gmail.com
basis.js
basisjs.com
github.com/basisjs

Contenu connexe

Tendances

Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноRoman Dvornov
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныRoman Dvornov
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPAEugene Abrosimov
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.Igor Shkulipa
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерRoman Dvornov
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackAlexey Ivanov
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptAlexey Ivanov
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Ontico
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов2ГИС Технологии
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургAlexey Ivanov
 
МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016Anastasia Goryacheva
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node jsAlex Tumanoff
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.Igor Shkulipa
 
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Ontico
 

Tendances (20)

Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьер
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 Екатеринбург
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
Kranonit s16 (python). dmitry furzenko
Kranonit s16 (python). dmitry furzenkoKranonit s16 (python). dmitry furzenko
Kranonit s16 (python). dmitry furzenko
 
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
 

En vedette

Парсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksПарсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksRoman Dvornov
 
CSSO – compress CSS (english version)
CSSO – compress CSS (english version)CSSO – compress CSS (english version)
CSSO – compress CSS (english version)Roman Dvornov
 
CSS parsing: performance tips & tricks
CSS parsing: performance tips & tricksCSS parsing: performance tips & tricks
CSS parsing: performance tips & tricksRoman Dvornov
 
CSSO – история ускорения
CSSO – история ускоренияCSSO – история ускорения
CSSO – история ускоренияRoman Dvornov
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееRoman Dvornov
 
CSSO — минимизируем CSS
 CSSO — минимизируем CSS CSSO — минимизируем CSS
CSSO — минимизируем CSSRoman Dvornov
 
Карточный домик
Карточный домикКарточный домик
Карточный домикRoman Dvornov
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими рукамиRoman Dvornov
 

En vedette (9)

Парсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksПарсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricks
 
CSSO – compress CSS (english version)
CSSO – compress CSS (english version)CSSO – compress CSS (english version)
CSSO – compress CSS (english version)
 
CSS parsing: performance tips & tricks
CSS parsing: performance tips & tricksCSS parsing: performance tips & tricks
CSS parsing: performance tips & tricks
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
CSSO – история ускорения
CSSO – история ускоренияCSSO – история ускорения
CSSO – история ускорения
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрее
 
CSSO — минимизируем CSS
 CSSO — минимизируем CSS CSSO — минимизируем CSS
CSSO — минимизируем CSS
 
Карточный домик
Карточный домикКарточный домик
Карточный домик
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
 

Similaire à DOM-шаблонизаторы – не только "быстро"

kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDKrivoy Rog IT Community
 
Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)Ontico
 
Роман Комаров — «Механизм работы браузера»
Роман Комаров — «Механизм работы браузера»Роман Комаров — «Механизм работы браузера»
Роман Комаров — «Механизм работы браузера»Yandex
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Ontico
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...
FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...
FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...Yandex
 
State of the Standardized Web
State of the Standardized WebState of the Standardized Web
State of the Standardized WebYandex
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
State of the Standardized Web. YaC 2014
State of theStandardized Web. YaC 2014State of theStandardized Web. YaC 2014
State of the Standardized Web. YaC 2014Yandex
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON
 
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Yandex
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановMoscowJS
 
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
 Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И... Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...Тарасов Константин
 
Components now! (in russian)
Components now! (in russian)Components now! (in russian)
Components now! (in russian)Mikhail Davydov
 
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"Yandex
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Ontico
 
БЭМ в дикой природе
БЭМ в дикой природеБЭМ в дикой природе
БЭМ в дикой природеIhor Zenich
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 

Similaire à DOM-шаблонизаторы – не только "быстро" (20)

kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
 
Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)
 
Роман Комаров — «Механизм работы браузера»
Роман Комаров — «Механизм работы браузера»Роман Комаров — «Механизм работы браузера»
Роман Комаров — «Механизм работы браузера»
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...
FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...
FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...
 
State of the Standardized Web
State of the Standardized WebState of the Standardized Web
State of the Standardized Web
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
State of the Standardized Web. YaC 2014
State of theStandardized Web. YaC 2014State of theStandardized Web. YaC 2014
State of the Standardized Web. YaC 2014
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
 
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
 Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И... Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
 
Components now! (in russian)
Components now! (in russian)Components now! (in russian)
Components now! (in russian)
 
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
 
БЭМ в дикой природе
БЭМ в дикой природеБЭМ в дикой природе
БЭМ в дикой природе
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 

Plus de Roman Dvornov

Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаRoman Dvornov
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машинRoman Dvornov
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)Roman Dvornov
 
Rempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментовRempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментовRoman Dvornov
 
CSSO — сжимаем CSS (часть 2)
CSSO — сжимаем CSS (часть 2)CSSO — сжимаем CSS (часть 2)
CSSO — сжимаем CSS (часть 2)Roman Dvornov
 

Plus de Roman Dvornov (6)

Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
 
Rempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментовRempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментов
 
CSSO — сжимаем CSS (часть 2)
CSSO — сжимаем CSS (часть 2)CSSO — сжимаем CSS (часть 2)
CSSO — сжимаем CSS (часть 2)
 
Component Inspector
Component InspectorComponent Inspector
Component Inspector
 

DOM-шаблонизаторы – не только "быстро"