SlideShare a Scribd company logo
Баба-яга против! 
Роман Дворнов 
Екатеринбург, 19 cентября 2014
О себе 
• Работал в ostrovok.ru, 
Единный кошелек 
• Автор basis.js 
2
О себе 
• Работал в ostrovok.ru, 
Единный кошелек 
3 
• Автор basis.js
Сказка 
4
Сначала был Интернет… 
5
Microsoft vs. Netscape 
6
7
IE6 
8
IE, ты все делаешь не так – уходи! 
9
10
Победила дружба… 
любовь к стандартам 
11
Стандарты 
Средство от мигреней* 
* …зуда, запора, вопросов о смысле жизни 
12
“Проприетарные фичи, которые не 
прошли процесс стандартизации 
обычно имеют плохой дизайн, 
даже когда идея была хорошей.” 
– Lea Verou 
Каждый раз, когда вы выдаете проприетарную фичу за CSS3 — умирает котенок 
http://habrahabr.ru/post/138252/ 
13
В идеале 
• предложение и обсуждение 
• черновик стандарта 
• пробные реализации 
• стандарт 
• официальные реализации 
14
В идеале 
• предложение и обсуждение 
• черновик стандарта 
• пробные реализации 
• стандарт 
• официальные реализации 
14 
с префиксом или 
«за флагом»
В идеале 
• предложение и обсуждение 
• черновик стандарта 
• пробные реализации 
• стандарт 
• официальные реализации 
14 
с префиксом или 
«за флагом» 
можно 
безопасно 
использовать
В действительности 
• предложение и обсуждение 
• черновик стандарта 
• пробные реализации 
• стандарт 
• официальные реализации 
15
16
Promise 
Я обещаю быть лапочкой 
17
Promise – "лекарство" от 
callback-hell 
Михаил Давыдов «Promise – это не больно» 
fronttalks.ru/events/2013-07/presentations/davydov/index.html 
18
Множество реализаций 
19
Официальная спецификация 
Promises/A+ 
promisesaplus.com 
20
Давайте сделаем частью 
JavaScript! 
* стало частью ES6 
21
Мы знаем как надо – 
префиксы не нужны! 
22
Должно было быть 
! 
var promiseSupported = 'Promise' in window; 
23
В действительности 
var NativePromise = window['Promise']; 
var nativePromiseSupported = 
NativePromise && 
// Some of these methods are missing from 
// Firefox/Chrome experimental implementations 
'resolve' in NativePromise && 
'reject' in NativePromise && 
'all' in NativePromise && 
'race' in NativePromise && 
// Older version of the spec had a resolver object 
// as the arg rather than a function 
(function(){ 
var resolve; 
new NativePromise(function(r){ resolve = r; }); 
return typeof resolve === 'function'; 
})(); 
24
“Успех – паршивый учитель. 
Он заставляет умных людей 
думать, что они не могут 
проиграть.” 
– Bill Gates 
25
Хотите использовать сегодня – 
готовьте полифил 
Например, github.com/lahmatiy/es6-promise-polyfill 
26
Зато нативные реализации 
лучше! 
27
Правда? 
28 
Browser 
Time, ms Memory, MB 
Native Polyfill Native Polyfill 
Chrome 35 162 50 10,5 2,7 
Firefox 30 161 39 – – 
IE11 – 12 – 2,8 
gist.github.com/lahmatiy/d4d6316418fe349537dc
Promise-истерия 
29
Применяй с умом! 
Promise anti-patterns 
taoofcode.net/promise-anti-patterns/ 
30
Promise проникают 
в стандарты 
31
DOM4 
32
DOM4 
• декабрь 2013: 
«Черновик стандарта DOM4 включает в себя Promises 
как примитив языка...» 
WSD: Сергей Константинов — Что интересного готовит нам W3C 
www.slideshare.net/yandex/w3c-28967881 
32
DOM4 
• декабрь 2013: 
«Черновик стандарта DOM4 включает в себя Promises 
как примитив языка...» 
WSD: Сергей Константинов — Что интересного готовит нам W3C 
www.slideshare.net/yandex/w3c-28967881 
• январь 2014: 
Promise исключены из DOM4 – теперь просто часть ES6 
32
Ссылаются на DOM4 
• Web NFC 
• Quota Management 
• Web Cryptography 
• Web MIDI 
• Device Capabilities 
• Messaging 
• Contacts Manager 
• Web Telephony 
33 
Вот так одна 
спецификация может 
"отравить" другие
Ссылаются на ES6 
34 
• CSS Font Loading 
• Web animations (с июля 2014) 
• Service Workers 
• TCP and UDP Socket 
• Streams 
• Battery Status 
• Task Scheduler
Народное творчество: 
FontStatusPromise 
ResponsePromise 
AbortableProgressPromise 
… 
35
“Promises should be for 
one-and-done, non-interruptible, 
atomic-ish operations.” 
– Domenic Denicola 
Автор Q, Promises/A+, ES6 promise spec 
36
one-and-done, non-interruptible, 
Да вы 
“Promises should be for 
упоролись! 
atomic-ish operations.” 
– Domenic Denicola 
Автор Q, Promises/A+, ES6 promise spec 
36
37
Insight #1 
Один подход не может быть 
применен везде и всегда. 
У каждой задачи – свое 
решение. 
38
element.animate() 
Я заанимирую все 
39
Часть крутой спеки 
Web Animations 
dev.w3.org/fxtf/web-animations/ 
40
Интерфейсы 
! 
AnimationTimeline 
AnimationPlayer 
AnimationNode 
AnimationTimingReadOnly 
AnimationTiming 
ComputedAnimationTiming 
AnimationGroup 
AnimationNodeList 
AnimationSequence 
Animation 
Animatable 
AnimationEffect 
KeyframeEffect 
MotionPathEffect 
41 
Расширения 
! 
Document 
timeline 
Element 
animate() 
getCurrentAnimations() 
getAnimationPlayers() 
! 
PseudoElement (возможно) 
animate() 
getCurrentAnimations() 
getAnimationPlayers() 
Web animations
Реализация в Blink 
Интерфейсы 
! 
AnimationTimeline 
AnimationPlayer 
AnimationNode 
AnimationTimingReadOnly 
AnimationTiming 
ComputedAnimationTiming 
AnimationGroup 
AnimationNodeList 
AnimationSequence 
Animation 
Animatable 
AnimationEffect 
KeyframeEffect 
MotionPathEffect 
42 
Расширения 
! 
Document 
timeline 
Element 
animate() 
getCurrentAnimations() 
getAnimationPlayers() 
! 
PseudoElement (возможно) 
animate() 
getCurrentAnimations() 
getAnimationPlayers() 
AnimationPlayer 
! 
source 
timeline 
startTime 
currentTime 
playbackRate 
playState 
ready 
finished 
cancel()! 
finish() 
play() 
pause() 
reverse() 
onfinish (уже нет в спеке)
43 
caniuse 
что ты делаешь? 
прекрати!
Какой будет стиль? 
<div id="wat" style="background: green !important"> 
... 
</div> 
44
Добавим непредсказуемости 
А теперь и ты испытай неизведанное ... 
document.getElementById('wat').animate([ 
{ backgroundColor: 'red' }, 
{ backgroundColor: 'blue' } 
], { 
duration: 123 
}); 
45
Проблемы 
• нет реализации остальной части 
спецификации (достаточно критичной) 
• нет инфраструктуры 
• нет инструментов 
46
47
Insight #2 
Запилить новую штуку – мало! 
Нужны: завершенность, 
контроль и инструменты. 
48
Web Components 
Я переверну веб 
49
Совокупность технологий 
• HTML imports 
• <template> 
• Custom elements 
• Shadow DOM 
50
Html imports 
w3c.github.io/webcomponents/spec/imports/ 
51
<link rel="import" href="foo.html"> 
52
53
Кажется хорошей идеей, но 
сложно, проблемы с 
производительностью… 
54
<template> 
www.w3.org/TR/html5/scripting-1.html#the-template-element 
55
Часть HTML5, 
самое безобидное в 
Web Components 
56
Название вводит в 
заблуждение 
57
“<template> provide a 
method for declaring inert 
DOM subtrees…” 
– HTML5 
58
В действии 
59 
<template id="row"> 
<tr><td><td> 
</template> 
! 
var template = document.querySelector('#row'); 
var row = template.content.cloneNode(true);
С <template> не нужно 
• ... костылей вроде: 
<script type="text/template" id="foo">..</script> 
• ... делать преобразование: 
innerHTML → DOM 
60
Custom elements 
w3c.github.io/webcomponents/spec/custom/ 
61
document.registerElement('custom-tag', { .. }) 
<custom-tag></custom-tag> 
62
В простых случаях может 
быть полезно, 
хорошо полифилится 
63
асинхронность, бесконечное 
наследование 
= 
мерцания при загрузке* 
* FOUC (flash of unstyled content ) 
64
Shadow DOM 
w3c.github.io/webcomponents/spec/shadow/ 
65
Кажется все начиналось с 
<style scoped> 
* пока только в Firefox, удалено в Chrome 35 
66
Инкапсуляция 
DOM-фрагментов 
67
68 
Shadow tree 
Имеют собственные 
стили, которые не 
пересекаются с 
другими shadow 
tree и с основным 
документом
ад, ад, ад... 
и еще немного ада! 
69
Например – события 
70
Берем «обычное» дерево 
71 
Node 
Insertion point 
Shadow root
То же дерево «в профиль» 
72
Путь события 
73
Путь события 
73
Путь события 
73 
Поэтому теперь есть 
event.path
Все тривиально! 
* на самом деле нет 
74
Web Components 
кажутся очень сложными 
75
76
Insight #3 
Веб-технологии всегда 
стремились быть простыми – 
это обеспечило им развитие 
и популярность. 
77
и тд и тп… 
78
Почему это имеет значение? 
79
Все, что попадает в 
веб-платформу остается в 
веб-платформе 
80
Цена ошибки очень высока 
81
<!doctype HTML> 
82
<blink>, <marquee>, 
<font>, … 
83
"FrontTalks".bold().italics() 
> "<i><b>FrontTalks</b></i>" 
84
Flexbox 
3 спецификации 
Должно быть Реальность 
.block { 
display: -webkit-box; /* OLD */ 
display: -moz-box; /* OLD */ 
display: -ms-flexbox; /* TWEENER - IE 10 */ 
display: -webkit-flex; /* NEW - Chrome */ 
display: flex; /* NEW, Spec */ 
} 
85 
.block { 
display: flex; 
}
Прогресс! 
86
Больше API, больше 
функций, больше 
возможностей! 
87
А что же с тем что есть? 
88
border-radius 
Chrome 5 Firefox 3.6 Opera 10.5 IE 8 
2009 
89
Угадай браузер 
1 2 
3 4 
2010 
90
Угадай браузер 
Opera IE9 
90 
Firefox 
Chrome, 
Safari 
2010
Проходят годы… 
91 
IE 
Firefox 
Chrome, 
Safari, 
Opera 
2014
SVG – баг на баге и багом 
погоняет 
92
DOM Level 2 Traversal and Range 
• 2000й год выпуска! 
• основа для работы с текстом 
• все браузеры ведут себя по разному, свои баги 
• не используется из-за нестабильности и 
неконсистености 
• лучшая альтернатива – <canvas> 
93
80/20 
94
80% задачи – 20% времени 
20% задачи – 80% времени 
95
80% задачи – 20% времени 
20% задачи – 80% времени 
96 
никогда
97
К чему все это? 
98
Интересуйтесь новым 
Читайте твитеры докладчиков, 
блоги браузеров, новости W3C 
99
Пробуйте 
100
Формируйте свое мнение 
101
Будьте осторожны 
102
Критикуйте ;) 
103
No bullshit! 
104
Save the Web! 
105
Спасибо! 
106 
Роман Дворнов 
@rdvornov 
rdvornov@gmail.com 
basis.js 
basisjs.com 
github.com/basisjs

More Related Content

PPTX
Какой фреймворк нам нужен для Web? Денис Цыплаков
PDF
Баба Яга против!
PPTX
мир без Jsp. thymeleaf 2.0
PDF
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
PDF
D2D Pizza JS Илья Беда "Куда мы все катимся?"
PPT
Презентация: 1С-Bitrix — как начать
PPT
WepPerfomance,
PDF
DOM-шаблонизаторы – не только "быстро"
Какой фреймворк нам нужен для Web? Денис Цыплаков
Баба Яга против!
мир без Jsp. thymeleaf 2.0
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
D2D Pizza JS Илья Беда "Куда мы все катимся?"
Презентация: 1С-Bitrix — как начать
WepPerfomance,
DOM-шаблонизаторы – не только "быстро"

What's hot (20)

PPTX
Chef @DevWeb
PDF
Unit-тестирование скриншотами: преодолеваем звуковой барьер
PDF
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
PDF
Жизнь в изоляции
PDF
Инструменты разные нужны, инструменты разные важны
PDF
Демонизированный PHP - before it was cool
PDF
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
PDF
SPA инструменты
PDF
Всему своё время / Роман Ивлиев (Банки.ру)
PDF
Joker2014
PDF
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
PDF
Как разраба
PDF
CodeFest 2011. Макаров А. — Как разрабатывается Yii
PDF
Быстро о быстром
PPTX
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
PPT
Воюем за ресурсы (ZFConf2011)
PDF
Инструментируй это
PDF
Иван Карев — Клиентская оптимизация
PDF
Не бойся, это всего лишь данные... просто их много
PDF
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
Chef @DevWeb
Unit-тестирование скриншотами: преодолеваем звуковой барьер
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
Жизнь в изоляции
Инструменты разные нужны, инструменты разные важны
Демонизированный PHP - before it was cool
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
SPA инструменты
Всему своё время / Роман Ивлиев (Банки.ру)
Joker2014
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Как разраба
CodeFest 2011. Макаров А. — Как разрабатывается Yii
Быстро о быстром
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Воюем за ресурсы (ZFConf2011)
Инструментируй это
Иван Карев — Клиентская оптимизация
Не бойся, это всего лишь данные... просто их много
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
Ad

Similar to Баба-Яга против! — Роман Дворнов, Ostrovok.ru (20)

PPTX
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
PPTX
Codeception Introduction
PPTX
Codeception UATestingDays
PPT
Easy authcache 2 кэширование для pro. Родионов Игорь
PPT
Easy authcache 2 кеширование для pro родионов игорь
PDF
TК°Conf. Организация разработки Frontend. Виталий Слободин.
PPTX
Little Service in 2h
PDF
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
PDF
Тестирование серверной конфигурации
PPT
Client Side Autotesting Flash
PPTX
Daemons In Web on #devrus
PDF
InterSystems Community and Projects in CIS November 2015
PDF
[jeeconf-2011] Java Platform Performance BoF
PDF
Компонентный подход: скучно, неинтересно, бесперспективно
PDF
"Девопс - это не только для программистов. Практические примеры из жизни одно...
PDF
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
PDF
Cовременный станок верстальщика
PDF
Иван Карев — Клиентская оптимизация
PDF
Domain Specific Languages (for business rules)
PPTX
What's new in Visual Studio 2012
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Codeception Introduction
Codeception UATestingDays
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2 кеширование для pro родионов игорь
TК°Conf. Организация разработки Frontend. Виталий Слободин.
Little Service in 2h
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
Тестирование серверной конфигурации
Client Side Autotesting Flash
Daemons In Web on #devrus
InterSystems Community and Projects in CIS November 2015
[jeeconf-2011] Java Platform Performance BoF
Компонентный подход: скучно, неинтересно, бесперспективно
"Девопс - это не только для программистов. Практические примеры из жизни одно...
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Cовременный станок верстальщика
Иван Карев — Клиентская оптимизация
Domain Specific Languages (for business rules)
What's new in Visual Studio 2012
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айт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...

Баба-Яга против! — Роман Дворнов, Ostrovok.ru