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



Я.Субботник, Челябинск, 25 февраля 2012 года
Знакомтесь!




Меня зовут Дарья.
   Я — почта.       Меня зовут Джейн.
                     Я — платформа.




2
3
Изнутри

• Единый код для всех доменов
  (mail.yandex.by/.com/.com.tr/.kz/.ru/.ua), ПДД
  (pdd.yandex.ru) и корпоративной почты
  mail.yandex-team.ru

• Единая платформа и фреймворк для создания
  приложений в интерфейсе Почты

• Формат данных — XML

• Шаблонизатор в браузере — XSL
4
XSL???




5
Почему XSL???77

• Поддерживается всеми современными
  браузерами

• XSL — «идеальный» шаблонизатор: простой,
  понятный, гибкий и выразительный язык

• Прозрачное и удобное управление процессом
  выполнения, в итоге один xsl накладывается на
  любые данные


6
Для начала надо
загрузиться...



7
8
А как понять что загрузить, а
что перерисовать?



9
10
Главные действующие лица:

• Handler (model)

• Block (view)

• Run (block controller)




11
Действие первое: блоки




12
Block
Элемент интерфейса
• Мета-описание блока (тип, зависимость от данных,
  внутренние блоки)

• Хранит у себя html-блоки по ключу (склеенные
  ключи от хендлеров)

• Состоит из js-описания и xsl-шаблона

• Есть события: init, show, hide, destroy, …

• Блоки на странице выстраиваются в дерево
13
Block

Jane.Block.add({
  name: 'message',
  handlers: ['message', 'settings'],
  blocks: ['msg-body', 'msg-nearest'],
  constructor: MsgBlockClass,
  box: false,
  lazy: false
});


14
Run, Forest! Run!
Run — контроллер блоков
• Проходит по дереву блоков, определяет, какие
  блоки надо показать, скрыть, перерисовать или
  создать заново

• Определяет, есть ли все необходимые данные на
  клиенте. Если чего-то нет, делает запрос на сервер

• Накладывает xsl-шаблон и вставляет получившиеся
  html-ноды на страницу


15
16
17
18
19
20
21
22
23
24
Теперь мы знаем:

• Список данных (хендлеров), которые надо
  запросить

• Параметры, с которыми их надо запрашивать

• Информацию обо всех изменяемых блоках




25
Действие второе: handler




26
Handler
Хранит атомарные данные
• Мета-описание: откуда и как забирать данные (fle,
  http, wmi)

• Хранит у себя xml-данные по ключу (GET-
  параметры)

• Может делать пост-обработку

• Может предоставлять высокоуровневые методы
  доступа к данным

27
Handler

new Jane.Handler('message', {
  params: {
     ids: true
  }
});




28
29
Вот так выглядит запрос

/handlers.jsx?
  _handlers=message,message-body&
  ids=1234567890

/handlers.jsx?
  _handlers.0=message&
  ids=1234567890&
  _handlers.1=message&
  ids=1234567891

30
А вот так ответ

 <handlers>
   <handler name=”message”
     key=”_h=message&ids=12345”>
     <!-- данные -->
   </handler>
   <handler name="message"
     key="_h=message&ids=12346">
     <!-- данные -->
   </handler>
 </handlers>



31
Действие третье: и снова Run




32
Склеиваем все в один XML

 <page>
     <page-blocks>
         <app>
            <left-box>
                <...>
            </left-box>
            <right-box>
                <...>
            </right-box>
         </app>
      </page-blocks>
      <...данные для блоков...>
      <...данные для блоков...>
 </page>


33
Что дальше?

• Накладываем XSL

• Получаем HTML-ноды, вставлем их в DOM

• Скрываем старые блоки, вставляем новые

• Триггерим события (init, destroy, show, hide,
  repaint) на блоках



34
Что в итоге?




35
Платформа для ajax-
приложений
• Проект добавляет в платформу файл, который
  отвечает на два вопроса: откуда его грузить и по
  какому урлу (хешу) открывать

• Проект описывает свое приложение в терминах
  handler-block и включает его в состав почты

• Все :) Дальше платформа все сделает сама



36
Бонус треки




37
Реакция на действия
пользователя



38
Acton
Обработчик onclick'ов :)
• Все обработчики (click, submit, hover) событий
  делегированы на document

• Имеет имя, по которому его можно вызвать

• Обычно делает что-то с данными и запускает Run

• Любая нода с классом daria-acton может вызвать
  acton. Имя берется из атрибутов


39
Как выглядит acton?

 new Daria.Action(
     'do-something',
     function(event){
        // код обработчика
     }
 );


40
Как это выглядит в HTML?

 <div
     class="daria-action"
     data-action="do-something"
     data-params="foo=bar&bla=bla">
        <!--- ... --->
 </div>




41
Обработчик

 $('body')
    .delegate(
      '.daria-action',
      'click',
      function(e) {
        var $target = $(e.currentTarget);
        var action = $target.data('action');
        var rawParams = $target.data('params');
        var params = parseParams(rawParams);
        Daria.Actions.run(action, params);
      }
 );
42
Как поддерживать
актуальное состояние ящика?



43
WebSocket/Server-Sent Events

• Постоянное соединение, обмен данными через
  простое API

• WebSocket: Chrome 4+, Firefox 6+, Safari 5+ (>60%).

• Server-Sent Events: Opera 11+ (>20%)

• Для остальных (IE) flash-websocket или ajax long-
  polling


44
Обновление состояния

• На каждое изменение ящика в WebSocket
  приходит json-сообщение

• Оно запускает свой acton, который обновляет xml-
  данные и запускает Run

• В каждом сообщении есть специальное поле -
  «ревизия ящика», чтобы мы понимали, что
  разъехались


45
Сборка проекта




46
Сборка файлов

• Делаем фейковые файлы .css, .js, .xsl

• CSS: @import url('fle.css')

• JS: include('fle.js')

• XSL: <xsl:include href="fle.xsl"/>

• На выходе получаем автоматически склеенные
  файлы

47
Локализация

• Размечаем xsl и js специальными функциями
  i18n('key')

• При сборке эти функции раскрываются в
  настоящие тексты

• Браузер загружает уже локализованные файлы




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

aandrosov@yandex-team.ru

@doochik

More Related Content

What's hot

JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
Приложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefestПриложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefestActis Wunderman
 
Егор Львовский — «Кеширование на клиенте и сервере»
Егор Львовский — «Кеширование на клиенте и сервере»Егор Львовский — «Кеширование на клиенте и сервере»
Егор Львовский — «Кеширование на клиенте и сервере»Yandex
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работыPaul Stashevsky
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работыPaul Stashevsky
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQLNoveo
 
работа с сетью
работа с сетьюработа с сетью
работа с сетьюNoveo
 
Mihail davidov js-ajax
Mihail davidov js-ajaxMihail davidov js-ajax
Mihail davidov js-ajaxYandex
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript ApplicationMikhail Davydov
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7Technopark
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3Technopark
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptAlexey Ivanov
 
Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"Yandex
 
Михаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьМихаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьYandex
 
Web осень 2013 лекция 4
Web осень 2013 лекция 4Web осень 2013 лекция 4
Web осень 2013 лекция 4Technopark
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8Technopark
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseCocoaHeads
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9Technopark
 

What's hot (20)

JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
Приложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefestПриложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefest
 
Егор Львовский — «Кеширование на клиенте и сервере»
Егор Львовский — «Кеширование на клиенте и сервере»Егор Львовский — «Кеширование на клиенте и сервере»
Егор Львовский — «Кеширование на клиенте и сервере»
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работы
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работы
 
2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
работа с сетью
работа с сетьюработа с сетью
работа с сетью
 
Mihail davidov js-ajax
Mihail davidov js-ajaxMihail davidov js-ajax
Mihail davidov js-ajax
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript Application
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
 
Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"
 
Михаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьМихаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: Асинхронность
 
Web осень 2013 лекция 4
Web осень 2013 лекция 4Web осень 2013 лекция 4
Web осень 2013 лекция 4
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
 

Viewers also liked

Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени. beshkenadze
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.Alexander Frolov
 
Real-Time Web: Consumers and Brands
Real-Time Web: Consumers and BrandsReal-Time Web: Consumers and Brands
Real-Time Web: Consumers and BrandsSasha Kovaliov
 
Алексей Андросов "HTML5 в Я.Почте (WebSocket, localStorage, Cross-site XHR)"
Алексей Андросов "HTML5 в Я.Почте (WebSocket, localStorage, Cross-site XHR)"Алексей Андросов "HTML5 в Я.Почте (WebSocket, localStorage, Cross-site XHR)"
Алексей Андросов "HTML5 в Я.Почте (WebSocket, localStorage, Cross-site XHR)"Yandex
 
WebSockets
WebSocketsWebSockets
WebSocketsplusnin
 
Do the Software Architects get the Needed Support for the job They Perform?
Do the Software Architects get the Needed Support for the job They Perform?Do the Software Architects get the Needed Support for the job They Perform?
Do the Software Architects get the Needed Support for the job They Perform?Kresimir Popovic
 

Viewers also liked (8)

Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
 
Real-Time Web: Consumers and Brands
Real-Time Web: Consumers and BrandsReal-Time Web: Consumers and Brands
Real-Time Web: Consumers and Brands
 
HTML5 WebSockets and WebWorkers
HTML5 WebSockets and WebWorkersHTML5 WebSockets and WebWorkers
HTML5 WebSockets and WebWorkers
 
Алексей Андросов "HTML5 в Я.Почте (WebSocket, localStorage, Cross-site XHR)"
Алексей Андросов "HTML5 в Я.Почте (WebSocket, localStorage, Cross-site XHR)"Алексей Андросов "HTML5 в Я.Почте (WebSocket, localStorage, Cross-site XHR)"
Алексей Андросов "HTML5 в Я.Почте (WebSocket, localStorage, Cross-site XHR)"
 
WebSockets
WebSocketsWebSockets
WebSockets
 
Do the Software Architects get the Needed Support for the job They Perform?
Do the Software Architects get the Needed Support for the job They Perform?Do the Software Architects get the Needed Support for the job They Perform?
Do the Software Architects get the Needed Support for the job They Perform?
 
Joel Roberts
Joel RobertsJoel Roberts
Joel Roberts
 

Similar to Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"

Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеAlexey Androsov
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEBAlexandre Kalendarev
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...Ontico
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXMLSlach
 
LDAP in infrastructure (RootConf 2009)
LDAP in infrastructure (RootConf 2009)LDAP in infrastructure (RootConf 2009)
LDAP in infrastructure (RootConf 2009)Sergey Skvortsov
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингTimophy Chaptykov
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозитElena Kotina
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)Noveo
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Andrew Mayorov
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 
Телепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup MinskТелепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup MinskMODX Беларусь
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularizationIvan Krylov
 
МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3Dima Dzuba
 
LvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.jsLvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.jsMax Klymyshyn
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow Vadim Nesterov
 
Ajax and Transports (in russian)
Ajax and Transports (in russian)Ajax and Transports (in russian)
Ajax and Transports (in russian)Mikhail Davydov
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipesAlexey Ermakov
 

Similar to Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть" (20)

Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXML
 
LDAP in infrastructure (RootConf 2009)
LDAP in infrastructure (RootConf 2009)LDAP in infrastructure (RootConf 2009)
LDAP in infrastructure (RootConf 2009)
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендеринг
 
PHP daemons into social games
PHP daemons into social gamesPHP daemons into social games
PHP daemons into social games
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Телепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup MinskТелепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup Minsk
 
Cassandra db
Cassandra dbCassandra db
Cassandra db
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularization
 
PowerShell
PowerShellPowerShell
PowerShell
 
МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3
 
LvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.jsLvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.js
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
 
Ajax and Transports (in russian)
Ajax and Transports (in russian)Ajax and Transports (in russian)
Ajax and Transports (in russian)
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 

More from 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
 

More from Yandex (20)

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

Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"

  • 1. Яндекс.Почта: архитектура фронтенда как она есть Алексей Андросов Старший разработчик интерфейсов Я.Субботник, Челябинск, 25 февраля 2012 года
  • 2. Знакомтесь! Меня зовут Дарья. Я — почта. Меня зовут Джейн. Я — платформа. 2
  • 3. 3
  • 4. Изнутри • Единый код для всех доменов (mail.yandex.by/.com/.com.tr/.kz/.ru/.ua), ПДД (pdd.yandex.ru) и корпоративной почты mail.yandex-team.ru • Единая платформа и фреймворк для создания приложений в интерфейсе Почты • Формат данных — XML • Шаблонизатор в браузере — XSL 4
  • 6. Почему XSL???77 • Поддерживается всеми современными браузерами • XSL — «идеальный» шаблонизатор: простой, понятный, гибкий и выразительный язык • Прозрачное и удобное управление процессом выполнения, в итоге один xsl накладывается на любые данные 6
  • 8. 8
  • 9. А как понять что загрузить, а что перерисовать? 9
  • 10. 10
  • 11. Главные действующие лица: • Handler (model) • Block (view) • Run (block controller) 11
  • 13. Block Элемент интерфейса • Мета-описание блока (тип, зависимость от данных, внутренние блоки) • Хранит у себя html-блоки по ключу (склеенные ключи от хендлеров) • Состоит из js-описания и xsl-шаблона • Есть события: init, show, hide, destroy, … • Блоки на странице выстраиваются в дерево 13
  • 14. Block Jane.Block.add({ name: 'message', handlers: ['message', 'settings'], blocks: ['msg-body', 'msg-nearest'], constructor: MsgBlockClass, box: false, lazy: false }); 14
  • 15. Run, Forest! Run! Run — контроллер блоков • Проходит по дереву блоков, определяет, какие блоки надо показать, скрыть, перерисовать или создать заново • Определяет, есть ли все необходимые данные на клиенте. Если чего-то нет, делает запрос на сервер • Накладывает xsl-шаблон и вставляет получившиеся html-ноды на страницу 15
  • 16. 16
  • 17. 17
  • 18. 18
  • 19. 19
  • 20. 20
  • 21. 21
  • 22. 22
  • 23. 23
  • 24. 24
  • 25. Теперь мы знаем: • Список данных (хендлеров), которые надо запросить • Параметры, с которыми их надо запрашивать • Информацию обо всех изменяемых блоках 25
  • 27. Handler Хранит атомарные данные • Мета-описание: откуда и как забирать данные (fle, http, wmi) • Хранит у себя xml-данные по ключу (GET- параметры) • Может делать пост-обработку • Может предоставлять высокоуровневые методы доступа к данным 27
  • 28. Handler new Jane.Handler('message', { params: { ids: true } }); 28
  • 29. 29
  • 30. Вот так выглядит запрос /handlers.jsx? _handlers=message,message-body& ids=1234567890 /handlers.jsx? _handlers.0=message& ids=1234567890& _handlers.1=message& ids=1234567891 30
  • 31. А вот так ответ <handlers> <handler name=”message” key=”_h=message&ids=12345”> <!-- данные --> </handler> <handler name="message" key="_h=message&ids=12346"> <!-- данные --> </handler> </handlers> 31
  • 33. Склеиваем все в один XML <page> <page-blocks> <app> <left-box> <...> </left-box> <right-box> <...> </right-box> </app> </page-blocks> <...данные для блоков...> <...данные для блоков...> </page> 33
  • 34. Что дальше? • Накладываем XSL • Получаем HTML-ноды, вставлем их в DOM • Скрываем старые блоки, вставляем новые • Триггерим события (init, destroy, show, hide, repaint) на блоках 34
  • 36. Платформа для ajax- приложений • Проект добавляет в платформу файл, который отвечает на два вопроса: откуда его грузить и по какому урлу (хешу) открывать • Проект описывает свое приложение в терминах handler-block и включает его в состав почты • Все :) Дальше платформа все сделает сама 36
  • 39. Acton Обработчик onclick'ов :) • Все обработчики (click, submit, hover) событий делегированы на document • Имеет имя, по которому его можно вызвать • Обычно делает что-то с данными и запускает Run • Любая нода с классом daria-acton может вызвать acton. Имя берется из атрибутов 39
  • 40. Как выглядит acton? new Daria.Action( 'do-something', function(event){ // код обработчика } ); 40
  • 41. Как это выглядит в HTML? <div class="daria-action" data-action="do-something" data-params="foo=bar&bla=bla"> <!--- ... ---> </div> 41
  • 42. Обработчик $('body') .delegate( '.daria-action', 'click', function(e) { var $target = $(e.currentTarget); var action = $target.data('action'); var rawParams = $target.data('params'); var params = parseParams(rawParams); Daria.Actions.run(action, params); } ); 42
  • 44. WebSocket/Server-Sent Events • Постоянное соединение, обмен данными через простое API • WebSocket: Chrome 4+, Firefox 6+, Safari 5+ (>60%). • Server-Sent Events: Opera 11+ (>20%) • Для остальных (IE) flash-websocket или ajax long- polling 44
  • 45. Обновление состояния • На каждое изменение ящика в WebSocket приходит json-сообщение • Оно запускает свой acton, который обновляет xml- данные и запускает Run • В каждом сообщении есть специальное поле - «ревизия ящика», чтобы мы понимали, что разъехались 45
  • 47. Сборка файлов • Делаем фейковые файлы .css, .js, .xsl • CSS: @import url('fle.css') • JS: include('fle.js') • XSL: <xsl:include href="fle.xsl"/> • На выходе получаем автоматически склеенные файлы 47
  • 48. Локализация • Размечаем xsl и js специальными функциями i18n('key') • При сборке эти функции раскрываются в настоящие тексты • Браузер загружает уже локализованные файлы 48
  • 49. Алексей Андросов Старший разработчик интерфейсов aandrosov@yandex-team.ru @doochik