Алексей Андросов "Архитектура фронтенда...

31
Я.Субботник, Алматы, 15 октября 2011 года Старший разработчик интерфейсов Алексей Андросов Архитектура фронтенда Я.Почты

Upload: yandex

Post on 16-Jun-2015

571 views

Category:

Technology


0 download

DESCRIPTION

15 октября 2011, Я.Субботник в Алматы Алексей Андросов "Архитектура фронтенда Яндекс.Почты" О докладе: Яндекс.Почта сейчас – это большое ajax-приложение. Из доклада вы узнаете, как работает фронтенд почты изнутри, как загружаются данные, обновляется страница и происходит взаимодействие с пользователем, какой мы используем шаблонизатор и почему, как живут самые разные приложения (Яндекс.Подписки, История общения) в рамках одной почтовой платформы.

TRANSCRIPT

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

Я.Субботник, Алматы, 15 октября 2011 года

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

Архитектура фронтенда Я.Почты

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

2

Фронтенд Я.Почты сегодня

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

3

• ~15 млн. посетителей в месяц (~300 тыс. из Казахстана), ~5 млрд. хитов

• Бесшовное ajax-приложение (Почта, Адресная книга, Подписки, Веб-чат)

• Лайт-версия для старых браузеров, мобильная - для всех популярных платформ

• 6 языков интерфейса

Снаружи

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

4

Изнутри

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

Я — платформа.

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

5

• Единый код для всех доменов

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

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

• Шаблонизатор в браузере — xsl

Изнутри

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

6

XSL???

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

7

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

• XSL — «идеальный» шаблонизатор

• Очень гибкий и выразительный язык

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

Почему XSL???77

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

8

Как это работает?

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

9

Общая схема запроса

Запрос данныхДействие

handlers.jsx

WMI HTTP File

Oracle Storage

Frontend-браузер

Backend

Frontend-cерверСерверный JS

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

10

• Handler (model)

• Block (view)

• Action (controller)

+ lazy-загрузчик кода

3 кита фронтеда Я.Почты

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

11

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

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

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

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

Хранит атомарные данныеHanlder

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

12

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

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

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

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

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

Элемент интерфейсаBlock

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

13

• Все обработчики событий делегированы на document

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

• Обычно делает что-то с данными и обновляет блоки

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

Обработчик onclick'ов :)Action

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

14

А как обновляется страница?

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

15

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

16

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

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

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

Run — контроллер блоковRun, Forest! Run!

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

17

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

18

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

19

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

20

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

21

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

22

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

23

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

24

• Запрашиваем данные для новых блоков

• Склеиваем все данные в один xml + добавляем туда информацию о блоках, которые рисуем

• Делаем XSL преобразования

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

Что дальше?

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

25

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

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

26

• Склейка всех проектных xsl, js, css в один файл

• Локализация этих файлов

• Сборка всей мета-информации о хэндлерах в один файл для удобного подключения при запросе данных

Сборка

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

27

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

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

• JS: include('file.js')

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

Склейка

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

28

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

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

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

Локализация

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

29

Что в итоге?

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

30

• Проект добавляет в платформу свой файл, который отвечает на два вопроса: откуда его грузить и по какому урлу его открывать

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

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

Платформа для ajax- приложений

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

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

[email protected]

@doochik

Алексей Андросов