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
К чему все это? 
99
Интересуйтесь новым 
Читайте твитеры докладчиков, 
блоги браузеров, новости W3C 
100
Пробуйте 
101
Формируйте свое мнение 
102
Будьте осторожны 
103
Критикуйте ;) 
104
No bullshit! 
105
Save the Web! 
106
Спасибо! 
107 
Роман Дворнов 
@rdvornov 
rdvornov@gmail.com 
basis.js 
basisjs.com 
github.com/basisjs

More Related Content

PDF
Жизнь в изоляции
PDF
DOM-шаблонизаторы – не только "быстро"
PDF
Не бойся, это всего лишь данные... просто их много
PDF
Инструменты разные нужны, инструменты разные важны
PDF
Быстро о быстром
PDF
Basis.js – «под капотом»
PDF
SPA инструменты
PDF
Как построить DOM
Жизнь в изоляции
DOM-шаблонизаторы – не только "быстро"
Не бойся, это всего лишь данные... просто их много
Инструменты разные нужны, инструменты разные важны
Быстро о быстром
Basis.js – «под капотом»
SPA инструменты
Как построить DOM

What's hot (20)

PDF
Опыт разработки эффективного SPA
PDF
Unit-тестирование скриншотами: преодолеваем звуковой барьер
PDF
Инструментируй это
PDF
JavaScript Базовый. Занятие 07.
PPTX
Chef @DevWeb
PDF
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
PPT
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
PDF
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
PDF
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
PPTX
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
PDF
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
PDF
Kranonit s16 (python). dmitry furzenko
PDF
БЭМ в дикой природе
PDF
JavaScript Базовый. Занятие 08.
PDF
Как сделать ваш JavaScript быстрее
PDF
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
PPTX
Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)
PDF
Внутреннее устройство и оптимизация бандла webpack
PDF
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
PDF
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
Опыт разработки эффективного SPA
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Инструментируй это
JavaScript Базовый. Занятие 07.
Chef @DevWeb
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
Kranonit s16 (python). dmitry furzenko
БЭМ в дикой природе
JavaScript Базовый. Занятие 08.
Как сделать ваш JavaScript быстрее
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)
Внутреннее устройство и оптимизация бандла webpack
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Виталий Харисов "История создания БЭМ. Кратко, сбивчиво и неполно"
Ad

Viewers also liked (8)

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

Similar to Баба Яга против! (20)

PDF
D2D Pizza JS Илья Беда "Куда мы все катимся?"
PDF
Иван Карев — Клиентская оптимизация
PPTX
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
PPTX
Codeception Introduction
PPTX
Codeception UATestingDays
PPT
Easy authcache 2 кэширование для pro. Родионов Игорь
PPTX
Little Service in 2h
PPT
Easy authcache 2 кеширование для pro родионов игорь
PDF
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
PDF
Тестирование серверной конфигурации
PPTX
Daemons In Web on #devrus
PDF
TК°Conf. Организация разработки Frontend. Виталий Слободин.
PDF
InterSystems Community and Projects in CIS November 2015
PDF
Компонентный подход: скучно, неинтересно, бесперспективно
PPT
Client Side Autotesting Flash
PDF
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
PDF
Cовременный станок верстальщика
PPTX
What's new in Visual Studio 2012
PDF
Иван Карев — Клиентская оптимизация
PPTX
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
D2D Pizza JS Илья Беда "Куда мы все катимся?"
Иван Карев — Клиентская оптимизация
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Codeception Introduction
Codeception UATestingDays
Easy authcache 2 кэширование для pro. Родионов Игорь
Little Service in 2h
Easy authcache 2 кеширование для pro родионов игорь
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
Тестирование серверной конфигурации
Daemons In Web on #devrus
TК°Conf. Организация разработки Frontend. Виталий Слободин.
InterSystems Community and Projects in CIS November 2015
Компонентный подход: скучно, неинтересно, бесперспективно
Client Side Autotesting Flash
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Cовременный станок верстальщика
What's new in Visual Studio 2012
Иван Карев — Клиентская оптимизация
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...

More from Roman Dvornov (8)

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

Баба Яга против!