SlideShare a Scribd company logo
КРОССПЛАТФОРМЕННЫЕ
ВЕБ-ПРИЛОЖЕНИЯ
Масштабируемые
Илья	
  Пухальский,
EPAM	
  Systems
КРОССПЛАТФОРМЕННЫЕ
ВЕБ-ПРИЛОЖЕНИЯ
Масштабируемые
Илья	
  Пухальский,
EPAM	
  Systems
@witchfinderx
2
Илья Пухальский,
EPAM Mobile Competency Center
На повестке дня
3
1. Ситуация в вебе на сегодняшний день
2. Почему отзывчивый веб-дизайн не панацея
3. Веб-приложения?
4. Задача и проблемы существующих решений
5. Идея и реализация
6. Возможные дополнения к реализации
4
Что происходит?
5
6
IBM 7094, 1966 год
0.122 Мб, 3 134 500 $,
вес около тонны,
вычислительная мощность микроволновки
7
iPhone, первое поколение
128 Мб, 399 $,
135 грамм,
вычислительная мощность NASA начала 70-х
8
+4% +52% +138% -12%
NetBiscuits latest Web Trends Report
Мобильный трафик
(ИЮЛЬ 2012 - ЯНВАРЬ 2013)
Смартфоны Планшетные
компьютеры
Smart TV, приставки Мобильные
телефоны
9
10
7%
3%
5%
8%
13%
27%
37%
Android iOS
Series 40 Symbian
Samsung Bada BlackBerry OS
Other
StatCounter Global Stats
Мобильные ОС
(МАРТ 2013)
11
The Many Faces of Little Green Robot
Несколько фактов об Android
12
The Many Faces of Little Green Robot
Несколько фактов об iOS
13
Что общего у всех устройств?
The Simpsons: Tapped Out Game
14
Отзывчивый веб-дизайн?
15
16
Проблемы с адаптацией макета страницы
1. Изображения
2. Навигация
3. Таблицы
4. Аудио и видео
5. Ваш вариант
17
Загрузка ненужных данных
18
"Если твой вебсайт размером 15 Мб,
"то это не HTML5, это глупость."
— Кристиан Хейлман
19
Проблемы опыта взаимодействия
от контекста до персонализации
20
Проблема адаптации
предоставляемого устройству
контента
21
"Отзывчивый вебсайт
по умолчанию не адаптирован
под конкретные мобильные устройства."
— Jon Arne Sæterås
22
"Отзывчивый вебсайт
по умолчанию не адаптирован
под конкретные устройства.
23
24
Отзывчивый веб-дизайн — это компромисс
25
Не работает для веб-приложений*
Веб-приложения?
26
27
?
28
!=
Tasks-driven Content-driven
Задача
29
Веб-приложение, работающее на максимальном
количестве платформ и браузеров
1. Возможность предоставлять разный контент и
функционал для различных устройств, групп и типов
устройств
2. Нужный уровень опыта взаимодействия для разных
типов устройств
3. Повтороное использование кода
30
Проблемы существующих решений
31
32
+
...
Что необходимо?
33
Масштабируемая архитектура приложения
1. Модульность; бибиотека реиспользуемых компонентов
2. Асинхронная загрузка компонентов
3. Набор готовых элементов интерфейса
4. Гибкий уровень представления для различных flow
5. Поддержка тач-событий, gestures и D-pad, а также
других возможностей устройств; анимации; утилиты
34
Идея
35
36
Desktop(
/index.html(
((Page(#1(
Component(#1( Component(#2(
Component(#3(
Component(#4(
Tablet'
/index.html'
''Page'#1'
Component'
#1'
Component'#2'
Component'#3'
''Page'#2'
Component'
#1'
Component'#2'
Component'#4'
Mobile'phone'
/index.html'
''Page'#1'
Component'#1'
Component'#2'
''Page'#2' ''Page'#3'
Component'#1'
Component'#3'
Component'#1'
Component'#4'
Магия*
39
*механика работы
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
index.html!
Root component!
Component #3!
Component #4!
Component #2!
Component #1!
Component #3!
Component #4!
Component #2!
Component #1!
!
Component #4!
Component #2!
!
Component #1!
Component #3!
tmpl/mobile/* tmpl/desktop/*
tmpl/tablet/*
42
Ядро
+ хелперы и утилиты
Модули / компоненты
+ библиотека переиспользуемых компонентов
Элементы интерфейса
+ набор готовых элементов интерфейса
Ядро
и вспомогательные "компоненты"
43
44
Из чего состоит?
1. Загрузчик и регистратор компонентов
2. Описание интерфейса компонента, модели, представления
3. Роутинг и история
4. Страницы, навигация между страницами*
5. Механизм кеширования
6. Анимации, поддержка тач-событий, утилиты и хелперы
45
Разметка компонентов
<div data-id="app-smart-component"
data-component="smart-component">
! <script>
! ! APP.setOptionsByID(
! ! ! 'app-smart-component',
! ! ! {
! ! ! ! prop: 'value'
! ! ! }
! ! );
! </script>
</div>
46
Хаки JQuery / Zepto
var _oldshow = $.fn.show;
!
$.fn.show = function(speed, callback) {
! ! var res = _oldshow.apply(this,arguments);
! ! $(this).trigger('APP:show');
! ! return res;
};
Компоненты
47
48
Компонент
Модель Представление
Компонент
Модель
Получение и хранение данных и предыдущих
значений
— Оповещение об изменении
— Синхронизация с сервером
— Настройки получения данных
49
Представление
Хранение, компиляция и рендеринг шаблона
— DOM-манипуляции
— Автоматическое обновление после изменения данных
50
51
Компонент == Виджет
Элементы интерфейса
52
53
Компонент? Элемент интерфейса?
Компонент
Элемент интерфейса
54
Подход к созданию элементов интерфейса
<label for="wifi-switch">Wi-Fi Switch</label>
<input type="checkbox" data-role="switch" id="wifi-switch" />
55
Подход к созданию элементов интерфейса
<div class="app-switch">
! <label class="app-switch-control" for="wifi-switch">
! ! <input type="radio" name="wifi-switch" id="wifi-switch">
! ! <span class="app-switch-track">
! ! ! <span class="app-switch-track-wrap">
! ! ! ! <span class="app-switch-thumb"></span>
! ! ! </span>
! ! </span>
! </label>
! <label class="app-switch-label" for="wifi-switch">Wi-Fi Switch</label>
</div>
Страницы и роутинг
56
57
Автороутинг
APP.start({
settings: {
// ...
},
router: {
routes: {
'/': 'home'
},
handlers: {
home: function () {
// ...
}
}
}
});
<div data-page="home">
<!-- HTML, компоненты,
элементы интерфейса -->
</div>
58
Анимация переключения страниц
1. СSS трансформации
2. JavaScript
3. Трюки (фиксированная высота, translateZ, backface-visibility)
4. # и History API
...различаются в зависимости от типа устройства.
Утилиты и хелперы
59
60
Кеширование
1. Нескомпилированные шаблоны и определение
компонентов храним в localStorage
2. При смене версии приложения обновляем кеш
3. Крем из manifest добавить по вкусу
61
Прозрачная поддержка различных способов ввода...
...единое событие — "tap".
1. FastClick от Financial Times Labs
62
63
Области с прокруткой...
CSS трансформации + JavaScript.
1. iScroll 4 от Cubiq
2. FTScroller от Financial Times Labs
64
Мелочи
1. Скрытие адресной строки на смартфонах
2. Информация об устройстве
3. Дебаггер
Механизмы общения
65
Событийно-ориентированное
программирование
66
67
События
1. Глобальный контроллер событий
2. События используются на различных уровнях
приложения (глобальный, модульный, модель,
предствление, страница)
68
Функции обратного вызова и хуки
1. Все функции обратного вызова заменяем на события
(постояноство и логичность)
2. Хуки используем для асинхронных публичных
методов везде, где это возможно и необходимо
Вариации
69
Определение возможностей и
браузера устройства на сервере
70
Твой браузер
тебе лжет
71
Определение возможностей устройства — хорошо,
определение браузера — необходимое зло
72
73
21
"Чем более опытен мобильный веб-разработчик,
тем больше он полагается на определение браузера
и возможностей устройства на сервере."
— PPK в "The Mobile Book"
74
Библиотеки определения устройств
1. WURFL
2. WURFL Cloud от Scientia Mobile
3. OpenDDR*
4. Device Atlas
5. 51 Degrees
Шаблонизация на сервере
75
76
Кеширование
1. Используем тот же шаблонизатор на сервере
2. Передаем готовый HTML вместо шаблона
3. Вместо JSON-данных получаем также готовый HTML
4. Представление компонента используем только для
привязки к DOM (DOM-binding)
Вопросы?
77
Вопросы?
77
@witchfinderx
78
@witchfinderx
78

More Related Content

PDF
Город как сервис: как проектировать новый опыт жизни
PDF
Smart cities by Microsoft 2012 (Rus)
PPT
Мобильные рабочие места в корпоративном ландшафте - ЦКМ АйТи
PDF
Анатолий Сергеев "A/B тестирование как способ повышения конверсии. Тонкости и...
PDF
Ритейл на ладони (мобильные приложения в жизни ритейла) - Журнал "Мое дело. ...
PPTX
Nectarin Digital Digest №2
PDF
Как провести A/B тестирование скриншотов и иконок для App Store и Google Play
PDF
TargetSummit Berlin - Splitmetrics Eugene Nevgen
Город как сервис: как проектировать новый опыт жизни
Smart cities by Microsoft 2012 (Rus)
Мобильные рабочие места в корпоративном ландшафте - ЦКМ АйТи
Анатолий Сергеев "A/B тестирование как способ повышения конверсии. Тонкости и...
Ритейл на ладони (мобильные приложения в жизни ритейла) - Журнал "Мое дело. ...
Nectarin Digital Digest №2
Как провести A/B тестирование скриншотов и иконок для App Store и Google Play
TargetSummit Berlin - Splitmetrics Eugene Nevgen

Viewers also liked (16)

PPTX
Как сделать ваш продукт красивым без дизайнера
PDF
Мобильные рабочие места в корпоративном ландшафте
PDF
Маркетинг: basics concepts. Оксана Князева
PDF
Мобильные приложения в экосистеме открытых данных (RIW 2013)
PPT
PandaDoc TNW
PPT
Есть ли жизнь после релиза мобильного приложения?
PDF
Главные принципы A/B тестирования (Александр Шуркаев)
PDF
МаеСэнс
PPTX
User eXperience в разработке мобильных приложений
PPTX
Елена Локтева, «Инфопарк»
PPT
Валерий Прытков, декан факультета КСиС, БГУИР
PDF
Аналитика мобильного проекта — проверяй и доверяй / Александр Лукин (Yandex A...
PDF
Мобильное тестирование UX:
 взгляд извне. Янина Мичукова
Как сделать ваш продукт красивым без дизайнера
Мобильные рабочие места в корпоративном ландшафте
Маркетинг: basics concepts. Оксана Князева
Мобильные приложения в экосистеме открытых данных (RIW 2013)
PandaDoc TNW
Есть ли жизнь после релиза мобильного приложения?
Главные принципы A/B тестирования (Александр Шуркаев)
МаеСэнс
User eXperience в разработке мобильных приложений
Елена Локтева, «Инфопарк»
Валерий Прытков, декан факультета КСиС, БГУИР
Аналитика мобильного проекта — проверяй и доверяй / Александр Лукин (Yandex A...
Мобильное тестирование UX:
 взгляд извне. Янина Мичукова
Ad

Similar to Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam) (20)

PDF
Mobile web apps
PDF
di.by 2014 e-commerce mobile: как подружить интернет-магазин с мобильными уст...
PDF
di.by 2014 e-commerce mobile: как подружить интернет-магазин с мобильными уст...
PDF
C# Web. Занятие 11.
PDF
Meet Magento Belarus 2015: Denis Bosak
PDF
Разработка мобильных приложений на HTML5
PDF
Оноприенко Алла: "Один дизайн для всего"
PDF
Изоморфный JavaScript — будущее уже здесь
PPT
DUMP-2012 - Проектирование интерфейсов - "Проектирование интерфейсов для моби...
PDF
Мой опыт проектирования мобильных интерфейсов (DUMP-IT, Екатеринбург, 25 мая ...
PDF
Создание веб-ресурса: задачи, процесс, коммуникации, результат
PPT
Mobile web development
PDF
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
PDF
Кир Белевич, Сергей Горобцов: "Touch it: новое мобильное направление веб-разр...
PPT
Вебинар "Оптимизация производительности мобильных веб-приложений"
PDF
Павел Юрийчук - Разработка приложений под мобильные браузеры
PPTX
Мировые информационные ресурсы. Лекция 2
PPTX
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
PPTX
Мобильная версия E96. Взгляд менеджера и взгляд разработчика (Версия для #ose...
PDF
2013 Web Trends in Digital Design
Mobile web apps
di.by 2014 e-commerce mobile: как подружить интернет-магазин с мобильными уст...
di.by 2014 e-commerce mobile: как подружить интернет-магазин с мобильными уст...
C# Web. Занятие 11.
Meet Magento Belarus 2015: Denis Bosak
Разработка мобильных приложений на HTML5
Оноприенко Алла: "Один дизайн для всего"
Изоморфный JavaScript — будущее уже здесь
DUMP-2012 - Проектирование интерфейсов - "Проектирование интерфейсов для моби...
Мой опыт проектирования мобильных интерфейсов (DUMP-IT, Екатеринбург, 25 мая ...
Создание веб-ресурса: задачи, процесс, коммуникации, результат
Mobile web development
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Кир Белевич, Сергей Горобцов: "Touch it: новое мобильное направление веб-разр...
Вебинар "Оптимизация производительности мобильных веб-приложений"
Павел Юрийчук - Разработка приложений под мобильные браузеры
Мировые информационные ресурсы. Лекция 2
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
Мобильная версия E96. Взгляд менеджера и взгляд разработчика (Версия для #ose...
2013 Web Trends in Digital Design
Ad

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...

Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)