ݺߣ

ݺߣShare a Scribd company logo
Single-Page Apps
    Вся соль
     Арсений Заречнев
    Front-End Developer
Extranet
Арсений Заречнев и Федор Шумов - Одностраничные приложения
Backbone
              Knockout
                Ember
               Batman
AngularJS, Dojo, Closure, YUI, JavascriptMVC ...
Backbone
              Knockout
                Ember
               Batman
AngularJS, Dojo, Closure, YUI, JavascriptMVC ...
Backbone

Хорошее знакомство с MVC на клиенте
          Малый размер
         Легкость освоения
Backbone

       REST
Модели с событиями
      Роутинг
    Underscore.js
Большое коммьюнити
Backbone
              Knockout
                Ember
               Batman
AngularJS, Dojo, Closure, YUI, JavascriptMVC ...
MV*
 Model
Collection
  View
 Router
Backbone.Model
 Backbone.Collection
Получение данных с сервера
    Сохранение данных
Работа с данными на клиенте
Backbone.Model
Backbone.Collection
Backbone.View
         Обработка событий
Подписки на изменения данных модели
              Рендеринг
Backbone.Router
Отслеживание изменения URL
Инициализация View и Model
Backbone

 Есть всё необходимое для
построения одностраничного
        приложения.

    И написания тестов!
Тестирование JS

   Помогает сохранять слабую
связанность и хорошую структуру
              кода
Тестирование JS

     Jasmine
       Qunit
      Mocha
Тестирование JS

     Jasmine
       Qunit
      Mocha
Jasmine

      Запускается в браузере
Возможно автоматизировать запуск во
          всех браузерах
Mocha


Запускается через node.js или в
          браузере
   Возможно включить в CI
Арсений Заречнев и Федор Шумов - Одностраничные приложения
Batman
Batman

 Каноничный MVC
 Роутинг Rails-style
Model-View Bindings
    CoffeeScript
Batman.App
Batman.Model
Batman.Controller
Batman.View
Batman


Все хорошо, но:
- В активной разработке
- Неизвестна производительность
Extranet
Самое соленое
     Федор Шумов
   Front-End Developer
Router. URL-object. URL-event

    Навигация через адресную строку
    #/hotels/567/rooms/23/facilities/?hints=true

    Парсим строку по маске
    {pathname: {Array, String}, mask: {Array, String}}

    Слабое связывание
    $xo.trigger('url', urlObject)

    Организация структуры приложения
    xo.pages['hotels.id.rooms.id.facilities']
    xo.app.pages['hotels/567/rooms/23/facilities']
DOM-Data через Expando

    Связывание любых данных с DOM

    Bспользованиt библиотек и плагинов,
    использующих $.data() или подобную
    организацию данных через Expando

    Не засорять неймспейс временными или
    чужими данными.
Parent.removeChild(Child)

    Самые затратные операции с DOM.

    Строим только один раз.

    Выдернутая построеная вьюха невидима
    но живая.

    Сохраняются DOM-данные через Expando,
    а значит сохраняются преимущества
    предыдущего слайда :)
Отказ от Delegate

    Backbone слушает дерево view.el

    Минимум детей у нодов — быстрее отклик

    Так как вьюха собирается 1 раз, то можно
    потратить время на сборе побольше

    Прямые связки Knockout-bindings
Knockout

    Ясная логика темплейта

    Автоматическое изменение UI

    Дисперсионные изменения в DOM —
    скорость

    Безопасная MVVM по keyUp/keyDown

    Многопользовательский режим
Backbone + Knockout

    Router + CRUD + MVVM

    Two-way: model.set() триггерит изменения в
    observables; и наоборот attributes
    подписаны на оbservables.

    Постепенный перевод вьюх из Backbone в
    Knockout.
Отказ от Extend в «бешеных» вьюхах

    Backbone при предподготовке модели как
    минимум 3 раза бегает for-in по объекту
      this.attributes = _.extend({}, defaults, attributes)
           this._previousAttributes = _.clone(this.attributes)

    Либо заменить объекты на парные массивы
    и бегать do {--n} while (n)
      this.defaultsKeys = [ “id”, “name” ]
           this.defaultsVals = [ “456”, “Ivan Zolotov” ];

    Либо отказаться от Backbone + Knockout

More Related Content

What's hot (20)

#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
JSib
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
JSib
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
Volha Banadyseva
Node JS проблемы надежности, и пути их решения
Node JS проблемы надежности, и пути их решенияNode JS проблемы надежности, и пути их решения
Node JS проблемы надежности, и пути их решения
Alexander Kucherenko
JS Lab2017_Сергей Селецкий_System.js и jspm
JS Lab2017_Сергей Селецкий_System.js и jspmJS Lab2017_Сергей Селецкий_System.js и jspm
JS Lab2017_Сергей Селецкий_System.js и jspm
GeeksLab Odessa
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
Ontico
#5 "React.js" Антон Артамонов
#5 "React.js" Антон Артамонов#5 "React.js" Антон Артамонов
#5 "React.js" Антон Артамонов
JSib
Cобытия в JavaScript
Cобытия в JavaScriptCобытия в JavaScript
Cобытия в JavaScript
Vladimir Dashukevich
Практичне профілювання продуктивності
Практичне профілювання продуктивностіПрактичне профілювання продуктивності
Практичне профілювання продуктивності
Shtrih Sruleg
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
2017-08-12 02 Антон Ковалев. Texture a.k.a AsyncDisplayKit
Омские ИТ-субботники
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
7bits
Установка и начало работы с VMware vSphere за 60 минут
Установка и начало работы с VMware vSphere за 60 минутУстановка и начало работы с VMware vSphere за 60 минут
Установка и начало работы с VMware vSphere за 60 минут
SkillFactory
Backbone Javascript Application
Backbone Javascript ApplicationBackbone Javascript Application
Backbone Javascript Application
Alexander Kucherenko
Java script и frontend завтра - Kharkiv JS 2013
Java script и frontend завтра - Kharkiv JS 2013Java script и frontend завтра - Kharkiv JS 2013
Java script и frontend завтра - Kharkiv JS 2013
Andrey Listochkin
Chrome push notifications. Анатомия и разработка
Chrome push notifications. Анатомия и разработкаChrome push notifications. Анатомия и разработка
Chrome push notifications. Анатомия и разработка
Alexandr Mikhaylenko
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Ontico
Internet explorer 9 для разработчиков
Internet explorer 9 для разработчиковInternet explorer 9 для разработчиков
Internet explorer 9 для разработчиков
Roman Kalita
Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...
Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...
Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...
Mail.ru Group
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
Ontico
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
JSib
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
JSib
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
Volha Banadyseva
Node JS проблемы надежности, и пути их решения
Node JS проблемы надежности, и пути их решенияNode JS проблемы надежности, и пути их решения
Node JS проблемы надежности, и пути их решения
Alexander Kucherenko
JS Lab2017_Сергей Селецкий_System.js и jspm
JS Lab2017_Сергей Селецкий_System.js и jspmJS Lab2017_Сергей Селецкий_System.js и jspm
JS Lab2017_Сергей Селецкий_System.js и jspm
GeeksLab Odessa
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
Ontico
#5 "React.js" Антон Артамонов
#5 "React.js" Антон Артамонов#5 "React.js" Антон Артамонов
#5 "React.js" Антон Артамонов
JSib
Практичне профілювання продуктивності
Практичне профілювання продуктивностіПрактичне профілювання продуктивності
Практичне профілювання продуктивності
Shtrih Sruleg
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
7bits
Установка и начало работы с VMware vSphere за 60 минут
Установка и начало работы с VMware vSphere за 60 минутУстановка и начало работы с VMware vSphere за 60 минут
Установка и начало работы с VMware vSphere за 60 минут
SkillFactory
Java script и frontend завтра - Kharkiv JS 2013
Java script и frontend завтра - Kharkiv JS 2013Java script и frontend завтра - Kharkiv JS 2013
Java script и frontend завтра - Kharkiv JS 2013
Andrey Listochkin
Chrome push notifications. Анатомия и разработка
Chrome push notifications. Анатомия и разработкаChrome push notifications. Анатомия и разработка
Chrome push notifications. Анатомия и разработка
Alexandr Mikhaylenko
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Ontico
Internet explorer 9 для разработчиков
Internet explorer 9 для разработчиковInternet explorer 9 для разработчиков
Internet explorer 9 для разработчиков
Roman Kalita
Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...
Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...
Droidcon Moscow 2015. Nearby новые возможности взаимодействия рядом. Антон Пу...
Mail.ru Group
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
Ontico

Арсений Заречнев и Федор Шумов - Одностраничные приложения

  • 1. Single-Page Apps Вся соль Арсений Заречнев Front-End Developer
  • 4. Backbone Knockout Ember Batman AngularJS, Dojo, Closure, YUI, JavascriptMVC ...
  • 5. Backbone Knockout Ember Batman AngularJS, Dojo, Closure, YUI, JavascriptMVC ...
  • 6. Backbone Хорошее знакомство с MVC на клиенте Малый размер Легкость освоения
  • 7. Backbone REST Модели с событиями Роутинг Underscore.js Большое коммьюнити
  • 8. Backbone Knockout Ember Batman AngularJS, Dojo, Closure, YUI, JavascriptMVC ...
  • 9. MV* Model Collection View Router
  • 10. Backbone.Model Backbone.Collection Получение данных с сервера Сохранение данных Работа с данными на клиенте
  • 12. Backbone.View Обработка событий Подписки на изменения данных модели Рендеринг
  • 14. Backbone Есть всё необходимое для построения одностраничного приложения. И написания тестов!
  • 15. Тестирование JS Помогает сохранять слабую связанность и хорошую структуру кода
  • 16. Тестирование JS Jasmine Qunit Mocha
  • 17. Тестирование JS Jasmine Qunit Mocha
  • 18. Jasmine Запускается в браузере Возможно автоматизировать запуск во всех браузерах
  • 19. Mocha Запускается через node.js или в браузере Возможно включить в CI
  • 22. Batman Каноничный MVC Роутинг Rails-style Model-View Bindings CoffeeScript
  • 27. Batman Все хорошо, но: - В активной разработке - Неизвестна производительность
  • 28. Extranet Самое соленое Федор Шумов Front-End Developer
  • 29. Router. URL-object. URL-event  Навигация через адресную строку #/hotels/567/rooms/23/facilities/?hints=true  Парсим строку по маске {pathname: {Array, String}, mask: {Array, String}}  Слабое связывание $xo.trigger('url', urlObject)  Организация структуры приложения xo.pages['hotels.id.rooms.id.facilities'] xo.app.pages['hotels/567/rooms/23/facilities']
  • 30. DOM-Data через Expando  Связывание любых данных с DOM  Bспользованиt библиотек и плагинов, использующих $.data() или подобную организацию данных через Expando  Не засорять неймспейс временными или чужими данными.
  • 31. Parent.removeChild(Child)  Самые затратные операции с DOM.  Строим только один раз.  Выдернутая построеная вьюха невидима но живая.  Сохраняются DOM-данные через Expando, а значит сохраняются преимущества предыдущего слайда :)
  • 32. Отказ от Delegate  Backbone слушает дерево view.el  Минимум детей у нодов — быстрее отклик  Так как вьюха собирается 1 раз, то можно потратить время на сборе побольше  Прямые связки Knockout-bindings
  • 33. Knockout  Ясная логика темплейта  Автоматическое изменение UI  Дисперсионные изменения в DOM — скорость  Безопасная MVVM по keyUp/keyDown  Многопользовательский режим
  • 34. Backbone + Knockout  Router + CRUD + MVVM  Two-way: model.set() триггерит изменения в observables; и наоборот attributes подписаны на оbservables.  Постепенный перевод вьюх из Backbone в Knockout.
  • 35. Отказ от Extend в «бешеных» вьюхах  Backbone при предподготовке модели как минимум 3 раза бегает for-in по объекту this.attributes = _.extend({}, defaults, attributes) this._previousAttributes = _.clone(this.attributes)  Либо заменить объекты на парные массивы и бегать do {--n} while (n) this.defaultsKeys = [ “id”, “name” ] this.defaultsVals = [ “456”, “Ivan Zolotov” ];  Либо отказаться от Backbone + Knockout