Frameworks in 2015
Andrey Listochkin
@listochkingithub.com/listochkingithub.com/dev-ua
Frameworks in 2015
@listochkinfrontendua.im
Your App Today ~1.5m
Frameworks Matter
bootstrapserverDOMdata
3rd-party...
Ember Ember Data Ember CLI Ember Inspector Ember Deploy LiquidFire EmberFire Ember Paper
Ember Ecosystemvs
React Ecosystem
Dynamics of Ecosystems
Dynamics ofOpen Source
No one wants it :(
Batman JSSpine
KnockoutCan JS
DurandalJavaScript MVC
Grunt vs Gulp
Browserify vs Webpack
Test’em vs Karma
Selenium vs Protractor
493 results for 'flux'
https://www.npmjs.com/search?q=flux
We've found 1,276 repository results
https://github.com/search?q=flux&l=JavaScript&type=Repositorie
s
Facebook Flux Reflux Fluxxor Fluxible by Yahoo Alt Flummox Marty.js McFly Lux Fynx Fluxy
AngularStrapvs
UI Bootstrap
6 core contributors
925 packageshttp://www.emberaddons.com/
Open Sourceis HARD
Github starsGreen BadgesGreat Docs
Big Early AdoptersAPI compatibilityIssues Triaging
great artists stealSteve Jobs
Pablo PicassoIgor StravinskyWilliam Faulkner
T. S. EliotW. H. Davenport Adams
Predictto
Future-proof
framework-agnosticarchitecture
since summer 2013
architecture=
decisions
Angular Directive
2009
Twitter FlightJanuary 31, 2013
Modern Components
data downevents up
PolymerMay 16, 2013
<stock-badge ticket=”msft” range=”yoy” chart=”linear”>
ReactMay 29, 2013
Ember 1.0 rc8Aug 29, 2013
Rethinking Best Practices
video Oct 30, 2013
dumbUI-only
No dependenciesNo domain state
smart wraps dumb
higher-order components
Route-driven Views
global UI statevs
local UI state
Router.map -> @route 'talk/new', path: 'talks/new' @route 'schedule', { path: 'talks' }, -> @route 'talk', path: ':talk_id'
Router.map -> @route 'talk/new', path: 'talks/new' @route 'schedule', { path: 'talks' }, -> @route 'talk', path: ':talk_id'
Router.map -> @route 'talk/new', path: 'talks/new' @route 'schedule', { path: 'talks' }, -> @route 'talk', path: ':talk_id'
Router.map -> @route 'talk/new', path: 'talks/new' @route 'schedule', { path: 'talks' }, -> @route 'talk', path: ':talk_id'
components =
tags
outlets =
iframes
shallow hierarchies
UI-only components
livereloadability
Router +
Components
Route Handlerloads data
handles actions
Componentshows DOM
DOM events => actionsmanages children
Router + Components
got a form?write a
component!even when you don’t reuse
controllersviews
components++
smallest controllers possible
angular 1.4 router
UI router
ModelsSync
Data binding
Unidirectional Data flow
Operation Transforms
distributed systems
flux in any framework
Monadic DataDependenciesDeclaration
JSX as a Data Structure
ES.Next + addons
@Decoratorsasync
type annotationsJSX
@Stateful({ initialize (props) { return { count: 0 }; }, reducers: { increment (props, state) { return { count: state.count + 1 }; } }})class Counter { static propTypes = { count: PropTypes.number.isRequired, increment: PropTypes.func.isRequired }; render () { const { count, increment } = this.props; return ( <button onClick={increment}> Pressed {count} times. </button> ) }}
class MyComponent extends HTMLElement { ...}
AureliaAngular 2.0
ReactEmber
BuildTest RunnerDependenciesDev ServerGenerators
Addons
tool enforces conventions
Render TreeRouting
Data ExplorerDI ContainerDeprecations
PromisesPerformance
ChromeFirefox
IESafari
ember install:addon liquid-fire
componentlibrary
build steptool...
visit('talks/new');fillIn('input.title', 'My Cool Talk');click('button.submit');andThen(() => { equal( find('ul.talks li:last').text(), 'My Cool Talk');});
pluggablerenderers
Native UIJS for App and
Network
Rolling Releases
Angular 2 React EmberRouter y y y
Components y y y
ES.next y y y
vDOM w y w
FP+immutable n w w
monadic declarations n w n
Data n w y
Asset Pipeline n n y
Addons n n y
UI testing n n y
Browser Tools n n y
Hot Reload n y n
Isomorphic w y w
Native n y n
Rolling Releases n n y
Ember Productivity
AngularPopularity
you don’t have to be productive, innovative, or popular to be successful
@listochkinfrontendua.im