SlideShare a Scribd company logo
1 of 22
Download to read offline
HTML5 в Я.Почте
Алексей Андросов
Старший разработчик интерфейсов



Я.Субботник, Киев, 28 мая 2011 года
Будущее? Реальность!
2
WebSocket
— Забудьте про polling, long-polling и
  comet!
— Честный двухсторонний обмен данными
  без лишних телодвижений
— Идеально для любых push-уведомлений
  (например, чат)
— Chrome 4+, Safari 5+, Firefox 4+,
  Opera 11+.
— 50% пользователей Я.Почты
    FAIL! 14% пользователей
3
localStorage
— Локальное постоянное хранилище
  текстовых данных в браузере
— Chrome 4+, Firefox 3.5+, IE8+, Opera
  10.5+, Safari 4+.
— 88% пользователей Я.Почты




4
Cross-site XHR with CORS
— Забудьте про проблемы междоменного
  общения!
— Разносим службы по разным доменам —
  эффективная балансировка нагрузки
— Обычный XMLHttpRequest, но с
  возможностью делать запросы в другой
  домен
— Chrome 3+, Firefox 3.5+, IE8+, Safari 4+
— 70% пользователей Я.Почты


5
WebSocket
или как работает
автообновление в
Я.Почте



6
Автообновление почты
Сервер: Xiva (HTTP Extended Event
Automata)
Лицензия GPL, github.com/highpower/xiva
— Специально написан, чтобы держать
  много подключений
— Занимается только доставкой push-
  уведомлений
— Каждый сервис может послать туда
  сообщение, не задумываясь о его
  доставке

7
Автообновление почты
Три варианта работы в браузере:
— WebSocket (Chrome 4+, Safari 5+)
— Flash WebSocket (на основе web-socket-
  js)
— Iframe + long-polling + postMessage




8
Автообновление почты
Недостатки Flash
— Плохая реализация для не-Windows ОС
— После реализации WSS размер
  возрастает до 200кб
— Если что-то пошло не так, то flash сразу
  падает


— Отказываемся в пользу XDR + long-
  polling или comet

9
Автообновление почты
Преимущества WebSocket
— Не учитывается в ограничениях на
  количество одновременных
  подключений, т.к. другой протокол
— Возможность кроссдоменных запросов




10
Автообновление почты
Недостатки WebSocket
— Протокол и API до сих пор не
  утверждены как стандарт
— В JS API нельзя получить заголовки
  ответа. Например, вместо 403 надо
  отвечать специальным сообщением
— При потере интернета не всегда
  закрывает соединение. Нужны ping-
  pong события для проверки соединения



11
Автообновление почты
FAIL WebSocket
— В ноябре 2010 года были опубликованы
  исследования протокола. Из-за багов в
  реализации прозрачных прокси-
  серверов с помощью протокола можно
  подменять кэш сервера
— Как и когда это будет исправлено —
  непонятно
— WebSocket по-умолчанию отключен в
  Firefox и Opera


12
XDR + localStorage
или как грузится
Я.Почта



13
localStorage + Cross-site XHR
С помощью кроссдоменных запросов
забираем CSS, JS, XSL (~1Мб) со
статического кластера и записываем ее в
localStorage.
В ключи к данным добавляется текущая
версия, чтобы точно понять, когда нам
надо обновить статику.


Итог: ускорение загрузки Я.Почты на 1,5-3
секунды.

14
localStorage
 <!–- Определение поддержки localStorage © Modernizr -->
  try {
      return !!localStorage.getItem;
  } catch(e) {
      return false;
  }


Методы: getItem, setItem, key, clear
Свойства: length, remainingSpace (IE)
Все методы надо оборачивать
         в try-catch!

15
localStorage
Ограничения на домен
 A mostly arbitrary limit of five megabytes
per origin is recommended.
     dev.w3.org/html5/webstorage/#disk-space


     Все браузеры следуют этой
         рекомендации, но…



16
localStorage
Ограничения на домен
— Chrome, Safari используют SQLite и UTF-
  16, поэтому записать можно ~2,5 млн.
  символов
— Fx, — SQLite + UTF-8, ~5 млн. символов
— IE — xml, ~5 млн. символов
— Opera — xml + base64, ~2 млн.
  символов. Появляется сообщение с
  просьбой увеличить размер


17
localStorage
Глобальные ограничения
 User agents should guard against sites
storing data under the origins other affiliated
sites, e.g. storing up to the limit in
a1.example.com, a2.example.com, etc,
circumventing the main example.com storage
limit.
     dev.w3.org/html5/webstorage/#disk-space
— Chrome, Safari — нет
— Fx, IE ~5 млн. символов на домен 2-го
  уровня
— Opera — ~35 млн. символов на всё
18
Cross-site XHR with CORS
 <!–- Определение поддержки -->
  !!(window['XDomainRequest'] ||
  (window['XMLHttpRequest'] && 'withCredentials' in new
 XMLHttpRequest()));

CORS — Cross-Origin Resource Sharing
(http://www.w3.org/TR/access-control/)


Браузер отправляет дополнительный
заголовок «Origin: http://mail.yandex.ru»
Сервер отвечает «Access-Control-Allow-Origin: *»

19
Cross-site XHR with CORS
Проблемы
— Не все прокси-сервера пропускают
  заголовки Access-Control-Allow-Origin
 xdr['onerror'] = function(){
    // fallback до обычный системы загрузки
 }


— XDomainRequest не является заменой
  XHR, имеет ограниченный функционал
— В IE9 в режиме IE9 виснут запросы
 xdr['onprogress'] = function() {};


20
Вопросы?




21
Алексей Андросов
Старший разработчик
интерфейсов

aandrosov@yandex-team.ru

More Related Content

What's hot

Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....KazHackStan
 
Perl resources
Perl resourcesPerl resources
Perl resourcesmegakott
 
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...KazHackStan
 
Михаил Давыдов: Транспорт, ajax
Михаил Давыдов: Транспорт, ajaxМихаил Давыдов: Транспорт, ajax
Михаил Давыдов: Транспорт, ajaxYandex
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxYandex
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени. beshkenadze
 
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...KazHackStan
 
Проект OAI-Беларусь. Технические аспекты реализации
Проект OAI-Беларусь. Технические аспекты реализацииПроект OAI-Беларусь. Технические аспекты реализации
Проект OAI-Беларусь. Технические аспекты реализацииbntulibrary
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.Alexander Frolov
 
WebSockets
WebSocketsWebSockets
WebSocketsplusnin
 
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколыRoman Brovko
 
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...KazHackStan
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Socketsrit2010
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноVladislav Bezverhiy
 

What's hot (20)

Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
 
Perl resources
Perl resourcesPerl resources
Perl resources
 
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
 
Михаил Давыдов: Транспорт, ajax
Михаил Давыдов: Транспорт, ajaxМихаил Давыдов: Транспорт, ajax
Михаил Давыдов: Транспорт, ajax
 
HTTP протокол
HTTP протоколHTTP протокол
HTTP протокол
 
Сокеты
СокетыСокеты
Сокеты
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, Ajax
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
 
Проект OAI-Беларусь. Технические аспекты реализации
Проект OAI-Беларусь. Технические аспекты реализацииПроект OAI-Беларусь. Технические аспекты реализации
Проект OAI-Беларусь. Технические аспекты реализации
 
WWW
WWWWWW
WWW
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
 
WebSockets
WebSocketsWebSockets
WebSockets
 
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы
 
Анализ трафика
Анализ трафикаАнализ трафика
Анализ трафика
 
Speed
SpeedSpeed
Speed
 
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Sockets
 
Web sockets
Web socketsWeb sockets
Web sockets
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. Молодёжно
 

Viewers also liked

Adapto\ing Rankers Online, Maarten de Rijke
Adapto\ing Rankers Online, Maarten de RijkeAdapto\ing Rankers Online, Maarten de Rijke
Adapto\ing Rankers Online, Maarten de Rijkeyaevents
 
сложная вёрстка в примерах
сложная вёрстка в примерахсложная вёрстка в примерах
сложная вёрстка в примерахyaevents
 
Organize Events to Attract Members and Boost Attendance
Organize Events to Attract Members and  Boost AttendanceOrganize Events to Attract Members and  Boost Attendance
Organize Events to Attract Members and Boost AttendanceStarChapter
 
5 tips for writing a successful press release for your associaiton
5 tips for writing a successful press release for your associaiton5 tips for writing a successful press release for your associaiton
5 tips for writing a successful press release for your associaitonStarChapter
 
LOGINN - Logistics Innovation Uptake
LOGINN - Logistics Innovation UptakeLOGINN - Logistics Innovation Uptake
LOGINN - Logistics Innovation UptakePer Olof Arnäs
 
овдз 2013 лекція 1
овдз 2013 лекція 1овдз 2013 лекція 1
овдз 2013 лекція 1Axon.Partners
 
Поисковая технология "Спектр". Андрей Плахов, Яндекс
Поисковая технология "Спектр". Андрей Плахов, ЯндексПоисковая технология "Спектр". Андрей Плахов, Яндекс
Поисковая технология "Спектр". Андрей Плахов, Яндексyaevents
 
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...yaevents
 
Julia Stoyanovich - Making interval-based clustering rank-aware
Julia Stoyanovich - Making interval-based clustering rank-awareJulia Stoyanovich - Making interval-based clustering rank-aware
Julia Stoyanovich - Making interval-based clustering rank-awareyaevents
 
Optimizaciya vremeni zagruzki_azat_razetdinov
Optimizaciya vremeni zagruzki_azat_razetdinovOptimizaciya vremeni zagruzki_azat_razetdinov
Optimizaciya vremeni zagruzki_azat_razetdinovyaevents
 
Mihail Korepanov
Mihail KorepanovMihail Korepanov
Mihail Korepanovyaevents
 
Elena Gluhova
Elena GluhovaElena Gluhova
Elena Gluhovayaevents
 
Maksim Shirshin
Maksim ShirshinMaksim Shirshin
Maksim Shirshinyaevents
 
Bus705 written research proposal-vf-jmaher
Bus705 written research proposal-vf-jmaherBus705 written research proposal-vf-jmaher
Bus705 written research proposal-vf-jmaherJess Maher
 
Performance prediction and evaluation in Recommender Systems: an Information ...
Performance prediction and evaluation in Recommender Systems: an Information ...Performance prediction and evaluation in Recommender Systems: an Information ...
Performance prediction and evaluation in Recommender Systems: an Information ...Alejandro Bellogin
 
Check out section
Check out sectionCheck out section
Check out sectionAmy Byrne
 

Viewers also liked (18)

Adapto\ing Rankers Online, Maarten de Rijke
Adapto\ing Rankers Online, Maarten de RijkeAdapto\ing Rankers Online, Maarten de Rijke
Adapto\ing Rankers Online, Maarten de Rijke
 
сложная вёрстка в примерах
сложная вёрстка в примерахсложная вёрстка в примерах
сложная вёрстка в примерах
 
Organize Events to Attract Members and Boost Attendance
Organize Events to Attract Members and  Boost AttendanceOrganize Events to Attract Members and  Boost Attendance
Organize Events to Attract Members and Boost Attendance
 
5 tips for writing a successful press release for your associaiton
5 tips for writing a successful press release for your associaiton5 tips for writing a successful press release for your associaiton
5 tips for writing a successful press release for your associaiton
 
LOGINN - Logistics Innovation Uptake
LOGINN - Logistics Innovation UptakeLOGINN - Logistics Innovation Uptake
LOGINN - Logistics Innovation Uptake
 
овдз 2013 лекція 1
овдз 2013 лекція 1овдз 2013 лекція 1
овдз 2013 лекція 1
 
Поисковая технология "Спектр". Андрей Плахов, Яндекс
Поисковая технология "Спектр". Андрей Плахов, ЯндексПоисковая технология "Спектр". Андрей Плахов, Яндекс
Поисковая технология "Спектр". Андрей Плахов, Яндекс
 
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...
 
Julia Stoyanovich - Making interval-based clustering rank-aware
Julia Stoyanovich - Making interval-based clustering rank-awareJulia Stoyanovich - Making interval-based clustering rank-aware
Julia Stoyanovich - Making interval-based clustering rank-aware
 
Agile
AgileAgile
Agile
 
Newsrewired
NewsrewiredNewsrewired
Newsrewired
 
Optimizaciya vremeni zagruzki_azat_razetdinov
Optimizaciya vremeni zagruzki_azat_razetdinovOptimizaciya vremeni zagruzki_azat_razetdinov
Optimizaciya vremeni zagruzki_azat_razetdinov
 
Mihail Korepanov
Mihail KorepanovMihail Korepanov
Mihail Korepanov
 
Elena Gluhova
Elena GluhovaElena Gluhova
Elena Gluhova
 
Maksim Shirshin
Maksim ShirshinMaksim Shirshin
Maksim Shirshin
 
Bus705 written research proposal-vf-jmaher
Bus705 written research proposal-vf-jmaherBus705 written research proposal-vf-jmaher
Bus705 written research proposal-vf-jmaher
 
Performance prediction and evaluation in Recommender Systems: an Information ...
Performance prediction and evaluation in Recommender Systems: an Information ...Performance prediction and evaluation in Recommender Systems: an Information ...
Performance prediction and evaluation in Recommender Systems: an Information ...
 
Check out section
Check out sectionCheck out section
Check out section
 

Similar to Aleksey Androsov

Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеAlexey Androsov
 
Ajax and Transports (in russian)
Ajax and Transports (in russian)Ajax and Transports (in russian)
Ajax and Transports (in russian)Mikhail Davydov
 
Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...
Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...
Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...Ontico
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkOleksandr Torosh
 
Web весна 2013 лекция 3
Web весна 2013 лекция 3Web весна 2013 лекция 3
Web весна 2013 лекция 3Technopark
 
Web осень 2012 лекция 3
Web осень 2012 лекция 3Web осень 2012 лекция 3
Web осень 2012 лекция 3Technopark
 
Web весна 2013 лекция 2
Web весна 2013 лекция 2Web весна 2013 лекция 2
Web весна 2013 лекция 2Technopark
 
МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2Dima Dzuba
 
Клиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhoneКлиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhonePavel Bashmakov
 
Cocoa Networking
Cocoa NetworkingCocoa Networking
Cocoa Networkingguest57eb8a
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
 
Web осень 2012 лекция 2
Web осень 2012 лекция 2Web осень 2012 лекция 2
Web осень 2012 лекция 2Technopark
 
архитектура новой почты рамблера
архитектура новой почты рамблераархитектура новой почты рамблера
архитектура новой почты рамблераHighLoad2009
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует GoArtem Kovardin
 
67
6767
67JIuc
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianMikhail Davydov
 
Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел ...
Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел ...Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел ...
Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел ...Ontico
 
2017-03-26 01 Анна Тарасенко. Как устроен Web изнутри
2017-03-26 01 Анна Тарасенко. Как устроен Web изнутри2017-03-26 01 Анна Тарасенко. Как устроен Web изнутри
2017-03-26 01 Анна Тарасенко. Как устроен Web изнутриHappyDev-lite
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 

Similar to Aleksey Androsov (20)

Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
 
Ajax and Transports (in russian)
Ajax and Transports (in russian)Ajax and Transports (in russian)
Ajax and Transports (in russian)
 
Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...
Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...
Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP Framework
 
Web весна 2013 лекция 3
Web весна 2013 лекция 3Web весна 2013 лекция 3
Web весна 2013 лекция 3
 
Web осень 2012 лекция 3
Web осень 2012 лекция 3Web осень 2012 лекция 3
Web осень 2012 лекция 3
 
Web весна 2013 лекция 2
Web весна 2013 лекция 2Web весна 2013 лекция 2
Web весна 2013 лекция 2
 
МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2
 
Клиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhoneКлиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhone
 
Cocoa Networking
Cocoa NetworkingCocoa Networking
Cocoa Networking
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
Web осень 2012 лекция 2
Web осень 2012 лекция 2Web осень 2012 лекция 2
Web осень 2012 лекция 2
 
Ramail Arch
Ramail ArchRamail Arch
Ramail Arch
 
архитектура новой почты рамблера
архитектура новой почты рамблераархитектура новой почты рамблера
архитектура новой почты рамблера
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует Go
 
67
6767
67
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
 
Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел ...
Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел ...Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел ...
Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел ...
 
2017-03-26 01 Анна Тарасенко. Как устроен Web изнутри
2017-03-26 01 Анна Тарасенко. Как устроен Web изнутри2017-03-26 01 Анна Тарасенко. Как устроен Web изнутри
2017-03-26 01 Анна Тарасенко. Как устроен Web изнутри
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 

More from yaevents

Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...yaevents
 
Тема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, ЯндексТема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, Яндексyaevents
 
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндекс
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндексi-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндекс
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндексyaevents
 
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...yaevents
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...yaevents
 
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...yaevents
 
Мониторинг со всех сторон. Алексей Симаков, Яндекс
Мониторинг со всех сторон. Алексей Симаков, ЯндексМониторинг со всех сторон. Алексей Симаков, Яндекс
Мониторинг со всех сторон. Алексей Симаков, Яндексyaevents
 
Истории про разработку сайтов. Сергей Бережной, Яндекс
Истории про разработку сайтов. Сергей Бережной, ЯндексИстории про разработку сайтов. Сергей Бережной, Яндекс
Истории про разработку сайтов. Сергей Бережной, Яндексyaevents
 
Разработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, ShturmannРазработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, Shturmannyaevents
 
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...yaevents
 
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...yaevents
 
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндекс
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, ЯндексСканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндекс
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндексyaevents
 
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebook
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, FacebookМасштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebook
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebookyaevents
 
Контроль зверей: инструменты для управления и мониторинга распределенных сист...
Контроль зверей: инструменты для управления и мониторинга распределенных сист...Контроль зверей: инструменты для управления и мониторинга распределенных сист...
Контроль зверей: инструменты для управления и мониторинга распределенных сист...yaevents
 
Юнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, GoogleЮнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, Googleyaevents
 
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...yaevents
 
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...yaevents
 
В поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, НигмаВ поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, Нигмаyaevents
 
Using classifiers to compute similarities between face images. Prof. Lior Wol...
Using classifiers to compute similarities between face images. Prof. Lior Wol...Using classifiers to compute similarities between face images. Prof. Lior Wol...
Using classifiers to compute similarities between face images. Prof. Lior Wol...yaevents
 
Mike Thelwall - Sentiment strength detection for the social web: From YouTube...
Mike Thelwall - Sentiment strength detection for the social web: From YouTube...Mike Thelwall - Sentiment strength detection for the social web: From YouTube...
Mike Thelwall - Sentiment strength detection for the social web: From YouTube...yaevents
 

More from yaevents (20)

Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
 
Тема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, ЯндексТема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, Яндекс
 
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндекс
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндексi-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндекс
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндекс
 
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
 
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
 
Мониторинг со всех сторон. Алексей Симаков, Яндекс
Мониторинг со всех сторон. Алексей Симаков, ЯндексМониторинг со всех сторон. Алексей Симаков, Яндекс
Мониторинг со всех сторон. Алексей Симаков, Яндекс
 
Истории про разработку сайтов. Сергей Бережной, Яндекс
Истории про разработку сайтов. Сергей Бережной, ЯндексИстории про разработку сайтов. Сергей Бережной, Яндекс
Истории про разработку сайтов. Сергей Бережной, Яндекс
 
Разработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, ShturmannРазработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, Shturmann
 
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...
 
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...
 
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндекс
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, ЯндексСканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндекс
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндекс
 
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebook
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, FacebookМасштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebook
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebook
 
Контроль зверей: инструменты для управления и мониторинга распределенных сист...
Контроль зверей: инструменты для управления и мониторинга распределенных сист...Контроль зверей: инструменты для управления и мониторинга распределенных сист...
Контроль зверей: инструменты для управления и мониторинга распределенных сист...
 
Юнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, GoogleЮнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, Google
 
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...
 
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
 
В поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, НигмаВ поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, Нигма
 
Using classifiers to compute similarities between face images. Prof. Lior Wol...
Using classifiers to compute similarities between face images. Prof. Lior Wol...Using classifiers to compute similarities between face images. Prof. Lior Wol...
Using classifiers to compute similarities between face images. Prof. Lior Wol...
 
Mike Thelwall - Sentiment strength detection for the social web: From YouTube...
Mike Thelwall - Sentiment strength detection for the social web: From YouTube...Mike Thelwall - Sentiment strength detection for the social web: From YouTube...
Mike Thelwall - Sentiment strength detection for the social web: From YouTube...
 

Aleksey Androsov

  • 1. HTML5 в Я.Почте Алексей Андросов Старший разработчик интерфейсов Я.Субботник, Киев, 28 мая 2011 года
  • 3. WebSocket — Забудьте про polling, long-polling и comet! — Честный двухсторонний обмен данными без лишних телодвижений — Идеально для любых push-уведомлений (например, чат) — Chrome 4+, Safari 5+, Firefox 4+, Opera 11+. — 50% пользователей Я.Почты FAIL! 14% пользователей 3
  • 4. localStorage — Локальное постоянное хранилище текстовых данных в браузере — Chrome 4+, Firefox 3.5+, IE8+, Opera 10.5+, Safari 4+. — 88% пользователей Я.Почты 4
  • 5. Cross-site XHR with CORS — Забудьте про проблемы междоменного общения! — Разносим службы по разным доменам — эффективная балансировка нагрузки — Обычный XMLHttpRequest, но с возможностью делать запросы в другой домен — Chrome 3+, Firefox 3.5+, IE8+, Safari 4+ — 70% пользователей Я.Почты 5
  • 7. Автообновление почты Сервер: Xiva (HTTP Extended Event Automata) Лицензия GPL, github.com/highpower/xiva — Специально написан, чтобы держать много подключений — Занимается только доставкой push- уведомлений — Каждый сервис может послать туда сообщение, не задумываясь о его доставке 7
  • 8. Автообновление почты Три варианта работы в браузере: — WebSocket (Chrome 4+, Safari 5+) — Flash WebSocket (на основе web-socket- js) — Iframe + long-polling + postMessage 8
  • 9. Автообновление почты Недостатки Flash — Плохая реализация для не-Windows ОС — После реализации WSS размер возрастает до 200кб — Если что-то пошло не так, то flash сразу падает — Отказываемся в пользу XDR + long- polling или comet 9
  • 10. Автообновление почты Преимущества WebSocket — Не учитывается в ограничениях на количество одновременных подключений, т.к. другой протокол — Возможность кроссдоменных запросов 10
  • 11. Автообновление почты Недостатки WebSocket — Протокол и API до сих пор не утверждены как стандарт — В JS API нельзя получить заголовки ответа. Например, вместо 403 надо отвечать специальным сообщением — При потере интернета не всегда закрывает соединение. Нужны ping- pong события для проверки соединения 11
  • 12. Автообновление почты FAIL WebSocket — В ноябре 2010 года были опубликованы исследования протокола. Из-за багов в реализации прозрачных прокси- серверов с помощью протокола можно подменять кэш сервера — Как и когда это будет исправлено — непонятно — WebSocket по-умолчанию отключен в Firefox и Opera 12
  • 13. XDR + localStorage или как грузится Я.Почта 13
  • 14. localStorage + Cross-site XHR С помощью кроссдоменных запросов забираем CSS, JS, XSL (~1Мб) со статического кластера и записываем ее в localStorage. В ключи к данным добавляется текущая версия, чтобы точно понять, когда нам надо обновить статику. Итог: ускорение загрузки Я.Почты на 1,5-3 секунды. 14
  • 15. localStorage <!–- Определение поддержки localStorage © Modernizr --> try { return !!localStorage.getItem; } catch(e) { return false; } Методы: getItem, setItem, key, clear Свойства: length, remainingSpace (IE) Все методы надо оборачивать в try-catch! 15
  • 16. localStorage Ограничения на домен A mostly arbitrary limit of five megabytes per origin is recommended. dev.w3.org/html5/webstorage/#disk-space Все браузеры следуют этой рекомендации, но… 16
  • 17. localStorage Ограничения на домен — Chrome, Safari используют SQLite и UTF- 16, поэтому записать можно ~2,5 млн. символов — Fx, — SQLite + UTF-8, ~5 млн. символов — IE — xml, ~5 млн. символов — Opera — xml + base64, ~2 млн. символов. Появляется сообщение с просьбой увеличить размер 17
  • 18. localStorage Глобальные ограничения User agents should guard against sites storing data under the origins other affiliated sites, e.g. storing up to the limit in a1.example.com, a2.example.com, etc, circumventing the main example.com storage limit. dev.w3.org/html5/webstorage/#disk-space — Chrome, Safari — нет — Fx, IE ~5 млн. символов на домен 2-го уровня — Opera — ~35 млн. символов на всё 18
  • 19. Cross-site XHR with CORS <!–- Определение поддержки --> !!(window['XDomainRequest'] || (window['XMLHttpRequest'] && 'withCredentials' in new XMLHttpRequest())); CORS — Cross-Origin Resource Sharing (http://www.w3.org/TR/access-control/) Браузер отправляет дополнительный заголовок «Origin: http://mail.yandex.ru» Сервер отвечает «Access-Control-Allow-Origin: *» 19
  • 20. Cross-site XHR with CORS Проблемы — Не все прокси-сервера пропускают заголовки Access-Control-Allow-Origin xdr['onerror'] = function(){ // fallback до обычный системы загрузки } — XDomainRequest не является заменой XHR, имеет ограниченный функционал — В IE9 в режиме IE9 виснут запросы xdr['onprogress'] = function() {}; 20