SlideShare uma empresa Scribd logo
1 de 231
Baixar para ler offline
Карточный домик
Роман Дворнов
Avito
Москва, июль 2015
Touch Events vs. Pointer Events
2
Работаю в Avito
Делаю SPA
Автор basis.js
Я…
За любую движуху, 

кроме голодовки ;)
4
tinyurl.com/baba-yaga-protiv
Баба-яга против!
Екатеринбург, 19 cентября 2014
Touch Events vs. Pointer Events
6
Часть первая+
Урок истории
Самая скучная часть доклада
Touch Events
7
8
Mobile Safari –

рождение Touch Events
9
июнь 2007
Apple не стала вносить
реализацию в WebKit
10
июнь 2007
в WebKit появилась
реализация Touch Events
(от Android)
11
конец 2009
А как же стандарт?
12
W3C начал работать 

над Touch Events
13
май 2011
Candidate 

Recommendation
14
декабрь 2011
Apple раскрыла* свои
патенты
16
декабрь 2011
* Члены W3C обязаны это делать согласно Patent Policy
www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure
W3C гарантирует
«юридическую чистоту»*
спецификации
17
Знаете ли вы?
* нет нарушения патентов или авторских прав
W3C не требует от держателей
патентов отказываться от их
конкурентного преимущества
18
Для W3C приемлема 

‟Royalty-free” лицензия,
разрешающая реализацию
только в браузерах
19
– Не вариант, – сказала Apple
– Не вариант, – сказала Apple
TE PAG
21
www.w3.org/2012/01/touch-pag-charter
Touch Events Patent Advisory Group
январь 2012
Touch Events version 2
23
Touch Events version 2
23
сентябрь 2012
в пользу Pointer Events
Recommendation
24
октябрь 2013
www.w3.org/TR/touch-events/
2007 – 2013
25
Pointer Events
26
W3C задумалась об
унифицированной модели
работы с указателями: 

мышь, touch, перо и т.д.
27
2009
Спецификация
28
2009
Спецификация
28
2009
МНОГО
БУКВ
Спецификации должны
быть как можно проще,
чтобы быстрее доводить 

до рекомендации
29
– Позиция W3C
30
Вы же помните 

историю с

CSS 2.1?
30
Вы же помните 

историю с

CSS 2.1?
IE10 mobile –
рождение Pointer Events
31
июнь 2012
32
Опять Microsoft со своим велосипедом…
32
Опять Microsoft со своим велосипедом…
Проясним ситуацию, в это время…
• Touch Events заблокирована патентом Apple
• Microsoft выводит на рынок новые продукты
• W3C нужна универсальная модель
33
Ну что ж Microsoft, давай – удиви…
Ну что ж Microsoft, давай – удиви…
Заявка от Microsoft в W3C:
Pointer Events
35
сентябрь 2012
www.w3.org/Submission/pointer-events/
Засчитано:
Working Draft
36
декабрь 2012
www.w3.org/TR/pointerevents/
Candidate

Recommendation
37
май 2013
www.w3.org/TR/pointerevents/
Recommendation
38
август 2014
www.w3.org/TR/pointerevents/
Recommendation
38
август 2014
январь 2015
www.w3.org/TR/pointerevents/
39
tinyurl.com/pk8wbkd
«…16 января закончился период
комментариев… 16 членов W3C
поддержали публикацию… один –
подал официальное возражение…»
40
Им оказался…
40
tinyurl.com/ocfhxaj
Им оказался… Яндекс
40
tinyurl.com/ocfhxaj
habrahabr.ru/company/yandex/blog/188520/
Им оказался… Яндекс
Вероятно возражение базировалось на
негативном опыте команды Яндекс.Карт
по работе с PE в IE10 в 2013м
Recommendation
41
август 2014
январь 2015
www.w3.org/TR/pointerevents/
февраль 2015
А теперь все вместе
42
43
Touch Events
Pointer Events
43
июль 2007
iPhone
Touch Events
Pointer Events
43
июль 2007
iPhone
2009
WebKit
Touch Events
Pointer Events
43
июль 2007
iPhone
2009
WebKit
WD
май 2011
Touch Events
Pointer Events
43
июль 2007
iPhone
2009
WebKit
WD
май 2011
CR
дек 2011
Touch Events
Pointer Events
43
июль 2007
iPhone
2009
WebKit
WD
май 2011
CR
дек 2011
янв 2012
TE PAG
Touch Events
Pointer Events
43
июль 2007
iPhone
2009
WebKit
WD
май 2011
CR
дек 2011
янв 2012
TE PAG
Touch Events
Pointer Events
43
июль 2007
iPhone
2009
WebKit
WD
май 2011
CR
дек 2011
янв 2012
TE PAG
июнь 2012
IE10 Mobile
Touch Events
Pointer Events
43
июль 2007
iPhone
2009
WebKit
WD
май 2011
CR
дек 2011
янв 2012
TE PAG
Заявка
сен 2012
июнь 2012
IE10 Mobile
Touch Events
Pointer Events
43
июль 2007
iPhone
2009
WebKit
WD
май 2011
CR
дек 2011
янв 2012
TE PAG
Заявка
сен 2012
июнь 2012
IE10 Mobile
Touch Events
Pointer Events
сен 2012
TE v2
43
июль 2007
iPhone
2009
WebKit
WD
май 2011
CR
дек 2011
янв 2012
TE PAG
Заявка
сен 2012
WD
дек 2012
июнь 2012
IE10 Mobile
Touch Events
Pointer Events
сен 2012
TE v2
43
июль 2007
iPhone
2009
WebKit
WD
май 2011
CR
дек 2011
янв 2012
TE PAG
Заявка
сен 2012
WD
дек 2012
CR
май 2013
июнь 2012
IE10 Mobile
Touch Events
Pointer Events
сен 2012
TE v2
43
июль 2007
iPhone
2009
WebKit
WD
май 2011
CR
дек 2011
янв 2012
TE PAG
REC
окт 2013
Заявка
сен 2012
WD
дек 2012
CR
май 2013
июнь 2012
IE10 Mobile
Touch Events
Pointer Events
сен 2012
TE v2
43
июль 2007
iPhone
2009
WebKit
WD
май 2011
CR
дек 2011
янв 2012
TE PAG
REC
окт 2013
Заявка
сен 2012
WD
дек 2012
CR
май 2013
июнь 2012
IE10 Mobile
Touch Events
Pointer Events
сен 2012
TE v2
янв 2015
протест
43
июль 2007
iPhone
2009
WebKit
WD
май 2011
CR
дек 2011
янв 2012
TE PAG
REC
окт 2013
Заявка
сен 2012
WD
дек 2012
CR
май 2013
июнь 2012
IE10 Mobile
Touch Events
Pointer Events
сен 2012
TE v2
янв 2015
протест
REC
фев 2015
44
Часть вторая+
Матчасть
Самая техническая
Touch Events и Pointer Events
разные решения одной
проблемы
45
Touch Events – 

решает одну задачу, 

работа с touch
46
Pointer Events –

универсальная модель, 

для любых типов указателей
47
48
Pointer EventsTouch Events
События
+
touchstart
touchend
touchmove
touchcancel
Интерфейсы
+
TouchEvent : UIEvent
Touch
TouchList
+
Расширения
+
Document
createTouchEvent
createTouchList
События
+
pointerdown
pointerup
pointermove
pointercancel
pointerover
pointerout
pointerenter
pointerleave
gotpointercapture
lostpointercapture
+
CSS
+
touch-action
Интерфейсы
+
PointerEvent : MouseEvent
+
Расширения
+
Element
setPointerCapture
releasePointerCapture
+
Navigator!
pointerEnabled
maxTouchPoints
Изучение
49
Pointer EventsTouch Events
≈ Mouse Events
совсем
другая модель
Touch Events
50
B
C
A Событие target
Touch Events
50
B
C
A Событие target
Touch Events
50
B
C
A Событие target
touchstart B
Touch Events
50
B
C
A Событие target
touchstart B
touchmove B
touchmove B
…
Touch Events
50
B
C
A Событие target
touchstart B
touchmove B
touchmove B
…
touchmove B
…
Touch Events
50
B
C
A Событие target
touchstart B
touchend B
touchmove B
touchmove B
…
touchmove B
…
Pointer Events
51
B
C
A Событие target
Pointer Events
51
B
C
A Событие target
Pointer Events
51
B
C
A Событие
pointerdown B
target
Pointer Events
51
B
C
A Событие
pointerdown B
pointermove B
pointermove A
…
target
Pointer Events
51
B
C
A Событие
pointerdown B
pointermove B
pointermove A
…
pointermove C
…
target
Pointer Events
51
B
C
A Событие
pointerdown B
pointerup C
pointermove B
pointermove A
…
pointermove C
…
target
Pointer Events
51
B
C
A Событие
pointerdown B
pointerup C
pointermove B
pointermove A
…
pointermove C
…
target
Hit-testing
Pointer Events + pointer capture
52
B
C
A Событие target
Pointer Events + pointer capture
52
B
C
A Событие target
Pointer Events + pointer capture
52
B
C
A Событие
pointerdown B
target
Pointer Events + pointer capture
52
B
C
A Событие
pointerdown B
B.setPointerCapture(e.pointerId)
target
Pointer Events + pointer capture
52
B
C
A Событие
pointerdown B
pointermove B
pointermove B
…
B.setPointerCapture(e.pointerId)
target
Pointer Events + pointer capture
52
B
C
A Событие
pointerdown B
pointermove B
pointermove B
…
pointermove B
…
B.setPointerCapture(e.pointerId)
target
Pointer Events + pointer capture
52
B
C
A Событие
pointerdown B
pointerup B
pointermove B
pointermove B
…
pointermove B
…
B.setPointerCapture(e.pointerId)
target
Расширяемость
53
Pointer EventsTouch Events
под любой 

тип указателя
только touch
PointerEvent : MouseEvent
54
• pointerType
• isPrimary
• width / height
• pressure
• tiltX / tiltY
PointerEvent : MouseEvent
55
• pointerType
• isPrimary
• width / height
• pressure
• tiltX / tiltY
Тип указателя:
mouse, pen, touch …
PointerEvent : MouseEvent
56
• pointerType
• isPrimary
• width / height
• pressure
• tiltX / tiltY
Главный указатель

для своего типа
PointerEvent : MouseEvent
57
• pointerType
• isPrimary
• width / height
• pressure
• tiltX / tiltY
Ширина и высота 

области контакта
PointerEvent : MouseEvent
58
• pointerType
• isPrimary
• width / height
• pressure
• tiltX / tiltY
Сила надавливания
PointerEvent : MouseEvent
59
• pointerType
• isPrimary
• width / height
• pressure
• tiltX / tiltY
Углы наклона (пера)

к поверхности
One more thing
60
Pointer Events (CSS)
61
touch-action: auto | none |
[ pan-x || pan-y ] |
manipulation
62
Минус:
Плюс: Позволяет оптимизировать действия
(отдельный процесс, GPU)
+
Нет pointer* событий
(для касаний, участвующих в действии)
MSManipulationStateChanged
63
technet.microsoft.com/en-us/ie/hh771908(v=vs.71).aspx
Позволяет отслеживать состояние touch-action
Пока не в спецификации
Polyfill
64
Touch Events → Pointer Events
65
touchstart
touchend
touchmove
touchcancel
document.elementFromPoint()+
Touch Events → Pointer Events
65
touchstart
touchend
touchmove
touchcancel
document.elementFromPoint()+
«Ручной» hit-testing
Touch Events → Pointer Events
66
Нельзя заполифилить touch-action
67
pointerdown
pointerup
pointermove
pointercancel
element.setPointerCapture()+
Pointer Events → Touch Events
В спецификациях 

нет жестов (gesture)
68
Touch Events 

пока ограничены*
69
* многое должно было быть в TEv2
В спецификации Touch Events
много белых пятен*
70
* многое должно было быть в TEv2
Pointer events могут заменить
все остальные API – 

Mouse Events и Touch Events
71
Часть третья
Мир пополам
Самая внезапная
Реализации
73
Pointer EventsTouch Events
• iOS Safari
• WebKit (Android, etc)
• Blink
• Firefox mobile
• IE11 mobile (эмуляция)
• Edge
• IE10/IE11/Edge
• Firefox 41+
• Blink (в разработке)
Touch Events 

первое решение проблемы
74
Pointer Events 

более продуманное решение
75
76
Pointer Events все встретили хорошо…
76
Pointer Events все встретили хорошо…
77
Кроме Apple…
77
Кроме Apple…
Microsoft помогает 

с реализацией 

WebKit, Blink и Firefox
78
tinyurl.com/k8uqx8u
79
79
Google официально 

отказалась реализовывать

Pointer Events в Blink
80
август 2014
tinyurl.com/nbeqpsb
81
Pointer Events, вы нам больше не нужны…
81
Pointer Events, вы нам больше не нужны…
82
www.youtube.com/watch?v=ngBy0H_q-GY
Инженеры 

оправдываются…
Mobile first
83
Причина №1
Safari поддерживает только
Touch Events, поэтому Pointer
Events не стать популярными
84
85
Браво! Слова настоящих 

инноваторов!
85
Браво! Слова настоящих 

инноваторов!
86
Другие
3,73%
Firefox
3,57%
IE6
92,7%
Доля браузеров Q3 2004
86
Другие
3,73%
Firefox
3,57%
IE6
92,7%
Доля браузеров Q3 2004
Mozilla изменила
Web
86
Другие
3,73%
Firefox
3,57%
IE6
92,7%
Доля браузеров Q3 2004
Mozilla изменила
Web
Пришлось следовать
стандартам
87
Доля мобильных браузеров Q3 2014
Другие
4%
IE
2,53%
Opera Mini
7,87%
Chrome
19,62%
Android Browser
21,11%
Safari
44,86%
Несокрушимая 

сила?
«В мобильном вебе, Safari стал
новым IE6. Многие мобильные
сайты делаются не по стандартам,
они делаются под Safari.»
88
tinyurl.com/m3lqb43
Позиция Google –
укрепляет положение Safari
89
К черту стандарты, 

делаем все как Safari?!
90
91
Триумф Apple?
91
Триумф Apple?
92
Триумф Apple?
92
Триумф Apple?
Быстродействие
93
Причина №2
Pointer Events требуют 

hit-testing на движение пальца
(все как в Mouse Events)
94
Зато позволяют вынести часть
работы в отдельный процесс 

и привлечь GPU
(scroll, zooming etc)
95
96
Google
Hit-testing
big performance
issues*
~0.15 мс
Microsoft
* большие проблемы с быстродействием
96
Google
Hit-testing
big performance
issues*
~0.15 мс
Microsoft
0.00015 сек
=
* большие проблемы с быстродействием
96
Google
Hit-testing
big performance
issues*
~0.15 мс
Microsoft
поверьте на слово
=
0.00015 сек
=
* большие проблемы с быстродействием
97
Android
Hit-testing
Заведется везде
где есть
«процессор»
Строгие
требования к
оборудованию
Windows Phone
98
Вы на что-то намекаете?
98
Вы на что-то намекаете?
99
Android
Hit-testing
Windows Phone
99
Android
Hit-testing
Windows Phone
99
Android
Hit-testing
Windows Phone
«Нужно будет поддерживать 

две событийные модели – 

это ударит по быстродействию»
100
Google:
Making the web “just work”:
сначала в IE11 Mobile сделали
эмуляцию Touch Events
101
Microsoft:
tinyurl.com/ph4kxdr
Touch Events

доступно в IE11 и Edge
102
Microsoft
tinyurl.com/q7fpu2o
пока Platform Preview
«Мы не хотим реализовывать
ненужное API»
103
Google:
104
Чтобы не случилось, все время
говори "big performance issues" –
должно сработать...
104
Чтобы не случилось, все время
говори "big performance issues" –
должно сработать...
Функциональность
105
Причина №3
Pointer Events –

скролл и обработка событий
взаимоисключаются
106
Нельзя сделать 

pull-to-refresh
107
108
108
109
dwcares.com/pull-to-refresh-2
Решение: chained scrollers & snap points
-ms-scroll-snap
-ms-overflow-style
MSManipulationStateChanged
Хоть и с применением
проприетарных решений:
Зато – работает!
110
Хорошо… как там…

big performance issues?
110
Хорошо… как там…

big performance issues?
«pull-to-refresh» запатентован – 

патент принадлежит Twitter
111
tinyurl.com/n4zsqef
Между прочим
112
IPA+
Innovator’s Patent Agreement
blog.twitter.com/2013/brewing-our-first-ipa-patent-and-new-adopters
112
IPA+
Innovator’s Patent Agreement
blog.twitter.com/2013/brewing-our-first-ipa-patent-and-new-adopters
Только мне причины
кажутся неубедительными?
113
114
Ну давай, срабатывай уже…
big performance issues…

big performance issues…
114
Ну давай, срабатывай уже…
big performance issues…

big performance issues…
Окей, Google, а что делать
с недостающими вещами 

в Touch Events?
115
116
Так мы это… свое запилим!
Вот например, touch – и соль в тарелке!
116
Так мы это… свое запилим!
Вот например, touch – и соль в тарелке!
«Вместо внедрения Pointer Events,
нам кажется будет лучше для веба, 

постепенная доработка API,
которое широко используется.»
117
tinyurl.com/kfwpf2d
План?
tinyurl.com/m7yqlrz
118
Стандарт?
119
Будут ли эти расширения
поддерживать другие
браузеры и когда?
120
Консистентность
реализаций?
121
Сейчас много расхождений в
реализациях Touch Events:
Safari, WebKit, Blink, Firefox, IE
122
Добро пожаловать в открытый веб!
Добро пожаловать в открытый веб!
Мнение разработчиков
124
«Мы (команда jQuery) считаем,
что Pointer Events проще
использовать и они больше
нацелены на будущее…»
125
tinyurl.com/kgocn4n
«Команда Polymer уверена,
что Pointer Events лучшее
решение для обработки
пользовательского ввода…»
126
tinyurl.com/mcctmbe
127
Pointer Events Polyfill
tinyurl.com/pa5m87k
jQuery
Foundation
Google
декабрь 2014
Polymer
PEP 0.3.0
128
Первый официальный релиз
апрель 2015
PEP 0.3.0
128
Первый официальный релиз
апрель 2015
129
Один из самых
«популярных» тикетов
130
Google меняет позицию –

Pointer Events быть в Blink
март 2015
tinyurl.com/ogx9bkh
131
А жизнь то налаживается!
131
А жизнь то налаживается!
Часть четвертая+
Влияние на инновации
Используемые в браузерах 

API влияют на производителей
оборудования
133
Что делать 

с пером и стилусом?
134
Что делать 

с новыми типами ввода?
135
Что если устройства
получат новые технические
возможности?
136
Hover
считался невозможным
для touch
137
138
Sony Xperia sola
Первый смартфон с
функцией регистрации
поднесенного пальца
(на расстоянии ~20мм)
139
Sony Xperia sola
Это дает возможность
реализации hover,

но без поддержки на
уровне браузерного API
Touch Events – не позволяют
использовать, нет механизмов
для регистрации hover
140
Pointer Events – позволяют
141
Да кому это надо?
141
Да кому это надо?
Touch Events 

были разработаны для
определенного устройства и
определенного типа ввода
142
Pointer Events

универсальное решение 

для разработчиков и 

для производителей устройств
143
Без поддержки на уровне
браузера, иновации в
устройствах – под вопросом
144
145
Инновации говорите… 

Мы вот тут новый Macbook сделали…
145
Инновации говорите… 

Мы вот тут новый Macbook сделали…
146
The Force Touch trackpad
147
API?
Pointer EventsTouch Events
ничего
У событий есть
свойтво pressure
Решение Apple?
148
Новое API
на основе Mouse Events
tinyurl.com/o43pw9w
Что дальше?
(заключение)
149
Часть заключительная+
Время собирать камни
Или что с этим делать?
150
Фрустрировать?
150
Фрустрировать?
Разобраться в ситуации
151
Рассказать другим
152
Никому не рассказывать о Pointer Events
Высказывать свое мнение
разработчикам браузеров
153
Поддерживать 

Pointer Events
154
Как минимум пробовать это делать
Перестать смотреть на IE

через призму прошлого
155
Нет, Microsoft мне не платит ;)
Все можно изменить
к лучшему, главное,
захотеть…
Иногда работает ;)
Все можно изменить
к лучшему, главное,
захотеть…
Иногда работает ;)
157
157
Спасибо!
159
Роман Дворнов
@rdvornov
rdvornov@gmail.com
basis.js
basisjs.com
github.com/basisjs

Mais conteúdo relacionado

Destaque

Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!Roman Dvornov
 
Парсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksПарсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksRoman Dvornov
 
CSS parsing: performance tips & tricks
CSS parsing: performance tips & tricksCSS parsing: performance tips & tricks
CSS parsing: 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
 
CSSO – история ускорения
CSSO – история ускоренияCSSO – история ускорения
CSSO – история ускоренияRoman Dvornov
 
pgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recoverypgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recoveryМихаил Тюрин
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстромRoman Dvornov
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееRoman Dvornov
 
CSSO — минимизируем CSS
 CSSO — минимизируем CSS CSSO — минимизируем CSS
CSSO — минимизируем CSSRoman Dvornov
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»Roman Dvornov
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоRoman Dvornov
 
Как работают менеджеры продукта в 2ГИС (Павел Мочалкин, 2ГИС)
Как работают менеджеры продукта в 2ГИС (Павел Мочалкин, 2ГИС)Как работают менеджеры продукта в 2ГИС (Павел Мочалкин, 2ГИС)
Как работают менеджеры продукта в 2ГИС (Павел Мочалкин, 2ГИС)PCampRussia
 
Agile — это не то, что ты думаешь
Agile — это не то, что ты думаешьAgile — это не то, что ты думаешь
Agile — это не то, что ты думаешьVasiliy Cheptsov
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013Roman Pavlushko
 
Дмитрий Школьников, Avito: "КАК МАЛЕНЬКОМУ БИЗНЕСУ КОНКУРИРОВАТЬ С БОЛЬШИМ"
Дмитрий Школьников, Avito: "КАК МАЛЕНЬКОМУ БИЗНЕСУ КОНКУРИРОВАТЬ С БОЛЬШИМ"Дмитрий Школьников, Avito: "КАК МАЛЕНЬКОМУ БИЗНЕСУ КОНКУРИРОВАТЬ С БОЛЬШИМ"
Дмитрий Школьников, Avito: "КАК МАЛЕНЬКОМУ БИЗНЕСУ КОНКУРИРОВАТЬ С БОЛЬШИМ"web2win
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Ontico
 

Destaque (20)

Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!
 
Парсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksПарсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricks
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
CSS parsing: performance tips & tricks
CSS parsing: performance tips & tricksCSS parsing: performance tips & tricks
CSS parsing: performance tips & tricks
 
CSSO – compress CSS (english version)
CSSO – compress CSS (english version)CSSO – compress CSS (english version)
CSSO – compress CSS (english version)
 
CSSO – история ускорения
CSSO – история ускоренияCSSO – история ускорения
CSSO – история ускорения
 
pgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recoverypgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recovery
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрее
 
CSSO — минимизируем CSS
 CSSO — минимизируем CSS CSSO — минимизируем CSS
CSSO — минимизируем CSS
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их много
 
Lean startup
Lean startupLean startup
Lean startup
 
Как работают менеджеры продукта в 2ГИС (Павел Мочалкин, 2ГИС)
Как работают менеджеры продукта в 2ГИС (Павел Мочалкин, 2ГИС)Как работают менеджеры продукта в 2ГИС (Павел Мочалкин, 2ГИС)
Как работают менеджеры продукта в 2ГИС (Павел Мочалкин, 2ГИС)
 
Agile — это не то, что ты думаешь
Agile — это не то, что ты думаешьAgile — это не то, что ты думаешь
Agile — это не то, что ты думаешь
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
 
Дмитрий Школьников, Avito: "КАК МАЛЕНЬКОМУ БИЗНЕСУ КОНКУРИРОВАТЬ С БОЛЬШИМ"
Дмитрий Школьников, Avito: "КАК МАЛЕНЬКОМУ БИЗНЕСУ КОНКУРИРОВАТЬ С БОЛЬШИМ"Дмитрий Школьников, Avito: "КАК МАЛЕНЬКОМУ БИЗНЕСУ КОНКУРИРОВАТЬ С БОЛЬШИМ"
Дмитрий Школьников, Avito: "КАК МАЛЕНЬКОМУ БИЗНЕСУ КОНКУРИРОВАТЬ С БОЛЬШИМ"
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 

Mais de Roman Dvornov

Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьер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
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляцииRoman Dvornov
 
Как построить DOM
Как построить DOMКак построить DOM
Как построить DOMRoman Dvornov
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноRoman Dvornov
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Roman Dvornov
 
basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкRoman Dvornov
 

Mais de Roman Dvornov (13)

Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьер
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
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
Как построить DOMКак построить DOM
Как построить DOM
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
 
basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворк
 

Карточный домик