«темная лошадка»

в мире frontend-фрэймворков

Андрей Михайлов
@lolmaus

goo.gl/SWNzUZ

Андрей
Михайлов

@lolmaus

http://lolma.us

  • Шесть лет в вэб-разработке
  • Два года специализируюсь на сложных приложениях на Ember

goo.gl/SWNzUZ

Text

Ember — современный frontend-фрэймворк для разработки амбициозных вэб-приложений

  • Взаимодействует с API
  • Стремится при помощи вэб-технологий составить конкуренцию мобильным приложениям
  • Источник вдохновения для Angular 2
  • Конвенции избавляют от необходимости конфигурировать вручную

Зачем Ember, если

есть React и Angular?

Виды приложений на Ember

в production

BuiltWithEmber.io

Виды приложений на Ember

в production:

  • Интернет-магазины — обычные и необычные, вроде продажи цифрового контента
  • Интерактивные турагенства
  • Бухгалтерии и планировщики расходов
  • Социальные сети
  • Платежные шлюзы и биллинг
  • Трейдинговые площадки

Виды приложений на Ember

в production:

  • Интернет-магазины — обычные и необычные, вроде продажи цифрового контента
  • Интерактивные турагенства
  • Бухгалтерии и планировщики расходов
  • Социальные сети
  • Платежные шлюзы и биллинг
  • Трейдинговые площадки
  • Админки самых разнообразных SaaS’ов
  • Новостные сайты
  • Музыкальные и видеосервисы
  • Тудушечки и планировщики задач, проектов, встреч, проведения планерок, календари
  • Многопользовательские редакторы
  • Органайзеры контента

Виды приложений на Ember

в production:

  • Интернет-магазины — обычные и необычные, вроде продажи цифрового контента
  • Интерактивные турагенства
  • Бухгалтерии и планировщики расходов
  • Социальные сети
  • Платежные шлюзы и биллинг
  • Трейдинговые площадки
  • Админки самых разнообразных SaaS’ов
  • Новостные сайты
  • Музыкальные и видеосервисы
  • Тудушечки и планировщики задач, проектов, встреч, проведения планерок, календари
  • Многопользовательские редакторы
  • Органайзеры контента
  • Вакансии
  • Генераторы CSS
  • CMS’ки
  • CRM’ки
  • Портфолио
  • Нагрузочное тестирование, профилировщики
  • Технической поддержка и обратная связь
  • Карты различных объектов, составление маршрутов
  • Code fiddle
  • Конструкторы API, рабочих процессов
  • Интерактивные кулинарные ресурсы,
  • Словари
  • Статистика и аггрегация данных
  • Упражнения на языказ программирования
  • Чаты
  • Ставки на спорт
  • Игры
  • Графические редакторы
  • Курсы и обучалки
  • Поисковики
  • Форумы
  • Continous Integration
  • И наконец, просто сайты

Apple

Известные компании, использующие Ember

Известные компании, использующие Ember

Поехали по достоинствам!

Ember избавляет от рутины,

 

позволяя вам сосредоточитсья на бизнес-логике

Developer joy!

 

Код приложений на Ember:

  • декларативен,
  • реактивен,
  • максимально экспрессивен.
  • единый стандарт boilerplate
  • единая экосистема аддонов

Пример аддона: ember-cli-deploy

Автоматизирует публикацию вашего приложения, расширяется с помощью вспомогательных аддонов

  • запуск сборки
  • загрузка source maps в сервис логгирования ошибок
  • обновление firebase
  • дерганье webhook’ов
  • тэгирование в git
  • отправка уведомлений в Slack
    в HipChat
  • работа через SSH-туннель
  • генерация манифеста
  • формирование JSON-конфига для хостинга
  • сжатие в gzip
  • манипулирование ревизиями

Deploy targets:

  • redis
  • pagefront
  • mysql
  • filesystem
  • couchdb
  • cloudfront
  • azure table
  • azure blob
  • s3

 

Добавь свою!

Сообщество

  • Ember не находится в лапах корпораций
    и развивается силами сообщества
  • Разработка крупных фич нередко спонсируется компаниями, использующими Ember
  • Все члены core team -- сотрудники таких компаний
  • Открытый процесс проектирования и разработки через RFC 

Открытое

Дружелюбное

  • Чат в Slack
  • Русскоязычный чат в Gitter
  • Активный раздел на StackOverflow
  • Вам всегда готовы помочь, объяснить
  • Очень актвная open source разработка: все шлют друг другу pull-request'ы

Отличная документация

  • У Ember, Ember CLI, a также всех инфраструктурных аддонов
    имеются гайды и доки по API
     
  • API-документация пишется в комментариях кода при помощи JSDoc или YUIDoc
     
  • Для аддонов и публикаций пропагандируется использование бэйджиков с указанием версии

Стабильность без стагнации

  • Определенные методы работы объявляются устаревшими, но продолжают функционировать
     
  • Следующий мажорный релиз перестает поддерживать устаревшие фичи
     
  • Минорные релизы каждые шесть недель
     
  • Каждый четвертый релиз -- LTS, гарантируются багфиксы и устранения уязвимостей в течение
    36 недель без риска сломать проект обновлением

Эффективная работа с DOM

Как с точки зрения производительности приложения, так и удобства программиста

Благодаря собственной объектной модели, каждая единица данных напрямую связана со своим DOM-элементом.

Обновления DOM происходят напрямую, без потребности пересчитывать много данных

Жесткая структура
и строгие конвенции
не ограничивают,
а помогают.

Ember достаточно гибкий.

Computed properties делают ваш код проще и надежней

  • Реактивный паттерн
  • Кэширование значений
  • Пересчитывание значений в нужный момент

Тесты!

  • Три вида тестов: Unit, Integration, User Acceptance
  • Всё преднастроено
  • Заготовки тестов создаются автоматически
  • В консоли и в браузере: запускаешь и смотришь как Ember сам в себя кликает
  • Promise-aware
  • Покрыть юнит-тестами можно абсолютно любую сущность, будь то модель, маршрут или даже какой-нибудь initializer. 100%-ное покрытие риальне!
  • Test suite на выбор: QUnit или Mocha/Chai
  • Code coverage через аддон
  • Конфиг для Travis в комплекте: выложил на GitHub приложение или плагин, зашел в Travis и одним кликом включил CI.

Ember Data -- стандартный слой модели

  • Является аддоном, не обязателен к использованию.
  • Store -- централизованное хранилище в памяти.
  • Store всегда возвращает один и тот же инстанс записи, изменения записи мгновенно распространяются по всему приложению.
  • Подключаемые адаптеры и сериалайзеры для различных бэкендов: всевозможные REST, а также WebSocket, GraphQL и т. п.
  • Адаптеры и сериалайзеры настраиваются и кастомизируются чрезвычайно гибко.

Односторонний или двусторонний data binding

  • Как и React, Ember пропагандирует односторонний data binding по принципу “data down, actions up”.
  • Но если вы ССЗБ, можете использовать двусторонний data binding. Это очень соблазнительно, потому что меньше писанины. Но потом сложнее отлаживать.
  • Двусторонний — приемлем для простейших случаев, вроде связи input’а со строкой.

У Ember собственный run loop

  • Группирует вместе операции, выполненные в одном псевдотреде JavaScript’а.
  • В первую очередь это касается модификации DOM: несколько правок будут объединены в один repaint.
  • Если data-адаптер (и, соответственно, бэкенд) поддерживают, группирует множество сетевых запросов в один.
  • Работает прозрачно для программиста. Знать, как оно устроено “под капотом”, совсем не обязательно.

Ember Inspector -- средство отладки в Chrome и Firefox

Первоклассный роутер

FastBoot — серверный рендеринг

  • При первом запросе браузера, Ember рендерит страницу на сервере в Node и отдает ее в HTML.
  • Пока грузится комплект JS, пользователь может взаимодействовать со страницей.
  • Все ссылки работают по-старинке.
  • Когда JS загружен, Ember запускается и перехватывает управление. HTML-сайт превращается в Single Page Application.
  • Из Node в браузер можно передать данные через "shoe box", чтобы не требовалось повторно запрашивать их с сервера.

Планы на будущее

  • Упор на вэб-технологии
  • При помощи Service Worker-плагинов можно будет делать Progressive Web Apps, работающие как мобильные приложения
  • Для Fastboot: переиспользование HTML
  • Engines — асинхронная подгрузка компонентов приложения
  • Новая структура boilerplate
  • Новая структура JS-модулей для разбиения Ember на много мелких частей
  • Tree shaking — исключение из дистрибутива неиспользуемых модулей
  • И много что еще! 

Вам шашечки или ехать?

Всё!

goo.gl/HHxfB2

Некоторые недостатки Ember

(после прочтения сжечь)

О недостатках Ember

1. Для доступа к свойствам приходится использовать хелперы get и set

Нельзя написать:

const myService = this.get('myService')

myService.set('myProperty', 'value')
myService.parse()

Приходится  писать:

this.myService.myProperty = 'value'
this.myService.parse()

О недостатках Ember

2. Как следствие, в мире Ember не принято использовать TypeScript,

 

что справедливо расстраивает

часть передовых JS-разработчиков.

О недостатках Ember

3. Трудности с отладкой из-за того, что Ember имеет собственный run loop.

 

Stack trace ошибки порой не указывает на ваш код.

О недостатках Ember

4. Традиционный шаблонизатор

с синаксисом Handlebars.

Если нужно сгенерировать динамическую, заранее не определенную DOM-структуру, то:

  • либо будет работать медленно,
  • либо нужно изобретать велосипед.

О недостатках Ember

5. Традиционная объектная модель:

в Store лежат мутабельные инстансы моделей.

 

Нынче это не модно.

О недостатках Ember

6. И вообще Ember немодный, он использует проверенные временем инструменты, например, Broccoli.

 

Это затрудняет участие в жарких спорах вроде «WebPack 2 или Rollup».

О недостатках Ember

7. Как следствие, Ember до сих пор опирается на такие морально устаревшие инструменты как:

  • jQuery
  • Bower
  • Babel 5

О недостатках Ember

8. Ember не опирается на плечи гигантов вроде Facebook и Google,

 

что объясняет меньшую популярность по сравнению с React и Angular

О недостатках Ember

9. Нет горячей замены кода.

 

При разработке каждое сохранение вызывает перезагрузку страницы.

 

(Но есть горячая замена стилей.)

О недостатках Ember

10. Большой размер дистрибутива.

 

Размер vendor.js быстро переваливает за мегабайт (350 КиБ в gzip).

Сходу о недостатках Ember

11. Нет аналога React Native.

 

Мобильные приложения на Ember используют WebView.

Сходу о недостатках Ember

12. В Ember приходится думать! :(

 

Многие задачи не решить «в лоб»,
быстро накидав страницу кода.

 

Приходится листать документацию, искать, какой метод следует переопределить.

Теперь точно всё!

EmberJS -- темная лошадка в мире frontend-фрэймворков

By Andrey Mikhaylov (lolmaus)

EmberJS -- темная лошадка в мире frontend-фрэймворков

  • 854