SlideShare una empresa de Scribd logo
1 de 23
Разработка сложного
  мультимедийного приложения на
JavaScript+HTML5 и PhoneGap для iPad
            Олег Неклюдов
Цель доклада (о чем доклад?)
• Опыт HTML+PhoneGap для iPad
• Проблемы и решения
• Выбор технологии
Журнал для iPad
    2
1
        3
            4   5   6   7
Постановка задачи
• Листание пальцем
• Интерактивный контент, аудио/видео
• Навигация по журналу
• Витрина журналов, скачивание и offline
• XML-формат верстки журналов
• (то есть аналог Adobe Digital Publishing Suite)
Выбор способа реализации
• Flash
   – Есть технология Flash -> iOS
   – Попробовали – тормозит –> не подходит
• iOS
   – Отсутствуют ресурсы (разработчики) -> не подходит
• PhoneGap
   – Есть значительный опыт JavaScript(GWT)+HTML+CSS
   – Провели эксперимент – хорошие результаты -> БЕРЕМ В РАБОТУ
Архитектура
•   PhoneGap
•   Google Web Toolkit (Java->JavaScript)
•   HTML5+CSS3
•   Webkit (Chrome, iOS)
Проблемы и решения
1. Листание страниц
• Плавное листание страниц (нагруженных графикой) – это
  самое главное
• Стандартные JS/CSS способы не подходят – листание
  происходит рывками
• РЕШЕНИЕ (CSS3, hardware-accelerated):
   -webkit-transition-property: -webkit-transform;
   -webkit-transform: translate3d(x,y,z) (в JavaScript: WebKitCSSMatrix)
2. Кэширование изображений
• ПРОБЛЕМА:
  – При увеличении количества картинок в журнале
    приложение вылетает на iPad по памяти
• РЕШЕНИЕ:
  – Реализуем специальную логику «обнуления»
     <img src=“empty.gif”>
  (в одной из промежуточных версий iOS не работает)
3. Большие размеры
• ПРОБЛЕМА:
  – При увеличении «физических» размеров DOM-дерева
    журнала приложение вылетает на iPad (молча)
• РЕШЕНИЕ:
  – Переделываем логику движка листания: статическое
    DOM-дерево заменяем динамическим построением
    (при смене страниц)
4. ChildBrowser plugin
• ЗАДАЧА:
  – Показывать HTML-страницы по ссылкам
• РЕШЕНИЕ:
  – Используем PhoneGap-плагин ChildBrowser
• ДОПОЛНИТЕЛЬНАЯ ПРОБЛЕМА (не решена):
  – В последних версиях iOS при открытом ChildBrowser не
    отслеживается изменение ориентации окна
5. Загрузка и хранение контента
• ЗАДАЧА:
  – Требуется загружать, хранить и использовать локально
    данные и файлы с контентом
• ПРОБЛЕМЫ:
  – HTML5 offline cache – отсутствует у PhoneGap-приложения
  – В PhoneGap отсутствуют «стандартные» средства загрузки файлов
    из интернета (с сохранением файлов локально)
6. Загрузка и хранение контента
• РЕШЕНИЕ:
  – Для загрузки файлов находим PixFileDownload плагин и
    докручиваем его сами (чтобы заработал на новом PG)
  – Доступ к сохраненным файлам имеем через PhoneGap
    File API, а также работают ссылки из HTML
  – Для данных используем HTML5 LocalStorage
  – Реализовали свой менеджер закачек на GWT/JavaScript
7. По мелочам
• Мелкие отличия в работе DOM-событий в Chrome и iPad
• Успешно использованы несколько CSS3-эффектов в
  элементах журнала
• Успешно использован сторонний компонент iScroll для
  организации скроллинга (в дополнение к GWT-
  компоненту)
• Осталась нерешенная проблема с включением в страницы
  журнала «внешнего» HTML
Итоги и выводы
Итог разработки (326 часов)
• Мы получили работающий движок, на котором
  можно делать журналы (и другие продукты)
• В планах
  – Расширение функционала (например, InAppPurchase)
  – Портирование на Android
Пример журнала
WOW Magazine for iPad
[http://goo.gl/JCmXy]
191 Мб
Модульная структура
• Core – модуль абстрактной листалки
• Engine – XML-движок
• Mag – навигация по журналу
• Shell – оболочка с витриной и загрузкой файлов
• Модульная структура позволяет легко
  переиспользовать отдельные компоненты
Портирование на Android
• Еще только предстоит
• Возможные проблемы и трудности:
  – Плавное листание
  – Загрузка и хранение файлов
  – Разные размеры экрана
Процесс разработки
• Движок
  – Основная разработка на Windows + Chrome
  – Финальная отладка на Маке в эмуляторе и iPad’e
• Журнал
  – Верстальщик руками верстает XML
  – Смотрит, что получается на Маке в эмуляторе iPad
Выводы
• Можно ли использовать PhoneGap-подход?
  – ДА
• Стоит ли использовать PhoneGap-подход?
  – ПО СИТУАЦИИ
Используем PhoneGap
•   Есть опыт в HTML/CSS/JavaScript
•   Готовы на компромиссы
•   Переиспользование в веб
•   Относительная кроссплатформенность
Спасибо!

    ВОПРОСЫ?

    Олег Неклюдов
oleg.nekludov@gmail.com

Más contenido relacionado

La actualidad más candente

От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
Ontico
 
Frontend в режиме реального времени [05.03.15]
Frontend в режиме реального времени [05.03.15]Frontend в режиме реального времени [05.03.15]
Frontend в режиме реального времени [05.03.15]
GoIT
 
Сервисы Google в образовании
Сервисы Google в образованииСервисы Google в образовании
Сервисы Google в образовании
whatsab
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
MoscowJS
 

La actualidad más candente (20)

Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.
 
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
 
Alex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projectsAlex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projects
 
Отполифиль свой CSS - MinskCSS 2
Отполифиль свой CSS - MinskCSS 2Отполифиль свой CSS - MinskCSS 2
Отполифиль свой CSS - MinskCSS 2
 
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
 
Сборка Front-end’a
Сборка Front-end’aСборка Front-end’a
Сборка Front-end’a
 
Frontend в режиме реального времени [05.03.15]
Frontend в режиме реального времени [05.03.15]Frontend в режиме реального времени [05.03.15]
Frontend в режиме реального времени [05.03.15]
 
1 2 2_1_c-bitrix_kuleshov
1 2 2_1_c-bitrix_kuleshov1 2 2_1_c-bitrix_kuleshov
1 2 2_1_c-bitrix_kuleshov
 
Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и...
Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и...Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и...
Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и...
 
Веб-компоненты в веб-разработке на примере Polymer
Веб-компоненты в веб-разработке на примере PolymerВеб-компоненты в веб-разработке на примере Polymer
Веб-компоненты в веб-разработке на примере Polymer
 
Сервисы Google в образовании
Сервисы Google в образованииСервисы Google в образовании
Сервисы Google в образовании
 
Kosmodemiansky wr 2013
Kosmodemiansky wr 2013Kosmodemiansky wr 2013
Kosmodemiansky wr 2013
 
Pgconfru 2015 kosmodemiansky
Pgconfru 2015 kosmodemianskyPgconfru 2015 kosmodemiansky
Pgconfru 2015 kosmodemiansky
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
 
Презентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начатьПрезентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начать
 
WepPerfomance,
WepPerfomance, WepPerfomance,
WepPerfomance,
 
Mobile Web Apps development essentials
Mobile Web Apps development essentialsMobile Web Apps development essentials
Mobile Web Apps development essentials
 
DrupalCafe #2: Константин Комелин - Быстрый старт для новичка в Drupal
DrupalCafe #2: Константин Комелин - Быстрый старт для новичка в DrupalDrupalCafe #2: Константин Комелин - Быстрый старт для новичка в Drupal
DrupalCafe #2: Константин Комелин - Быстрый старт для новичка в Drupal
 
Веб-компоненты в веб-разработке на примере Polymer (​Артур Дробинский)
Веб-компоненты в веб-разработке на примере Polymer (​Артур Дробинский)Веб-компоненты в веб-разработке на примере Polymer (​Артур Дробинский)
Веб-компоненты в веб-разработке на примере Polymer (​Артур Дробинский)
 

Similar a Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap для iPad (Олег Неклюдов)

Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
Alex Tumanoff
 
Павел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыПавел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузеры
UA Mobile
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложений
Media Gorod
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
Alex Chistyakov
 
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор БогатырёвОбзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
Minsk PHP User Group
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилище
it-people
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest
 
Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.
DrupalForumZP2012
 
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВРАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
Pavel Tsukanov
 

Similar a Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap для iPad (Олег Неклюдов) (20)

Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  МоскалёвПереводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван Москалёв
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
 
Павел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыПавел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузеры
 
Drupal Vs Other
Drupal Vs OtherDrupal Vs Other
Drupal Vs Other
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложений
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
A.pleshkov
A.pleshkovA.pleshkov
A.pleshkov
 
Sky-Dep
Sky-DepSky-Dep
Sky-Dep
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
 
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор БогатырёвОбзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
 
Как разраба
Как разрабаКак разраба
Как разраба
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилище
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается Yii
 
Gitlab devconf
Gitlab devconfGitlab devconf
Gitlab devconf
 
Mobile web apps
Mobile web appsMobile web apps
Mobile web apps
 
Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.
 
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВРАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
 
Phalcon. Что нового?
Phalcon. Что нового?Phalcon. Что нового?
Phalcon. Что нового?
 

Más de Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

Más de Ontico (20)

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

Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap для iPad (Олег Неклюдов)

  • 1. Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap для iPad Олег Неклюдов
  • 2. Цель доклада (о чем доклад?) • Опыт HTML+PhoneGap для iPad • Проблемы и решения • Выбор технологии
  • 3. Журнал для iPad 2 1 3 4 5 6 7
  • 4. Постановка задачи • Листание пальцем • Интерактивный контент, аудио/видео • Навигация по журналу • Витрина журналов, скачивание и offline • XML-формат верстки журналов • (то есть аналог Adobe Digital Publishing Suite)
  • 5. Выбор способа реализации • Flash – Есть технология Flash -> iOS – Попробовали – тормозит –> не подходит • iOS – Отсутствуют ресурсы (разработчики) -> не подходит • PhoneGap – Есть значительный опыт JavaScript(GWT)+HTML+CSS – Провели эксперимент – хорошие результаты -> БЕРЕМ В РАБОТУ
  • 6. Архитектура • PhoneGap • Google Web Toolkit (Java->JavaScript) • HTML5+CSS3 • Webkit (Chrome, iOS)
  • 8. 1. Листание страниц • Плавное листание страниц (нагруженных графикой) – это самое главное • Стандартные JS/CSS способы не подходят – листание происходит рывками • РЕШЕНИЕ (CSS3, hardware-accelerated): -webkit-transition-property: -webkit-transform; -webkit-transform: translate3d(x,y,z) (в JavaScript: WebKitCSSMatrix)
  • 9. 2. Кэширование изображений • ПРОБЛЕМА: – При увеличении количества картинок в журнале приложение вылетает на iPad по памяти • РЕШЕНИЕ: – Реализуем специальную логику «обнуления» <img src=“empty.gif”> (в одной из промежуточных версий iOS не работает)
  • 10. 3. Большие размеры • ПРОБЛЕМА: – При увеличении «физических» размеров DOM-дерева журнала приложение вылетает на iPad (молча) • РЕШЕНИЕ: – Переделываем логику движка листания: статическое DOM-дерево заменяем динамическим построением (при смене страниц)
  • 11. 4. ChildBrowser plugin • ЗАДАЧА: – Показывать HTML-страницы по ссылкам • РЕШЕНИЕ: – Используем PhoneGap-плагин ChildBrowser • ДОПОЛНИТЕЛЬНАЯ ПРОБЛЕМА (не решена): – В последних версиях iOS при открытом ChildBrowser не отслеживается изменение ориентации окна
  • 12. 5. Загрузка и хранение контента • ЗАДАЧА: – Требуется загружать, хранить и использовать локально данные и файлы с контентом • ПРОБЛЕМЫ: – HTML5 offline cache – отсутствует у PhoneGap-приложения – В PhoneGap отсутствуют «стандартные» средства загрузки файлов из интернета (с сохранением файлов локально)
  • 13. 6. Загрузка и хранение контента • РЕШЕНИЕ: – Для загрузки файлов находим PixFileDownload плагин и докручиваем его сами (чтобы заработал на новом PG) – Доступ к сохраненным файлам имеем через PhoneGap File API, а также работают ссылки из HTML – Для данных используем HTML5 LocalStorage – Реализовали свой менеджер закачек на GWT/JavaScript
  • 14. 7. По мелочам • Мелкие отличия в работе DOM-событий в Chrome и iPad • Успешно использованы несколько CSS3-эффектов в элементах журнала • Успешно использован сторонний компонент iScroll для организации скроллинга (в дополнение к GWT- компоненту) • Осталась нерешенная проблема с включением в страницы журнала «внешнего» HTML
  • 16. Итог разработки (326 часов) • Мы получили работающий движок, на котором можно делать журналы (и другие продукты) • В планах – Расширение функционала (например, InAppPurchase) – Портирование на Android
  • 17. Пример журнала WOW Magazine for iPad [http://goo.gl/JCmXy] 191 Мб
  • 18. Модульная структура • Core – модуль абстрактной листалки • Engine – XML-движок • Mag – навигация по журналу • Shell – оболочка с витриной и загрузкой файлов • Модульная структура позволяет легко переиспользовать отдельные компоненты
  • 19. Портирование на Android • Еще только предстоит • Возможные проблемы и трудности: – Плавное листание – Загрузка и хранение файлов – Разные размеры экрана
  • 20. Процесс разработки • Движок – Основная разработка на Windows + Chrome – Финальная отладка на Маке в эмуляторе и iPad’e • Журнал – Верстальщик руками верстает XML – Смотрит, что получается на Маке в эмуляторе iPad
  • 21. Выводы • Можно ли использовать PhoneGap-подход? – ДА • Стоит ли использовать PhoneGap-подход? – ПО СИТУАЦИИ
  • 22. Используем PhoneGap • Есть опыт в HTML/CSS/JavaScript • Готовы на компромиссы • Переиспользование в веб • Относительная кроссплатформенность
  • 23. Спасибо! ВОПРОСЫ? Олег Неклюдов oleg.nekludov@gmail.com