SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
Инкрементальные
обновления  на  клиенте



Михаил  Корепанов,  разработчик  интерфейсов
Я.Субботник,  Рига,  6  апреля  2013
Обо  мне
      panyakor@yandex-­team.ru        @panyakor
                                        


●    Разработчик  интерфейсов  в  команде  Яндекс.Почты
●    Нравится  разбираться  в  новых  технологиях,
  особенно  если  они  позволяют  что-­то
  автоматизирвать  или  ускорить
●    Можете  спрашивать  про  JS,  CSS,  клиентскую  оптимизацию



  02
Яндекс.Почта
●    Больше  1  МБ  статики




  03
Яндекс.Почта
●    Больше  1  МБ  статики
●    Обновляется  2  раза  в  неделю




  04
Яндекс.Почта
●    Больше  1  МБ  статики
●    Обновляется  2  раза  в  неделю

●    От  версии  к  версии  меняется  не  так  много  кода  (особенно  в
  случае  хотфиксов)




  05
Что  уже  сделано  для
   ускорения  загрузки?
●    gzip

●    Кэширование
●    CDN
●    Фриз  JS/CSS/картинок
●    Параллельная  загрузка  ресурсов  через  XHR




   06
Этого  не  достаточно!
Даже  при  фризе  JS/CSS,  если  от  релиза  к  релизу  меняется
только  пара  строк,  кэш  для  ресурса  инвалидируется  полностью.




07
Инкрементальные  обновления
От  версии  к  версии  меняется  не  так  много  кода  (около  10%,  а  в
случае  хотфиксов  еще  меньше).


А  что  если  при  выходе  новой  версии  передавать  только
изменения?




08
Инкрементальные  обновления
Что  если  хранить  где-­то  старую  версию  (например  в  localStorage),
а  при  выходе  новой  передавать  только  diff  между  новой  и  той,

которая  уже  сохранена  у  пользователя?


А  дальше  просто  накладывать  патч  на  клиенте.




09
Библиотеки  diff  на  JS
●    Vcdiff  (https://github.com/plotnikoff/vcdiff.js)
●    google  diff  patch  match  (http://code.google.com/p/google-­diff-­match-­

  patch/)
●    jsdiff  (https://github.com/kpdecker/jsdiff)
●    pretty  diff  (https://github.com/austincheney/Pretty-­Diff)
●    jsdifflib  (https://github.com/cemerick/jsdifflib)




  10
Библиотеки  diff  на  JS
●    Vcdiff  (https://github.com/plotnikoff/vcdiff.js)
●    google  diff  patch  match  (http://code.google.com/p/google-­diff-­match-­
  patch/)
●    jsdiff  (https://github.com/kpdecker/jsdiff)  (в  5  раз  медленнее,  чем
  google  diff  patch  match)
●    pretty  diff  (https://github.com/austincheney/Pretty-­Diff)  (не  умеет
  патчить)

●    jsdifflib  (https://github.com/cemerick/jsdifflib)  (не  умеет  патчить)
  11
Размер  патча  (в  байтах)
     Vcdiff  (размер   Vcdiff  (размер   Vcdiff  (размер   google  diff  patch
       блока  3)         блока  10)        блока  20)           match

 13957                 3586              3431              9297

 865                   367               309               910

 4615                  1854              1736              6740




12
Время  наложения  патча  на
клиенте  (в  миллисекундах)
                                  IE  9   Opera  12   Firefox  19   Chrome

 vcdiff  (размер  блока  10)      8       5           5             3

     google  diff  patch  match   1363    76          43            35




13
Vcdiff
●    RFC3284  (2002)
●    Используется  Google  в  SDCH

●    Используется  в  "Delta  encoding  in  HTTP"  (RFC3229)


  Сравнивает  строки  поблочно.  Размер  блока  по  умолчанию  —  20
  байт




  14
Храним  JS/CSS  на  клиенте
Храним  в  localStorage.


Каждый  ресурс  —  отдельный  ключ.


jane.js — 6.18.7@...
jane.version — 6.18.7




15
При  сборке
      Генерим  патчи  для  каждого  ресурса  для  предыдущих  3-­х  версий.
      В  index.html  инлайн  скриптом  вставляем  список  версий,  для
      которых  у  нас  есть  патчи:


01. oldVersions = {

02.        "jane": ["6.19.4", "6.18.7", "6.17.5"],
03.        "mail": ["6.19.7", "6.18.8", "6.17.6"]
04. }

      16
Формат  файла  с  патчами
01. [
02.        {

03.            "k": "jane.css",
04.            "p": [patch],
05.            "s": 4554
06.        }
07. ]


      17
Формат  файла  с  патчами
"k"  —  ключ  ресурса  в  LS.


"p"  —  патч  для  ресурса,  который  сгенерировал  Vcdiff.


"s"  —  чексумма  для  ресурса  актуальной  версии  по  алгоритму
Флетчера.




18
Почему  алгоритм  Флетчера?
●    Быстрый
●    Компактный
●    Легок  в  реализации




  19
При  выходе  новой  версии
●    Смотрим,  что  у  пользователя  в  LS




  20
При  выходе  новой  версии
●    Смотрим,  что  у  пользователя  в  LS
●    Если  для  нужного  проекта  есть  версия  в  LS  —  смотрим  есть  ли

  эта  версия  в  oldVersions




  21
При  выходе  новой  версии
●    Смотрим,  что  у  пользователя  в  LS
●    Если  для  нужного  проекта  есть  версия  в  LS  —  смотрим  есть  ли

  эта  версия  в  oldVersions
●    Если  есть,  посылаем  запрос  за  патчем  для  этой  версии




  22
При  выходе  новой  версии
●    Смотрим,  что  у  пользователя  в  LS
●    Если  для  нужного  проекта  есть  версия  в  LS  —  смотрим  есть  ли
  эта  версия  в  oldVersions
●    Если  есть,  посылаем  запрос  за  патчем  для  этой  версии
●    Патчим  все  ресурсы  в  LS  и  проверяем  чексумму




  23
При  выходе  новой  версии
●    Смотрим,  что  у  пользователя  в  LS
●    Если  для  нужного  проекта  есть  версия  в  LS  —  смотрим  есть  ли
  эта  версия  в  oldVersions
●    Если  есть,  посылаем  запрос  за  патчем  для  этой  версии

●    Патчим  все  ресурсы  в  LS  и  проверяем  чексумму
●    Если  все  ок  —  обновляем  значение  с  версией  в  LS  на  актуальную




  24
Что  получили?
Появится  в  продакшене  в  ближайшее  время,  поэтому  точных
цифр  пока  нет


Знаем,  что  средний  размер  патча  составляет  10  -­  15  Кб




25
А  что  еще  есть?
●    Shared  Dictionary  Compression  over  HTTP  (SDCH)
●    Delta  encoding  in  HTTP




  26
SDCH
●    Изобрел  Google  в  2008  году




  27
SDCH
●    Изобрел  Google  в  2008  году
●    Хорошо  подходит  для  сжатия  часто  обновляемых  страниц




  28
SDCH
●    Изобрел  Google  в  2008  году
●    Хорошо  подходит  для  сжатия  часто  обновляемых  страниц

●    Поддерживается  только  в  Chrome




  29
SDCH
●    Изобрел  Google  в  2008  году
●    Хорошо  подходит  для  сжатия  часто  обновляемых  страниц

●    Поддерживается  только  в  Chrome
●    Нет  реализации  для  популярных  веб-­серверов




  30
SDCH
●    Изобрел  Google  в  2008  году
●    Хорошо  подходит  для  сжатия  часто  обновляемых  страниц
●    Поддерживается  только  в  Chrome
●    Нет  реализации  для  популярных  веб-­серверов
●    Словарь  генерируется  медленно




  31
SDCH
   Заголовки  запроса:


01. Accept-Encoding: gzip, deflate, sdch




   32
SDCH
   Заголовки  ответа:


01. Content-type: text/html
02. Content-Encoding: gzip
03. Get-Dictionary: {путь к словарю}




   33
SDCH
      Запрос  за  словарем:


01. GET {путь к словарю} HTTP/1.1
02. Accept-Encoding: sdch, gzip
03.
04. {контент словаря}




      34
SDCH
   Следующий  запрос:


01. Accept-Encoding: gzip, deflate, sdch
02. Avail-Dictionary: TWFuIGlz




   35
SDCH
      Заголовки  ответа:


01. Content-type: text/html
02. Content-Encoding: sdch, gzip
03. ...

04.
05. JOWk0d2N...VCDIFFed {контент}



      36
Delta  encoding  in  HTTP
●    RFC3229  был  представлен  в  2002  году




  37
Delta  encoding  in  HTTP
●    RFC3229  был  представлен  в  2002  году
●    Разные  методы  diff/сжатия




  38
Delta  encoding  in  HTTP
●    RFC3229  был  представлен  в  2002  году
●    Разные  методы  diff/сжатия
●    Никем  не  поддерживается




  39
Delta  encoding  in  HTTP
   Заголовки  запроса:


01. GET /foo.css HTTP/1.1
02. If-None-Match: "123xyz"
03. A-IM: vcdiff, diffe, gzip




   40
Delta  encoding  in  HTTP
      Заголовки  ответа:


01. HTTP/1.1 226 IM Used
02. ETag: "489uhw"
03. IM: vcdiff
04.
05. {контент патча}



      41
Михаил  Корепанов

Разработчик  интерфейсов
   panyakor@yandex-­team.ru
  @panyakor
    

Mais conteúdo relacionado

Mais procurados

Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)AvitoTech
 
All Russian PB standards in English, Safety Regulations of the Russian Federa...
All Russian PB standards in English, Safety Regulations of the Russian Federa...All Russian PB standards in English, Safety Regulations of the Russian Federa...
All Russian PB standards in English, Safety Regulations of the Russian Federa...Suhrob Nadjimov
 
Оптимизация JavaScript в Drupal
Оптимизация JavaScript в DrupalОптимизация JavaScript в Drupal
Оптимизация JavaScript в DrupalVlad Savitsky
 
Введение в язык программирования Go
Введение в язык программирования GoВведение в язык программирования Go
Введение в язык программирования GoElena Grahovac
 
All iso standards available in english and russian (translation) languages, s...
All iso standards available in english and russian (translation) languages, s...All iso standards available in english and russian (translation) languages, s...
All iso standards available in english and russian (translation) languages, s...Suhrob Nadjimov
 
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019Mail.ru Group
 
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...Nikolay Samokhvalov
 
All Russian Federation NPB standards in English, RF Fire safety regulations i...
All Russian Federation NPB standards in English, RF Fire safety regulations i...All Russian Federation NPB standards in English, RF Fire safety regulations i...
All Russian Federation NPB standards in English, RF Fire safety regulations i...Suhrob Nadjimov
 
Как сделать стриминг для сервиса, который хранит миллионы видеофайлов — Лев Т...
Как сделать стриминг для сервиса, который хранит миллионы видеофайлов — Лев Т...Как сделать стриминг для сервиса, который хранит миллионы видеофайлов — Лев Т...
Как сделать стриминг для сервиса, который хранит миллионы видеофайлов — Лев Т...Yandex
 
Готовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходниковГотовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходниковElena Grahovac
 
ToroDB (highload++2015)
ToroDB (highload++2015)ToroDB (highload++2015)
ToroDB (highload++2015)Pavel Alexeev
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует GoArtem Kovardin
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word pressvovasik
 
BeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновBeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновAnton Piskunov
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Yandex
 

Mais procurados (16)

Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)
 
All Russian PB standards in English, Safety Regulations of the Russian Federa...
All Russian PB standards in English, Safety Regulations of the Russian Federa...All Russian PB standards in English, Safety Regulations of the Russian Federa...
All Russian PB standards in English, Safety Regulations of the Russian Federa...
 
Оптимизация JavaScript в Drupal
Оптимизация JavaScript в DrupalОптимизация JavaScript в Drupal
Оптимизация JavaScript в Drupal
 
Введение в язык программирования Go
Введение в язык программирования GoВведение в язык программирования Go
Введение в язык программирования Go
 
All iso standards available in english and russian (translation) languages, s...
All iso standards available in english and russian (translation) languages, s...All iso standards available in english and russian (translation) languages, s...
All iso standards available in english and russian (translation) languages, s...
 
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019
 
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
 
All Russian Federation NPB standards in English, RF Fire safety regulations i...
All Russian Federation NPB standards in English, RF Fire safety regulations i...All Russian Federation NPB standards in English, RF Fire safety regulations i...
All Russian Federation NPB standards in English, RF Fire safety regulations i...
 
Как сделать стриминг для сервиса, который хранит миллионы видеофайлов — Лев Т...
Как сделать стриминг для сервиса, который хранит миллионы видеофайлов — Лев Т...Как сделать стриминг для сервиса, который хранит миллионы видеофайлов — Лев Т...
Как сделать стриминг для сервиса, который хранит миллионы видеофайлов — Лев Т...
 
Готовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходниковГотовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходников
 
ToroDB (highload++2015)
ToroDB (highload++2015)ToroDB (highload++2015)
ToroDB (highload++2015)
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует Go
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word press
 
BeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновBeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демонов
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
 

Destaque

"How the Universe is put to the test" – Andrei Golutvin, Ulrik Egede, CERN
"How the Universe is put to the test" – Andrei Golutvin, Ulrik Egede, CERN"How the Universe is put to the test" – Andrei Golutvin, Ulrik Egede, CERN
"How the Universe is put to the test" – Andrei Golutvin, Ulrik Egede, CERNYandex
 
Кирилл Меркушев — Матчеры: польза использования и легкость применения в ваших...
Кирилл Меркушев — Матчеры: польза использования и легкость применения в ваших...Кирилл Меркушев — Матчеры: польза использования и легкость применения в ваших...
Кирилл Меркушев — Матчеры: польза использования и легкость применения в ваших...Yandex
 
Игорь Шевченко — Новая выдача Поиска для сайта - кастомные теги, CSS3 и JavaS...
Игорь Шевченко — Новая выдача Поиска для сайта - кастомные теги, CSS3 и JavaS...Игорь Шевченко — Новая выдача Поиска для сайта - кастомные теги, CSS3 и JavaS...
Игорь Шевченко — Новая выдача Поиска для сайта - кастомные теги, CSS3 и JavaS...Yandex
 
Михаил Давыдов - JavaScript. Асинхронность
Михаил Давыдов - JavaScript. АсинхронностьМихаил Давыдов - JavaScript. Асинхронность
Михаил Давыдов - JavaScript. АсинхронностьYandex
 
Angie carolina barrera monzo
Angie carolina barrera monzoAngie carolina barrera monzo
Angie carolina barrera monzoMalena Barrera
 
Дмитрий Вульбрун — Новая выдача Поиска для сайта
Дмитрий Вульбрун — Новая выдача Поиска для сайтаДмитрий Вульбрун — Новая выдача Поиска для сайта
Дмитрий Вульбрун — Новая выдача Поиска для сайтаYandex
 
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.jsВячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.jsYandex
 
"Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения...
"Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения..."Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения...
"Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения...Yandex
 
"Securing eCommerce with Data Metrics". Corey Benninger, Etsy
"Securing eCommerce with Data Metrics". Corey Benninger, Etsy"Securing eCommerce with Data Metrics". Corey Benninger, Etsy
"Securing eCommerce with Data Metrics". Corey Benninger, EtsyYandex
 

Destaque (9)

"How the Universe is put to the test" – Andrei Golutvin, Ulrik Egede, CERN
"How the Universe is put to the test" – Andrei Golutvin, Ulrik Egede, CERN"How the Universe is put to the test" – Andrei Golutvin, Ulrik Egede, CERN
"How the Universe is put to the test" – Andrei Golutvin, Ulrik Egede, CERN
 
Кирилл Меркушев — Матчеры: польза использования и легкость применения в ваших...
Кирилл Меркушев — Матчеры: польза использования и легкость применения в ваших...Кирилл Меркушев — Матчеры: польза использования и легкость применения в ваших...
Кирилл Меркушев — Матчеры: польза использования и легкость применения в ваших...
 
Игорь Шевченко — Новая выдача Поиска для сайта - кастомные теги, CSS3 и JavaS...
Игорь Шевченко — Новая выдача Поиска для сайта - кастомные теги, CSS3 и JavaS...Игорь Шевченко — Новая выдача Поиска для сайта - кастомные теги, CSS3 и JavaS...
Игорь Шевченко — Новая выдача Поиска для сайта - кастомные теги, CSS3 и JavaS...
 
Михаил Давыдов - JavaScript. Асинхронность
Михаил Давыдов - JavaScript. АсинхронностьМихаил Давыдов - JavaScript. Асинхронность
Михаил Давыдов - JavaScript. Асинхронность
 
Angie carolina barrera monzo
Angie carolina barrera monzoAngie carolina barrera monzo
Angie carolina barrera monzo
 
Дмитрий Вульбрун — Новая выдача Поиска для сайта
Дмитрий Вульбрун — Новая выдача Поиска для сайтаДмитрий Вульбрун — Новая выдача Поиска для сайта
Дмитрий Вульбрун — Новая выдача Поиска для сайта
 
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.jsВячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
 
"Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения...
"Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения..."Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения...
"Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения...
 
"Securing eCommerce with Data Metrics". Corey Benninger, Etsy
"Securing eCommerce with Data Metrics". Corey Benninger, Etsy"Securing eCommerce with Data Metrics". Corey Benninger, Etsy
"Securing eCommerce with Data Metrics". Corey Benninger, Etsy
 

Semelhante a Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никакой магии"

My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016Alex Chistyakov
 
SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...
SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...
SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...Ontico
 
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"Fwdays
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Ontico
 
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)Ontico
 
Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Yandex
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаRoman Dvornov
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012Roman Pavlushko
 
Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Anastasia Lubennikova
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Ontico
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseAlexander Granin
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Николай Лавлинский
 
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)Ontico
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...Rais Charipov
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис ПаясьCodeFest
 
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFSHappyDev
 
My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014Alex Chistyakov
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаITCrowd Almaty
 

Semelhante a Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никакой магии" (20)

My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016
 
SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...
SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...
SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (Li...
 
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
 
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
 
Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
 
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис Паясь
 
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
 
My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 

Mais de Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

Mais de Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никакой магии"

  • 1. Инкрементальные обновления  на  клиенте Михаил  Корепанов,  разработчик  интерфейсов Я.Субботник,  Рига,  6  апреля  2013
  • 2. Обо  мне  panyakor@yandex-­team.ru   @panyakor   ●    Разработчик  интерфейсов  в  команде  Яндекс.Почты ●    Нравится  разбираться  в  новых  технологиях, особенно  если  они  позволяют  что-­то автоматизирвать  или  ускорить ●    Можете  спрашивать  про  JS,  CSS,  клиентскую  оптимизацию 02
  • 3. Яндекс.Почта ●    Больше  1  МБ  статики 03
  • 4. Яндекс.Почта ●    Больше  1  МБ  статики ●    Обновляется  2  раза  в  неделю 04
  • 5. Яндекс.Почта ●    Больше  1  МБ  статики ●    Обновляется  2  раза  в  неделю ●    От  версии  к  версии  меняется  не  так  много  кода  (особенно  в случае  хотфиксов) 05
  • 6. Что  уже  сделано  для ускорения  загрузки? ●    gzip ●    Кэширование ●    CDN ●    Фриз  JS/CSS/картинок ●    Параллельная  загрузка  ресурсов  через  XHR 06
  • 7. Этого  не  достаточно! Даже  при  фризе  JS/CSS,  если  от  релиза  к  релизу  меняется только  пара  строк,  кэш  для  ресурса  инвалидируется  полностью. 07
  • 8. Инкрементальные  обновления От  версии  к  версии  меняется  не  так  много  кода  (около  10%,  а  в случае  хотфиксов  еще  меньше). А  что  если  при  выходе  новой  версии  передавать  только изменения? 08
  • 9. Инкрементальные  обновления Что  если  хранить  где-­то  старую  версию  (например  в  localStorage), а  при  выходе  новой  передавать  только  diff  между  новой  и  той, которая  уже  сохранена  у  пользователя? А  дальше  просто  накладывать  патч  на  клиенте. 09
  • 10. Библиотеки  diff  на  JS ●    Vcdiff  (https://github.com/plotnikoff/vcdiff.js) ●    google  diff  patch  match  (http://code.google.com/p/google-­diff-­match-­ patch/) ●    jsdiff  (https://github.com/kpdecker/jsdiff) ●    pretty  diff  (https://github.com/austincheney/Pretty-­Diff) ●    jsdifflib  (https://github.com/cemerick/jsdifflib) 10
  • 11. Библиотеки  diff  на  JS ●    Vcdiff  (https://github.com/plotnikoff/vcdiff.js) ●    google  diff  patch  match  (http://code.google.com/p/google-­diff-­match-­ patch/) ●    jsdiff  (https://github.com/kpdecker/jsdiff)  (в  5  раз  медленнее,  чем google  diff  patch  match) ●    pretty  diff  (https://github.com/austincheney/Pretty-­Diff)  (не  умеет патчить) ●    jsdifflib  (https://github.com/cemerick/jsdifflib)  (не  умеет  патчить) 11
  • 12. Размер  патча  (в  байтах) Vcdiff  (размер Vcdiff  (размер Vcdiff  (размер google  diff  patch блока  3) блока  10) блока  20) match 13957 3586 3431 9297 865 367 309 910 4615 1854 1736 6740 12
  • 13. Время  наложения  патча  на клиенте  (в  миллисекундах) IE  9 Opera  12 Firefox  19 Chrome vcdiff  (размер  блока  10) 8 5 5 3 google  diff  patch  match 1363 76 43 35 13
  • 14. Vcdiff ●    RFC3284  (2002) ●    Используется  Google  в  SDCH ●    Используется  в  "Delta  encoding  in  HTTP"  (RFC3229) Сравнивает  строки  поблочно.  Размер  блока  по  умолчанию  —  20 байт 14
  • 15. Храним  JS/CSS  на  клиенте Храним  в  localStorage. Каждый  ресурс  —  отдельный  ключ. jane.js — 6.18.7@... jane.version — 6.18.7 15
  • 16. При  сборке Генерим  патчи  для  каждого  ресурса  для  предыдущих  3-­х  версий. В  index.html  инлайн  скриптом  вставляем  список  версий,  для которых  у  нас  есть  патчи: 01. oldVersions = { 02. "jane": ["6.19.4", "6.18.7", "6.17.5"], 03. "mail": ["6.19.7", "6.18.8", "6.17.6"] 04. } 16
  • 17. Формат  файла  с  патчами 01. [ 02. { 03. "k": "jane.css", 04. "p": [patch], 05. "s": 4554 06. } 07. ] 17
  • 18. Формат  файла  с  патчами "k"  —  ключ  ресурса  в  LS. "p"  —  патч  для  ресурса,  который  сгенерировал  Vcdiff. "s"  —  чексумма  для  ресурса  актуальной  версии  по  алгоритму Флетчера. 18
  • 19. Почему  алгоритм  Флетчера? ●    Быстрый ●    Компактный ●    Легок  в  реализации 19
  • 20. При  выходе  новой  версии ●    Смотрим,  что  у  пользователя  в  LS 20
  • 21. При  выходе  новой  версии ●    Смотрим,  что  у  пользователя  в  LS ●    Если  для  нужного  проекта  есть  версия  в  LS  —  смотрим  есть  ли эта  версия  в  oldVersions 21
  • 22. При  выходе  новой  версии ●    Смотрим,  что  у  пользователя  в  LS ●    Если  для  нужного  проекта  есть  версия  в  LS  —  смотрим  есть  ли эта  версия  в  oldVersions ●    Если  есть,  посылаем  запрос  за  патчем  для  этой  версии 22
  • 23. При  выходе  новой  версии ●    Смотрим,  что  у  пользователя  в  LS ●    Если  для  нужного  проекта  есть  версия  в  LS  —  смотрим  есть  ли эта  версия  в  oldVersions ●    Если  есть,  посылаем  запрос  за  патчем  для  этой  версии ●    Патчим  все  ресурсы  в  LS  и  проверяем  чексумму 23
  • 24. При  выходе  новой  версии ●    Смотрим,  что  у  пользователя  в  LS ●    Если  для  нужного  проекта  есть  версия  в  LS  —  смотрим  есть  ли эта  версия  в  oldVersions ●    Если  есть,  посылаем  запрос  за  патчем  для  этой  версии ●    Патчим  все  ресурсы  в  LS  и  проверяем  чексумму ●    Если  все  ок  —  обновляем  значение  с  версией  в  LS  на  актуальную 24
  • 25. Что  получили? Появится  в  продакшене  в  ближайшее  время,  поэтому  точных цифр  пока  нет Знаем,  что  средний  размер  патча  составляет  10  -­  15  Кб 25
  • 26. А  что  еще  есть? ●    Shared  Dictionary  Compression  over  HTTP  (SDCH) ●    Delta  encoding  in  HTTP 26
  • 27. SDCH ●    Изобрел  Google  в  2008  году 27
  • 28. SDCH ●    Изобрел  Google  в  2008  году ●    Хорошо  подходит  для  сжатия  часто  обновляемых  страниц 28
  • 29. SDCH ●    Изобрел  Google  в  2008  году ●    Хорошо  подходит  для  сжатия  часто  обновляемых  страниц ●    Поддерживается  только  в  Chrome 29
  • 30. SDCH ●    Изобрел  Google  в  2008  году ●    Хорошо  подходит  для  сжатия  часто  обновляемых  страниц ●    Поддерживается  только  в  Chrome ●    Нет  реализации  для  популярных  веб-­серверов 30
  • 31. SDCH ●    Изобрел  Google  в  2008  году ●    Хорошо  подходит  для  сжатия  часто  обновляемых  страниц ●    Поддерживается  только  в  Chrome ●    Нет  реализации  для  популярных  веб-­серверов ●    Словарь  генерируется  медленно 31
  • 32. SDCH Заголовки  запроса: 01. Accept-Encoding: gzip, deflate, sdch 32
  • 33. SDCH Заголовки  ответа: 01. Content-type: text/html 02. Content-Encoding: gzip 03. Get-Dictionary: {путь к словарю} 33
  • 34. SDCH Запрос  за  словарем: 01. GET {путь к словарю} HTTP/1.1 02. Accept-Encoding: sdch, gzip 03. 04. {контент словаря} 34
  • 35. SDCH Следующий  запрос: 01. Accept-Encoding: gzip, deflate, sdch 02. Avail-Dictionary: TWFuIGlz 35
  • 36. SDCH Заголовки  ответа: 01. Content-type: text/html 02. Content-Encoding: sdch, gzip 03. ... 04. 05. JOWk0d2N...VCDIFFed {контент} 36
  • 37. Delta  encoding  in  HTTP ●    RFC3229  был  представлен  в  2002  году 37
  • 38. Delta  encoding  in  HTTP ●    RFC3229  был  представлен  в  2002  году ●    Разные  методы  diff/сжатия 38
  • 39. Delta  encoding  in  HTTP ●    RFC3229  был  представлен  в  2002  году ●    Разные  методы  diff/сжатия ●    Никем  не  поддерживается 39
  • 40. Delta  encoding  in  HTTP Заголовки  запроса: 01. GET /foo.css HTTP/1.1 02. If-None-Match: "123xyz" 03. A-IM: vcdiff, diffe, gzip 40
  • 41. Delta  encoding  in  HTTP Заголовки  ответа: 01. HTTP/1.1 226 IM Used 02. ETag: "489uhw" 03. IM: vcdiff 04. 05. {контент патча} 41