SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
Инкрементальные
обновления  на  клиенте
Михаил  Корепанов,  разработчик  интерфейсов
Я.Субботник,  Киев,  27  апреля  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  (размер
блока  3)
Vcdiff  (размер
блока  10)
Vcdiff  (размер
блока  20)
google  diff  patch
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  инлайн  скриптом  вставляем  список  версий,  для
которых  у  нас  есть  патчи:
oldVersions = {
"jane": ["6.19.4", "6.18.7", "6.17.5"],
"mail": ["6.19.7", "6.18.8", "6.17.6"]
}
01.
02.
03.
04.
16
Формат  файла  с  патчами
[
{
"k": "jane.css",
"p": [patch],
"s": 4554
}
]
01.
02.
03.
04.
05.
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
Что  получили?
Размер  выкачиваемой  при  обновлении  статики  в  байтах
Релиз С  патчем Без  патча
7.7.20  —  7.7.21 397 174  549
7.7.21  —  7.7.22 383 53  995
7.7.22  —  7.8 18  077 611  378
7.8  —  7.8.50 2  817 137  820
7.8.50  —  7.8.8000 14  868 443  159
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
Заголовки  запроса:
Accept-Encoding: gzip, deflate, sdch01.
32
SDCH
Заголовки  ответа:
Content-type: text/html
Content-Encoding: gzip
Get-Dictionary: {путь к словарю}
01.
02.
03.
33
SDCH
Запрос  за  словарем:
GET {путь к словарю} HTTP/1.1
Accept-Encoding: sdch, gzip
{контент словаря}
01.
02.
03.
04.
34
SDCH
Следующий  запрос:
Accept-Encoding: gzip, deflate, sdch
Avail-Dictionary: TWFuIGlz
01.
02.
35
SDCH
Заголовки  ответа:
Content-type: text/html
Content-Encoding: sdch, gzip
...
JOWk0d2N...VCDIFFed {контент}
01.
02.
03.
04.
05.
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
Заголовки  запроса:
GET /foo.css HTTP/1.1
If-None-Match: "123xyz"
A-IM: vcdiff, diffe, gzip
01.
02.
03.
40
Delta  encoding  in  HTTP
Заголовки  ответа:
HTTP/1.1 226 IM Used
ETag: "489uhw"
IM: vcdiff
{контент патча}
01.
02.
03.
04.
05.
41
Михаил  Корепанов
Разработчик  интерфейсов
  panyakor@yandex-­team.ru
  @panyakor

Mais conteúdo relacionado

Mais procurados

Общие технологии между несколькими проектами в Яндексе
Общие технологии между несколькими проектами в ЯндексеОбщие технологии между несколькими проектами в Яндексе
Общие технологии между несколькими проектами в ЯндексеYandex
 
"Великолепный API без Rest", Констатин Якушев (Badoo)
 "Великолепный API без Rest", Констатин Якушев (Badoo) "Великолепный API без Rest", Констатин Якушев (Badoo)
"Великолепный API без Rest", Констатин Якушев (Badoo)Badoo Development
 
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
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funAlexandr Khotemskoy
 
Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsValentin Fedoskin
 
Введение в язык программирования Go
Введение в язык программирования GoВведение в язык программирования Go
Введение в язык программирования GoElena Grahovac
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27MoscowJS
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Yandex
 
JavaScript завтра / Сергей Рубанов (Exante Limited)
JavaScript завтра / Сергей Рубанов  (Exante Limited)JavaScript завтра / Сергей Рубанов  (Exante Limited)
JavaScript завтра / Сергей Рубанов (Exante Limited)Ontico
 
История про OpenSource в Яндексе
История про OpenSource в ЯндексеИстория про OpenSource в Яндексе
История про OpenSource в ЯндексеYandex
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует GoArtem Kovardin
 
Готовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходниковГотовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходниковElena Grahovac
 
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовGo в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовYandex
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Nikita Baksalyar
 
Jody - JsOn for Dynamic sites on Rails
Jody - JsOn for Dynamic sites on RailsJody - JsOn for Dynamic sites on Rails
Jody - JsOn for Dynamic sites on Railszykin-ilya
 

Mais procurados (20)

Общие технологии между несколькими проектами в Яндексе
Общие технологии между несколькими проектами в ЯндексеОбщие технологии между несколькими проектами в Яндексе
Общие технологии между несколькими проектами в Яндексе
 
"Великолепный API без Rest", Констатин Якушев (Badoo)
 "Великолепный API без Rest", Констатин Якушев (Badoo) "Великолепный API без Rest", Констатин Якушев (Badoo)
"Великолепный API без Rest", Констатин Якушев (Badoo)
 
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"
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double fun
 
Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + Jenkins
 
Введение в язык программирования Go
Введение в язык программирования GoВведение в язык программирования Go
Введение в язык программирования Go
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27
 
Use Grunt Luke
Use Grunt LukeUse Grunt Luke
Use Grunt Luke
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
 
JavaScript завтра / Сергей Рубанов (Exante Limited)
JavaScript завтра / Сергей Рубанов  (Exante Limited)JavaScript завтра / Сергей Рубанов  (Exante Limited)
JavaScript завтра / Сергей Рубанов (Exante Limited)
 
История про OpenSource в Яндексе
История про OpenSource в ЯндексеИстория про OpenSource в Яндексе
История про OpenSource в Яндексе
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует Go
 
Golang
GolangGolang
Golang
 
Готовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходниковГотовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходников
 
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовGo в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016
 
ChromeDriver Jailbreak
ChromeDriver JailbreakChromeDriver Jailbreak
ChromeDriver Jailbreak
 
Jody - JsOn for Dynamic sites on Rails
Jody - JsOn for Dynamic sites on RailsJody - JsOn for Dynamic sites on Rails
Jody - JsOn for Dynamic sites on Rails
 

Semelhante a Михаил Корепанов "Инкрементальные обновления на клиенте"

Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Yandex
 
Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Anastasia Lubennikova
 
Оптимизация JavaScript в Drupal
Оптимизация JavaScript в DrupalОптимизация JavaScript в Drupal
Оптимизация JavaScript в DrupalVlad Savitsky
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаRoman Dvornov
 
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
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Ontico
 
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
 
DUMP-2013 Управление разработкой - Переход от проектной разработки к продукто...
DUMP-2013 Управление разработкой - Переход от проектной разработки к продукто...DUMP-2013 Управление разработкой - Переход от проектной разработки к продукто...
DUMP-2013 Управление разработкой - Переход от проектной разработки к продукто...it-people
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Ontico
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Фронтенд для миллионов (Орёл)
Фронтенд для миллионов (Орёл)Фронтенд для миллионов (Орёл)
Фронтенд для миллионов (Орёл)Anastasia Goryacheva
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...Provectus
 
Фламп на спидах или ка релизить каждый день
Фламп на спидах или ка релизить каждый деньФламп на спидах или ка релизить каждый день
Фламп на спидах или ка релизить каждый деньDevDay
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...Rais Charipov
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаITCrowd Almaty
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...Nikolay Samokhvalov
 

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

Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"
 
Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL
 
Оптимизация JavaScript в Drupal
Оптимизация JavaScript в DrupalОптимизация JavaScript в Drupal
Оптимизация JavaScript в Drupal
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
Git for you
Git for youGit for you
Git for you
 
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
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
 
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
 
DUMP-2013 Управление разработкой - Переход от проектной разработки к продукто...
DUMP-2013 Управление разработкой - Переход от проектной разработки к продукто...DUMP-2013 Управление разработкой - Переход от проектной разработки к продукто...
DUMP-2013 Управление разработкой - Переход от проектной разработки к продукто...
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Фронтенд для миллионов (Орёл)
Фронтенд для миллионов (Орёл)Фронтенд для миллионов (Орёл)
Фронтенд для миллионов (Орёл)
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
 
Фламп на спидах или ка релизить каждый день
Фламп на спидах или ка релизить каждый деньФламп на спидах или ка релизить каждый день
Фламп на спидах или ка релизить каждый день
 
Gitlab devconf
Gitlab devconfGitlab devconf
Gitlab devconf
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 

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. Инкрементальные обновления  на  клиенте Михаил  Корепанов,  разработчик  интерфейсов Я.Субботник,  Киев,  27  апреля  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  (размер блока  3) Vcdiff  (размер блока  10) Vcdiff  (размер блока  20) google  diff  patch 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  инлайн  скриптом  вставляем  список  версий,  для которых  у  нас  есть  патчи: oldVersions = { "jane": ["6.19.4", "6.18.7", "6.17.5"], "mail": ["6.19.7", "6.18.8", "6.17.6"] } 01. 02. 03. 04. 16
  • 17. Формат  файла  с  патчами [ { "k": "jane.css", "p": [patch], "s": 4554 } ] 01. 02. 03. 04. 05. 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. Что  получили? Размер  выкачиваемой  при  обновлении  статики  в  байтах Релиз С  патчем Без  патча 7.7.20  —  7.7.21 397 174  549 7.7.21  —  7.7.22 383 53  995 7.7.22  —  7.8 18  077 611  378 7.8  —  7.8.50 2  817 137  820 7.8.50  —  7.8.8000 14  868 443  159 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
  • 33. SDCH Заголовки  ответа: Content-type: text/html Content-Encoding: gzip Get-Dictionary: {путь к словарю} 01. 02. 03. 33
  • 34. SDCH Запрос  за  словарем: GET {путь к словарю} HTTP/1.1 Accept-Encoding: sdch, gzip {контент словаря} 01. 02. 03. 04. 34
  • 35. SDCH Следующий  запрос: Accept-Encoding: gzip, deflate, sdch Avail-Dictionary: TWFuIGlz 01. 02. 35
  • 36. SDCH Заголовки  ответа: Content-type: text/html Content-Encoding: sdch, gzip ... JOWk0d2N...VCDIFFed {контент} 01. 02. 03. 04. 05. 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 Заголовки  запроса: GET /foo.css HTTP/1.1 If-None-Match: "123xyz" A-IM: vcdiff, diffe, gzip 01. 02. 03. 40
  • 41. Delta  encoding  in  HTTP Заголовки  ответа: HTTP/1.1 226 IM Used ETag: "489uhw" IM: vcdiff {контент патча} 01. 02. 03. 04. 05. 41