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

115
Баба-яга против! Екатеринбург, 19 cентября 2014 Роман Дворнов

Upload: basisjs

Post on 25-Jun-2015

349 views

Category:

Internet


4 download

DESCRIPTION

В последнее время во фронтенде появляется столько нового и внедряется настолько быстро, что не все успевают осознать последствия. Хорошо это или плохо? Рассмотрим некоторые новинки с точки зрения «за», а главное – «против». Конференция FrontTalks, Екатеринбург, 19 сентября Видео: https://vimeo.com/107694664

TRANSCRIPT

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

Баба-яга против!

Екатеринбург, 19 cентября 2014

Роман Дворнов

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

О себе• Работал в ostrovok.ru, Единный кошелек

• Автор basis.js

2

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

О себе

3

• Работал в ostrovok.ru, Единный кошелек

• Автор basis.js

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

Сказка4

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

Сначала был Интернет…

5

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

Microsoft vs. Netscape

6

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

7

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

IE68

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

9

IE, ты все делаешь не так – уходи!

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

10

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

Победила дружба…

11

любовь к стандартам

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

12

* …зуда, запора, вопросов о смысле жизни

Стандарты Средство от мигреней*

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

“Проприетарные фичи, которые не прошли процесс стандартизации обычно имеют плохой дизайн,

даже когда идея была хорошей.”

13

– Lea Verou

http://habrahabr.ru/post/138252/Каждый раз, когда вы выдаете проприетарную фичу за CSS3 — умирает котенок

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

В идеале• предложение и обсуждение

• черновик стандарта

• пробные реализации

• стандарт

• официальные реализации

14

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

В идеале• предложение и обсуждение

• черновик стандарта

• пробные реализации

• стандарт

• официальные реализации

14

с префиксом или «за флагом»

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

В идеале• предложение и обсуждение

• черновик стандарта

• пробные реализации

• стандарт

• официальные реализации

14

с префиксом или «за флагом»

можно безопасно

использовать

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

В действительности• предложение и обсуждение

• черновик стандарта

• пробные реализации

• стандарт

• официальные реализации

15

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

16

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

Promise Я обещаю быть лапочкой

17

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

Promise – "лекарство" от callback-hell

18

fronttalks.ru/events/2013-07/presentations/davydov/index.html Михаил Давыдов «Promise – это не больно»

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

Множество реализаций

19

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

Официальная спецификация

Promises/A+ promisesaplus.com

20

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

Давайте сделаем частью JavaScript!

21

* стало частью ES6

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

Мы знаем как надо – префиксы не нужны!

22

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

Должно было быть

23

!

var promiseSupported = 'Promise' in window;

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

В действительности

24

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'; })();

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

– Bill Gates

“Успех – паршивый учитель. Он заставляет умных людей думать, что они не могут

проиграть.”

25

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

Хотите использовать сегодня – готовьте полифил

26

Например, github.com/lahmatiy/es6-promise-polyfill

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

Зато нативные реализации лучше!

27

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

Правда?

28

BrowserTime, 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

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

Promise-истерия

29

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

Применяй с умом!

Promise anti-patterns taoofcode.net/promise-anti-patterns/

30

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

Promise проникают в стандарты

31

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

DOM4

32

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

DOM4• декабрь 2013:

«Черновик стандарта DOM4 включает в себя Promises как примитив языка...»WSD: Сергей Константинов — Что интересного готовит нам W3Cwww.slideshare.net/yandex/w3c-28967881

32

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

DOM4• декабрь 2013:

«Черновик стандарта DOM4 включает в себя Promises как примитив языка...»WSD: Сергей Константинов — Что интересного готовит нам W3Cwww.slideshare.net/yandex/w3c-28967881

• январь 2014: Promise исключены из DOM4 – теперь просто часть ES6

32

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

Ссылаются на DOM4• Web NFC

• Quota Management

• Web Cryptography

• Web MIDI

• Device Capabilities

• Messaging

• Contacts Manager

• Web Telephony

33

Вот так одна спецификация может

"отравить" другие

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

Ссылаются на ES6

34

• CSS Font Loading

• Web animations (с июля 2014)

• Service Workers

• TCP and UDP Socket

• Streams

• Battery Status

• Task Scheduler

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

Народное творчество:

FontStatusPromise ResponsePromise

AbortableProgressPromise …

35

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

“Promises should be for one-and-done, non-interruptible,

atomic-ish operations.”

36

– Domenic DenicolaАвтор Q, Promises/A+, ES6 promise spec

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

Да вы упоролись!

“Promises should be for one-and-done, non-interruptible,

atomic-ish operations.”

36

– Domenic DenicolaАвтор Q, Promises/A+, ES6 promise spec

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

37

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

Один подход не может быть применен везде и всегда.У каждой задачи – свое

решение.

Insight #1

38

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

element.animate() Я заанимирую все

39

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

Часть крутой спеки

Web Animations dev.w3.org/fxtf/web-animations/

40

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

41

Интерфейсы ! AnimationTimeline AnimationPlayer AnimationNode AnimationTimingReadOnly AnimationTiming ComputedAnimationTiming AnimationGroup AnimationNodeList AnimationSequence Animation Animatable AnimationEffect KeyframeEffect MotionPathEffect

Расширения ! Document timeline Element animate() getCurrentAnimations() getAnimationPlayers() ! PseudoElement (возможно) animate() getCurrentAnimations() getAnimationPlayers()

Web animations

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

42

Интерфейсы ! AnimationTimeline AnimationPlayer AnimationNode AnimationTimingReadOnly AnimationTiming ComputedAnimationTiming AnimationGroup AnimationNodeList AnimationSequence Animation Animatable AnimationEffect KeyframeEffect MotionPathEffect

Расширения ! Document timeline Element animate() getCurrentAnimations() getAnimationPlayers() ! PseudoElement (возможно) animate() getCurrentAnimations() getAnimationPlayers()

Реализация в Blink AnimationPlayer ! source timeline startTime currentTime playbackRate playState ready finished cancel()! finish() play() pause() reverse() onfinish (уже нет в спеке)

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

43

caniuseчто ты делаешь?

прекрати!

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

Какой будет стиль?

44

<div id="wat" style="background: green !important"> ... </div>

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

Добавим непредсказуемости

45

document.getElementById('wat').animate([ { backgroundColor: 'red' }, { backgroundColor: 'blue' }], { duration: 123});

А теперь и ты испытай неизведанное ...

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

Проблемы

• нет реализации остальной части спецификации (достаточно критичной)

• нет инфраструктуры

• нет инструментов

46

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

47

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

Запилить новую штуку – мало! Нужны: завершенность, контроль и инструменты.

48

Insight #2

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

Web Components Я переверну веб

49

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

Совокупность технологий

• HTML imports

• <template>

• Custom elements

• Shadow DOM

50

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

Html imports w3c.github.io/webcomponents/spec/imports/

51

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

<link rel="import" href="foo.html">

52

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

53

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

Кажется хорошей идеей, но сложно, проблемы с

производительностью…

54

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

<template>www.w3.org/TR/html5/scripting-1.html#the-template-element

55

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

Часть HTML5, самое безобидное в

Web Components

56

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

Название вводит в заблуждение

57

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

“<template> provide a method for declaring inert

DOM subtrees…”

58

– HTML5

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

В действии

59

<template id="row"> <tr><td><td></template>!

var template = document.querySelector('#row');var row = template.content.cloneNode(true);

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

С <template> не нужно

• ... костылей вроде:<script type="text/template" id="foo">..</script>

• ... делать преобразование:innerHTML → DOM

60

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

Custom elementsw3c.github.io/webcomponents/spec/custom/

61

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

document.registerElement('custom-tag', { .. })

<custom-tag></custom-tag>

62

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

В простых случаях может быть полезно,

хорошо полифилится

63

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

асинхронность, бесконечное наследование

= мерцания при загрузке*

64

* FOUC (flash of unstyled content )

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

Shadow DOMw3c.github.io/webcomponents/spec/shadow/

65

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

Кажется все начиналось с<style scoped>

66

* пока только в Firefox, удалено в Chrome 35

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

Инкапсуляция DOM-фрагментов

67

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

68

Shadow treeИмеют собственные стили, которые не пересекаются с другими shadow tree и с основным документом

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

ад, ад, ад... и еще немного ада!

69

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

Например – события

70

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

71

Shadow root

Node

Insertion point

Берем «обычное» дерево

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

72

То же дерево «в профиль»

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

73

Путь события

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

73

Путь события

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

73

Путь события

Поэтому теперь есть event.path

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

Все тривиально!

74

* на самом деле нет

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

Web Components кажутся очень сложными

75

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

76

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

Веб-технологии всегда стремились быть простыми – это обеспечило им развитие

и популярность.77

Insight #3

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

и тд и тп…

78

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

Почему это имеет значение?

79

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

Все, что попадает в веб-платформу остается в

веб-платформе

80

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

Цена ошибки очень высока

81

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

<!doctype HTML>

82

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

<blink>, <marquee>, <font>, …

83

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

"FrontTalks".bold().italics()

> "<i><b>FrontTalks</b></i>"

84

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

Flexbox

85

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 */}

.block { display: flex;}

Должно быть Реальность

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

Прогресс!

86

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

Больше API, больше функций, больше возможностей!

87

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

А что же с тем что есть?

88

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

border-radius

89

Chrome 5 Firefox 3.6 Opera 10.5 IE 8

2009

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

Угадай браузер

90

2010

3 4

1 2

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

Угадай браузер

90

Opera IE9

Firefox Chrome, Safari

2010

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

Проходят годы…

91

IE

FirefoxChrome, Safari, Opera

2014

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

SVG – баг на баге и багом погоняет

92

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

DOM Level 2 Traversal and Range

• 2000й год выпуска! • основа для работы с текстом • все браузеры ведут себя по разному, свои баги • не используется из-за нестабильности и неконсистености

• лучшая альтернатива – <canvas>93

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

80/20

94

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

80% задачи – 20% времени 20% задачи – 80% времени

95

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

80% задачи – 20% времени 20% задачи – 80% времени

96

никогда

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

97

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

Производители браузеров – у вас много технических долгов.

Надо доделывать!

98

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

К чему все это?

99

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

Интересуйтесь новым

100

Читайте твитеры докладчиков, блоги браузеров, новости W3C

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

Пробуйте

101

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

Формируйте свое мнение

102

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

Будьте осторожны

103

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

Критикуйте ;)

104

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

No bullshit!105

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

Save the Web!106

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

Спасибо!

107

Роман Дворнов @rdvornov [email protected]

basis.js basisjs.com

github.com/basisjs