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

What's hot (20)

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

Viewers also liked (8)

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

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

PDF
webpack: 7 бед - один ответ
Denis Izmaylov
 
PDF
Актуальные технологии и тренды в веб-разработке
Denis Izmaylov
 
PDF
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
MoscowJS
 
PDF
Сергей Константинов — Что интересного готовит нам W3C
Yandex
 
PDF
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
ScrumTrek
 
PDF
JavaScript сегодня: React, Redux и новая реальность
Denis Izmaylov
 
PDF
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
ITCrowd Almaty
 
PDF
Бэкенд, фронтенд — всё смешалось (nodkz)
Pavel Chertorogov
 
PDF
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
GeeksLab Odessa
 
PDF
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
PDF
YaC 2013 Notes
Anton Ignatov
 
PPTX
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Ontico
 
PDF
Фронтенд разработка без боли
Anton Piskunov
 
PDF
Изоморфные react-приложения
Denis Izmaylov
 
PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
DevDay
 
PDF
Изоморфные Java script приложения с catberry.js
lugnsk
 
PDF
D2D Pizza JS Илья Беда "Куда мы все катимся?"
Dev2Dev
 
PDF
Java script и frontend завтра - Kharkiv JS 2013
Andrey Listochkin
 
PDF
Павел Юрийчук - Разработка приложений под мобильные браузеры
UA Mobile
 
PDF
JavaScript Базовый. Занятие 09.
Igor Shkulipa
 
webpack: 7 бед - один ответ
Denis Izmaylov
 
Актуальные технологии и тренды в веб-разработке
Denis Izmaylov
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
MoscowJS
 
Сергей Константинов — Что интересного готовит нам W3C
Yandex
 
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
ScrumTrek
 
JavaScript сегодня: React, Redux и новая реальность
Denis Izmaylov
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
ITCrowd Almaty
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Pavel Chertorogov
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
GeeksLab Odessa
 
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
YaC 2013 Notes
Anton Ignatov
 
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Ontico
 
Фронтенд разработка без боли
Anton Piskunov
 
Изоморфные react-приложения
Denis Izmaylov
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
DevDay
 
Изоморфные Java script приложения с catberry.js
lugnsk
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
Dev2Dev
 
Java script и frontend завтра - Kharkiv JS 2013
Andrey Listochkin
 
Павел Юрийчук - Разработка приложений под мобильные браузеры
UA Mobile
 
JavaScript Базовый. Занятие 09.
Igor Shkulipa
 
Ad

More from Roman Dvornov (9)

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

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