SlideShare uma empresa Scribd logo
1 de 57
1
Promise me an Image…
Антон Корзунов, MoscowJS #33, 2016
2
3
An Image…
Что мы знаем о картинках?
На них котики!
Все любят котиков. И картинки.
Люди - визуалы!
Больше котиков - лучше!
4
5
We need moooarr!!
Но за все надо платить
Img - один из самых тяжелых
элементом страницы.
Много больших, много
маленьких.
Fullscreen «Retina-ready»
Image – 5-20mb.
6
В общем самый жир…
Скорость соединения -
невелика.
Потребность в картинках -
велика.
Сиюминутный аппетит -
ограничен.
7
8
Картинки НЕ НУЖНЫ!
Картинки не нужны,
Когда мы их не видим!
Или когда мы их еще не
видим…
9
10
Lazy Load
jQuery.lazyLoad
early 2010…
11
<img src=‘image1.jpg’>
jQuery(‘img’).lazyLoad();
<img data-lazy-src=‘image1.jpg’>
jQuery(‘img’).lazyLoad();
12JoyReactor.cc
187 requests. Pending…
Profit?
Экономия канала и трафика.
Более плавная загрузка как
клиента, так и сервера.
13
Problems?
Нельзя прервать загрузку
изображения.
Не загружает «ненужное».
PS: кому ненужное?
14
15
Лень загружать…
А что если решения нет?
Без lazyLoad всего много,
долго и глупо.
С lazyLoad никакого
префетча, опережающей
загрузки.
16
17
Meanwhile in Russia…
Развитие API Карт
2004 год – запуск Яндекс.Карт
API 1.0 – 13 ноября 2008
API 1.1 – 25 июня 2009
API 2.0 – 19 апреля 2012
API 2.1 – 4 октября 2013
Что же можно делать столько
лет?
18
Яндекс.Карты
Карты - это очень много
маленьких по размеру (но не по
обьему) картинок.
19
20И торт!
Карта - она как пирог
util.imageLoader
One ring to rule them all, one ring to find them, One ring
to bring them all and in the darkness bind them…
21
/**

* @param {String} url Image to load

* @param {Function} callback

**/

imageLoader.load(url, function (image) {

});
22
Важно знать, что картинки нет
util.imageLoader
Явно сообщает о проблемах загрузки
23
/**

* @param {String} url Image to load

* @param {Function} callback

**/

imageLoader.load(url, function (image, state ) {

});
util.imageLoader
Позволяет управлять порядком загрузки. Зачем?
24
/**

* @param {String} url Адрес изображение

* @param {Integer} priority Приоритет загрузки

* @param {Function} callback

**/

imageLoader.load(url, priority , function (image, state) {

});
// priority = 1.0 / tileDist;
25
Не все тайлы одинаково полезны
Speed Limits!
Количество одновременных
запросов.
Таймауты.
Допустимые временные
кванты.
Скорость обработки очереди.
26
27
Метки? Они тоже картинки!
util.imageLoader
Мухи. Отдельно. Котлеты. Отдельно.
28
/**

* @param {String|Object} coordinates

* @param {Function} callback
**/
imageLoader.load({

url: url,

priority: priority,

channel : channel // tiles, placemarks, dataURI, functional

}, function (image, state) {

});
29
Картинки бывают разными
Measure twice..
DataURI - не самый быстрый,
и не самый компактный.
SVG - компактный, но ваще
не быстрый.
Canvas - удобный, но мало
применимый.
BlobURL - клевый, но
неудобный!
30
31
SVG -> PNG
SVG — 10-30 FPS PNG — 40-60
32
SVG хороший. Но у нас много точек.
33
ShapeRendering: optimizeSpeed.
+0.0%
util.imageLoader
Тайлам — URL

Графике — Image

WebGL — CORS!
34
imageLoader.load({

url: url,

priority: priority,

channel: ‘tiles’,

returnAs : ‘image’, // url, bloburl, texture

, function (image, state) {

});
35
util.imageLoader.proxy
Перехватить и обработать!
Только зачем?
36
imageLoader.proxy.add({

matchUrl: function (someUrl) {

},

/**

* @param {String} url

* @return {Promise}

*/

load: function (url) {

}

});
37
return a Promise/A+
Зачем мы туда полезли?
Важно понимать, что мы
добавили proxy исключительно
потому, что:
МОЖЕМ
А можем, потому что
imageLoader.
38
HeatMap
Удобный инструмент.
Который молча страдает.
От нашего API.
39
Проблемы первого мира…
HeatMap — процедурно-
генерируемые тайлы.
Отдают dataURI вместо URL
Синхронно и одновременно.
40
util.imageLoader.proxy
41
TileUrlsGenerator.prototype.getTileUrl = function (tileNumber, zoom)
{

return `ym-heatmap://mid=${this.heatMapID}/x=${tileNumber[0]}/
y=${tileNumber[1]}/z=${zoom}`;
};
Шаг 1 – отдаем виртуальный URL.
util.imageLoader.proxy
42
imageLoader.proxy.add({

matchUrl: function (url) {

return url && url.indexOf('ym-heatmap') === 0 ? 1 : 0;
},
load: function (url, request) {
…
}
});
Шаг 2 – прокси забирает этот адрес себе.
util.imageLoader.proxy
43
load: function (url, request) {
if (mapId && lookupStorage[mapId]) {

return lookupStorage[mapId].getTileImage([+x, +y],+z)

} else {

return vow.reject();

}
}
Шаг 3 – дергает «реальную» функцию генерации тайла.
util.imageLoader.proxy
44
TileUrlsGenerator.prototype.getTileUrl = function (tileNumber, zoom) {

return `ym-heatmap://mid=${this.heatMapID}/x=${tileNumber[0]}/y=${tileNumber[1]}/
z=${zoom}`;
};

//……..
imageLoader.proxy.add({

matchUrl: function (url) {

return url && url.indexOf('ym-heatmap') === 0 ? 1 : 0;
},
load: function (url, request) {

//….
if (params.mid && lookupStorage[params.mid]) {

return vow
.resolve(
heatmapLookupStorage[params.mid]
.getTileImage([+params.x, +params.y], +params.z)
);

} else {

return vow.reject();

}

}
Measure twice..
В настоящий момент
асинхронные
и «нетормозящие»
кешируемые
Heatmaps работают как-то…
45
46
НЕ СЕКСИ :P
util.imageLoader.proxy
47
var RE_TILE_HOST = /vecd+.maps.yandex.net//;

imageLoader.proxy.add({

matchUrl: function (url) {

return !!url.match(RE_TILE_HOST);

},

load: function (url) {

return fetchLocalUrl(url, ‘image/jpeg', getPath(url))

.fail(function () { return url; });

}

48https://github.com/yandex/mapsapi-ios | И никаких ServiceWorkers
Offline cache!
util.imageLoader.load(function)
49
/**

* @param {String|Object|Function} coordinates

* @return {Promise}

**/

imageLoader.load(function() {

return madeSomeAsyncMagics(); // return a Promise

});
non-ES6 Promises?
— 14?! Это нелепо! Нам нужно
разработать один
универсальный стандарт,
чтобы все им пользовались.
— Да, точно!
50
promise.(progress|notify|tick)()
Был такой метод. Да всплыл.
51
imageLoader
.load(url)
.progress(fitToBounds)
.then(finish);
Зачем?
Progressive JPEG
Мобильные сети
Пользовательская верстка
Динамические размеры
балунов.
В общем, «готовность»
изображения раньше времени.
52
Остановите Землю! Тормозит!
У нас еще есть
централизованный scheduler.
И world.stop, world.smooth.
Остановка мира блочит все.
Плавный режим - меняет
лимиты imageLoader.
53
СТОЙ! Так что с lazyLoad?
Да нормально все с ним.
Только smooth, а не lazy.
И да, есть нюансы.
54
Base
P-
P-
55
Живите как кошка с собакой!
Пользователь
Разработчик
56
! СЕКСИ !
Антон Корзунов
Разработчик интерфейсов АПИ карт.
POSL
Контакты
@twitter
thekasheykashey@yandex-team.ru
57

Mais conteúdo relacionado

Destaque

20160727 srws第七回@滋賀医大統合、層別・感度分析、欠測への対処
20160727 srws第七回@滋賀医大統合、層別・感度分析、欠測への対処20160727 srws第七回@滋賀医大統合、層別・感度分析、欠測への対処
20160727 srws第七回@滋賀医大統合、層別・感度分析、欠測への対処SR WS
 
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache SparkDF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache SparkMoscowDataFest
 
20161023 srws第五回補足新しいrob評価 紹介
20161023 srws第五回補足新しいrob評価 紹介20161023 srws第五回補足新しいrob評価 紹介
20161023 srws第五回補足新しいrob評価 紹介SR WS
 
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31MoscowJS
 
Секретные техники продаж корпоративным клиентам / Александр Зиза (Алетейя Биз...
Секретные техники продаж корпоративным клиентам / Александр Зиза (Алетейя Биз...Секретные техники продаж корпоративным клиентам / Александр Зиза (Алетейя Биз...
Секретные техники продаж корпоративным клиентам / Александр Зиза (Алетейя Биз...Ontico
 
6診断精度のメタアナリシス
6診断精度のメタアナリシス6診断精度のメタアナリシス
6診断精度のメタアナリシスSR WS
 
20160319コクランタイトル登録WSその2タイトル登録のやり方
20160319コクランタイトル登録WSその2タイトル登録のやり方20160319コクランタイトル登録WSその2タイトル登録のやり方
20160319コクランタイトル登録WSその2タイトル登録のやり方SR WS
 
コクランタイトル登録セミナー事後課題Proposal formの作り方
コクランタイトル登録セミナー事後課題Proposal formの作り方コクランタイトル登録セミナー事後課題Proposal formの作り方
コクランタイトル登録セミナー事後課題Proposal formの作り方SR WS
 
2. 2016 top 10 md vendors
2. 2016 top 10 md vendors2. 2016 top 10 md vendors
2. 2016 top 10 md vendorsTim Histalk
 
20161106予測指標の作り方セミナー事前学習
20161106予測指標の作り方セミナー事前学習20161106予測指標の作り方セミナー事前学習
20161106予測指標の作り方セミナー事前学習SR WS
 
Выход на новые рынки, так ли это сложно организовать / Павел Шинкаренко (Sola...
Выход на новые рынки, так ли это сложно организовать / Павел Шинкаренко (Sola...Выход на новые рынки, так ли это сложно организовать / Павел Шинкаренко (Sola...
Выход на новые рынки, так ли это сложно организовать / Павел Шинкаренко (Sola...Ontico
 
診断研究におけるGRADEアプローチ
診断研究におけるGRADEアプローチ診断研究におけるGRADEアプローチ
診断研究におけるGRADEアプローチTakashi Fujiwara
 
Letterの書き方
Letterの書き方Letterの書き方
Letterの書き方SR WS
 
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...Ontico
 
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...Ontico
 

Destaque (18)

Srws 161124062752
Srws 161124062752Srws 161124062752
Srws 161124062752
 
20160727 srws第七回@滋賀医大統合、層別・感度分析、欠測への対処
20160727 srws第七回@滋賀医大統合、層別・感度分析、欠測への対処20160727 srws第七回@滋賀医大統合、層別・感度分析、欠測への対処
20160727 srws第七回@滋賀医大統合、層別・感度分析、欠測への対処
 
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache SparkDF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
 
20161023 srws第五回補足新しいrob評価 紹介
20161023 srws第五回補足新しいrob評価 紹介20161023 srws第五回補足新しいrob評価 紹介
20161023 srws第五回補足新しいrob評価 紹介
 
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
 
Секретные техники продаж корпоративным клиентам / Александр Зиза (Алетейя Биз...
Секретные техники продаж корпоративным клиентам / Александр Зиза (Алетейя Биз...Секретные техники продаж корпоративным клиентам / Александр Зиза (Алетейя Биз...
Секретные техники продаж корпоративным клиентам / Александр Зиза (Алетейя Биз...
 
6診断精度のメタアナリシス
6診断精度のメタアナリシス6診断精度のメタアナリシス
6診断精度のメタアナリシス
 
20160319コクランタイトル登録WSその2タイトル登録のやり方
20160319コクランタイトル登録WSその2タイトル登録のやり方20160319コクランタイトル登録WSその2タイトル登録のやり方
20160319コクランタイトル登録WSその2タイトル登録のやり方
 
コクランタイトル登録セミナー事後課題Proposal formの作り方
コクランタイトル登録セミナー事後課題Proposal formの作り方コクランタイトル登録セミナー事後課題Proposal formの作り方
コクランタイトル登録セミナー事後課題Proposal formの作り方
 
2. 2016 top 10 md vendors
2. 2016 top 10 md vendors2. 2016 top 10 md vendors
2. 2016 top 10 md vendors
 
20161106予測指標の作り方セミナー事前学習
20161106予測指標の作り方セミナー事前学習20161106予測指標の作り方セミナー事前学習
20161106予測指標の作り方セミナー事前学習
 
Выход на новые рынки, так ли это сложно организовать / Павел Шинкаренко (Sola...
Выход на новые рынки, так ли это сложно организовать / Павел Шинкаренко (Sola...Выход на новые рынки, так ли это сложно организовать / Павел Шинкаренко (Sola...
Выход на новые рынки, так ли это сложно организовать / Павел Шинкаренко (Sola...
 
Bullet train in india
Bullet train in indiaBullet train in india
Bullet train in india
 
診断研究におけるGRADEアプローチ
診断研究におけるGRADEアプローチ診断研究におけるGRADEアプローチ
診断研究におけるGRADEアプローチ
 
Letterの書き方
Letterの書き方Letterの書き方
Letterの書き方
 
8. diy rating
8. diy rating8. diy rating
8. diy rating
 
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
 
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
 

Semelhante a Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33

Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Yandex
 
Превышаем скоросные лимиты с Angular 2
Превышаем скоросные лимиты с Angular 2Превышаем скоросные лимиты с Angular 2
Превышаем скоросные лимиты с Angular 2Oleksii Okhrymenko
 
«3D-плеер на WebGL», Василика Климова, MoscowJS 21
«3D-плеер на WebGL», Василика Климова, MoscowJS 21«3D-плеер на WebGL», Василика Климова, MoscowJS 21
«3D-плеер на WebGL», Василика Климова, MoscowJS 21MoscowJS
 
Слезаем с велосипедов: опыт использования open source в Android. Дмитрий Кунин
Слезаем с велосипедов: опыт использования open source в Android. Дмитрий КунинСлезаем с велосипедов: опыт использования open source в Android. Дмитрий Кунин
Слезаем с велосипедов: опыт использования open source в Android. Дмитрий КунинYandex
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Oleksii Okhrymenko
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Ontico
 
Делаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх WebdriverДелаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх WebdriverSQALab
 
Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"Yandex
 
Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Yandex
 
Alexander Dymo - Barcamp 2009 - Faster Higher Sql
Alexander Dymo - Barcamp 2009 - Faster Higher SqlAlexander Dymo - Barcamp 2009 - Faster Higher Sql
Alexander Dymo - Barcamp 2009 - Faster Higher SqlAlexander Dymo
 
Adymo Barcamp Presentation Faster Higher Sql
Adymo Barcamp Presentation Faster Higher SqlAdymo Barcamp Presentation Faster Higher Sql
Adymo Barcamp Presentation Faster Higher SqlOleksandr Petrov
 
Всеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексВсеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексElena Voynova
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в DjangoMoscowDjango
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4Technopark
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Noveo
 
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"Yandex
 
Фёдор Голубев "API Яндекс.Карт"
Фёдор Голубев "API Яндекс.Карт"Фёдор Голубев "API Яндекс.Карт"
Фёдор Голубев "API Яндекс.Карт"Yandex
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4Technopark
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Yandex
 

Semelhante a Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33 (20)

Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"
 
Превышаем скоросные лимиты с Angular 2
Превышаем скоросные лимиты с Angular 2Превышаем скоросные лимиты с Angular 2
Превышаем скоросные лимиты с Angular 2
 
«3D-плеер на WebGL», Василика Климова, MoscowJS 21
«3D-плеер на WebGL», Василика Климова, MoscowJS 21«3D-плеер на WebGL», Василика Климова, MoscowJS 21
«3D-плеер на WebGL», Василика Климова, MoscowJS 21
 
Слезаем с велосипедов: опыт использования open source в Android. Дмитрий Кунин
Слезаем с велосипедов: опыт использования open source в Android. Дмитрий КунинСлезаем с велосипедов: опыт использования open source в Android. Дмитрий Кунин
Слезаем с велосипедов: опыт использования open source в Android. Дмитрий Кунин
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
 
Делаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх WebdriverДелаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх Webdriver
 
Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"
 
Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"
 
Alexander Dymo - Barcamp 2009 - Faster Higher Sql
Alexander Dymo - Barcamp 2009 - Faster Higher SqlAlexander Dymo - Barcamp 2009 - Faster Higher Sql
Alexander Dymo - Barcamp 2009 - Faster Higher Sql
 
Adymo Barcamp Presentation Faster Higher Sql
Adymo Barcamp Presentation Faster Higher SqlAdymo Barcamp Presentation Faster Higher Sql
Adymo Barcamp Presentation Faster Higher Sql
 
Всеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексВсеволод Шмыров, Яндекс
Всеволод Шмыров, Яндекс
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
 
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
 
Фёдор Голубев "API Яндекс.Карт"
Фёдор Голубев "API Яндекс.Карт"Фёдор Голубев "API Яндекс.Карт"
Фёдор Голубев "API Яндекс.Карт"
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 

Mais de MoscowJS

Александр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionАлександр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionMoscowJS
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIMoscowJS
 
Favicon на стероидах
Favicon на стероидахFavicon на стероидах
Favicon на стероидахMoscowJS
 
E2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийE2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийMoscowJS
 
Reliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkeyReliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkeyMoscowJS
 
Basis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkBasis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkMoscowJS
 
Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31MoscowJS
 
Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31MoscowJS
 
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31MoscowJS
 
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33MoscowJS
 
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33MoscowJS
 
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...MoscowJS
 
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...MoscowJS
 
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29MoscowJS
 
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29MoscowJS
 
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29MoscowJS
 
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28MoscowJS
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27MoscowJS
 
"Web Audio Api", Анатолий Найда, MoscowJS 27
"Web Audio Api", Анатолий Найда, MoscowJS 27"Web Audio Api", Анатолий Найда, MoscowJS 27
"Web Audio Api", Анатолий Найда, MoscowJS 27MoscowJS
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25MoscowJS
 

Mais de MoscowJS (20)

Александр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionАлександр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in action
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public API
 
Favicon на стероидах
Favicon на стероидахFavicon на стероидах
Favicon на стероидах
 
E2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийE2E-тестирование мобильных приложений
E2E-тестирование мобильных приложений
 
Reliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkeyReliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkey
 
Basis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkBasis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA Framework
 
Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31
 
Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31
 
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
 
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
 
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
 
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
 
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
 
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
 
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
 
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
 
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27
 
"Web Audio Api", Анатолий Найда, MoscowJS 27
"Web Audio Api", Анатолий Найда, MoscowJS 27"Web Audio Api", Анатолий Найда, MoscowJS 27
"Web Audio Api", Анатолий Найда, MoscowJS 27
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
 

Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33