Выбор фреймворка для проекта, или зачем мы изобрели...

28
Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Transcript of Выбор фреймворка для проекта, или зачем мы изобрели...

Page 1: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Page 2: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Framework vs. Library

Page 3: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Фреймворк «навязывает» структуру приложения

Page 4: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Библиотека – инструмент для решиния задач, встраиваемый

в вашу структуру

Page 5: Выбор фреймворка для проекта, или зачем мы изобрели велосипед
Page 6: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Функционал

Наблюдаемые (observables)

Маршрутизация (Routing)

Представление связываний (View bindings)

Двунаправленное связывание (Two way bindings)

Вложенные представления (Partial Views)

Отобранный список просмотра (Filtered list Views)

Page 7: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Порог вхождения

Вау эффект

Легкая документация

Борьба с ограничениями

По началу трудный

Плохая документация

Page 8: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Минусы

Медленный рендерингизменяемых данных

Сложная архитектура данных

Большой размер

Handlebars шаблоны

Маленькое комьюнити

Зависит от jQuery

Page 9: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Плюсы

Маленький размер

jQlite

Большое комьюнити

Легко продать

Скорость рендеринга

Повторное использование

Минимизация ошибок кода

Page 10: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

TodoMVC performance testsChrome, Firefox, Safari

1617.72 мс 1544.88 мс

Page 11: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

XFramework

Page 12: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Проблема

Page 13: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Responsive веб-дизайн плохо работает для веб-аппов*

На рынке нет по-настоящему кросс-платформенных решений

Трудно предоставить необходимый уровень UX для каждой платформы

Page 14: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Идея

Page 15: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Desktop(/index.html(

((Page(#1(

Component(#1( Component(#2(

Component(#3(

Component(#4(

Page 16: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Tablet'/index.html'

''Page'#1'

Component'#1'

Component'#2'

Component'#3'

''Page'#2'

Component'#1'

Component'#2'

Component'#4'

Page 17: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Mobile'phone'/index.html'

''Page'#1'

Component'#1'

Component'#2'

''Page'#2' ''Page'#3'

Component'#1'

Component'#3'

Component'#1'

Component'#4'

Page 18: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

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

Page 19: Выбор фреймворка для проекта, или зачем мы изобрели велосипед
Page 20: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

XF.define(‘My App', function () { ! return new XF.App({ initialize: function() { }, ! device: { types : [ { name : 'tablet', range : { max : 1024, min : 569 }, templatePath : 'tablet/', defaultAnimation: 'fade' }, ! {

Page 21: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

XF.define(‘MyApp’, function () { ! return new XF.App({ ! device: { types : [ { name : 'ios', range : { max : 1024, min : 320 }, supports : ['isIOS'], templatePath : 'ios/', defaultAnimation: 'slideleft' }, ! {

Page 22: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

<div data-component="componentClass" data-id="componentID" data-device-type="desktop"> ! This text is visible while component is loading !</div>

Page 23: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

<div data-component="componentClass" data-id=“componentID" />

components/componentClass.js

// is visible

new ComponentClass(options);

tmpl/ deviceProfile/ componentClass.tmpl

rest/componentClass/

// loading JS if it’s needed

// rendering

<div data-component="componentClass" data-id="componentID"> <ul class="xf-list" data-role="listview"> <li></li>

Page 24: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Backbone.js

Underscore.js / Lo-dash.js

JQuery / Zepto

Page 25: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

<div class="xf-page" data-id="home">…</div>

XF.define(function () { return new XF.App({ router: { routes: { '/': 'home' }, ! home: function() { // ... } }, initialize: function() { }, !

Page 26: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

Touch Events

Pointer Events

Mouse Events

D-Pad Events*

tap

swipe

Page 27: Выбор фреймворка для проекта, или зачем мы изобрели велосипед
Page 28: Выбор фреймворка для проекта, или зачем мы изобрели велосипед

ashorror