SlideShare a Scribd company logo
1 of 55
Download to read offline
Back(bone) Again
From Backbone to Ember and
Partner at Coffee & Code.
Lover of tech.
Hi, I’m Jon.
Hi, I’m Jon.
Partner at Coffee & Code.
Lover of tech.
Developer
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
Consultant
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
module.exports = Work.create({
code: function() {
return 'the solution';
}
})
Widget Factory
W
Factory
Widget Factory
W
Factory
+ Vendor Co.
Widget Dashboard
Item 1
Hunger Level 72%
Room Orange
# of Yawns 12.4
0
50
100
10am 12pm
Item 2
Hunger Level 12%
Room Salon D
# of Yawns 204
0
50
100
10am 12pm
Item 3
Hunger Level 45%
Room Cypress
# of Yawns 16
0
50
100
10am 12pm
Widget Dashboard
• single page Javascript app, built in Backbone
• pulls data from API server
• more and more features caused code bloat
• Widget Factory does not know much Javascript
Widget Dashboard
• single page Javascript app, built in Backbone
• pulls data from API server
• more and more features caused code bloat
• Widget Factory does not know much Javascript
Backbone.js gives structure to web applications by
providing models with key-value binding and
custom events, collections with a rich API of
enumerable functions, views with declarative event
handling, and connects it all to your existing API
over a RESTful JSON interface.
Backbone.js gives structure to web applications by
providing models with key-value binding and
custom events, collections with a rich API of
enumerable functions, views with declarative event
handling, and connects it all to your existing API
over a RESTful JSON interface.
Backbone.js gives structure to web applications by
providing models with key-value binding and
custom events, collections with a rich API of
enumerable functions, views with declarative event
handling, and connects it all to your existing API
over a RESTful JSON interface.
Backbone.js gives structure to web applications by
providing models with key-value binding and
custom events, collections with a rich API of
enumerable functions, views with declarative event
handling, and connects it all to your existing API
over a RESTful JSON interface.
Backbone.js gives structure to web applications by
providing models with key-value binding and
custom events, collections with a rich API of
enumerable functions, views with declarative event
handling, and connects it all to your existing API
over a RESTful JSON interface.
Backbone.js gives structure to web applications by
providing models with key-value binding and
custom events, collections with a rich API of
enumerable functions, views with declarative event
handling, and connects it all to your existing API
over a RESTful JSON interface.
var MyView = Backbone.View.extend({
el: '#content',
template: _.template($('#template').text()),
render: function() {
this.$el.html(this.template({
language: 'Backbone'
}));
return this;
}
});
var myView = new MyView();
myView.render();
<div id="content"></div>
<script id="template" type="text/template">
<h1>Hello from <%- language %>!</h1>
</script>
http://codepen.io/coffeeandcode/pen/VYmZjK
DOM
jQuery Underscore Templates
Backbone
: Issues
• library does not do much, never will
• easy to start integration, difficult things around
edges
• lack of project architecture leaves a lot up to the
developers
• easy to create memory leaks
Widget Dashboard 2.0
• app rewritten in Ember.js
• goal was to write less code, easier to teach
• less moving parts == less to screw up
• Widget Factory still does not know much JS
Widget Dashboard 2.0
• app rewritten in Ember.js
• goal was to write less code, easier to teach
• less moving parts == less to screw up
• Widget Factory still does not know much JS
A framework for creating ambitious web applications.
A framework for creating ambitious web applications.
A framework for creating ambitious web applications.
Ember.js is an open-source client-side JavaScript web
application framework based on the model-view-
controller (MVC) software architectural pattern. It allows
developers to create scalable single-page applications
by incorporating common idioms and best practices into
a framework that provides a rich object model,
declarative two-way data binding, computed properties,
automatically-updating templates powered by
Handlebars.js, and a router for managing application
state.[1]
1. http://en.wikipedia.org/wiki/Ember.js
Ember.js is an open-source client-side JavaScript web
application framework based on the model-view-
controller (MVC) software architectural pattern. It allows
developers to create scalable single-page applications
by incorporating common idioms and best practices into
a framework that provides a rich object model,
declarative two-way data binding, computed properties,
automatically-updating templates powered by
Handlebars.js, and a router for managing application
state.[1]
1. http://en.wikipedia.org/wiki/Ember.js
Ember.js is an open-source client-side JavaScript web
application framework based on the model-view-
controller (MVC) software architectural pattern. It allows
developers to create scalable single-page applications
by incorporating common idioms and best practices into
a framework that provides a rich object model,
declarative two-way data binding, computed properties,
automatically-updating templates powered by
Handlebars.js, and a router for managing application
state.[1]
1. http://en.wikipedia.org/wiki/Ember.js
Ember.js is an open-source client-side JavaScript web
application framework based on the model-view-
controller (MVC) software architectural pattern. It allows
developers to create scalable single-page applications
by incorporating common idioms and best practices into
a framework that provides a rich object model,
declarative two-way data binding, computed properties,
automatically-updating templates powered by
Handlebars.js, and a router for managing application
state.[1]
1. http://en.wikipedia.org/wiki/Ember.js
Ember.js is an open-source client-side JavaScript web
application framework based on the model-view-
controller (MVC) software architectural pattern. It allows
developers to create scalable single-page applications
by incorporating common idioms and best practices into
a framework that provides a rich object model,
declarative two-way data binding, computed properties,
automatically-updating templates powered by
Handlebars.js, and a router for managing application
state.[1]
1. http://en.wikipedia.org/wiki/Ember.js
Ember.js is an open-source client-side JavaScript web
application framework based on the model-view-
controller (MVC) software architectural pattern. It allows
developers to create scalable single-page applications
by incorporating common idioms and best practices into
a framework that provides a rich object model,
declarative two-way data binding, computed properties,
automatically-updating templates powered by
Handlebars.js, and a router for managing application
state.[1]
1. http://en.wikipedia.org/wiki/Ember.js
var App = Ember.Application.create();
App.IndexRoute = Ember.Route.extend({
model: function() {
return {
language: 'Ember'
};
}
});
<div id="content"></div>
<script data-template-name="index" type="text/x-handlebars">
<h1>Hello from {{language}}!</h1>
</script>
http://codepen.io/coffeeandcode/pen/ZYBzad
DOM
jQuery Handlebars Templates
Ember Ember Data
: Issues
• very opinionated, very large codebase
• does black magic with Handlebars
• assumes you need the big guns
• two-way data binding by default
• easy to shoot yourself in the foot
Two Main Problems
W
Factory
Performance
Civic i-VTEC Engine by Kris Carillo: https://flic.kr/p/7VFLeC
Widget Dashboard
Item 1
Hunger Level 72%
Room Orange
# of Yawns 12.4
0
50
100
10am 12pm
Item 2
Hunger Level 12%
Room Salon D
# of Yawns 204
0
50
100
10am 12pm
Item 3
Hunger Level 45%
Room Cypress
# of Yawns 16
0
50
100
10am 12pm
Widget Dashboard
Production Data:

500 widgets
Poor Man’s Testing
0
175
350
525
700
seconds 10 20 30 120
Ember App
MB of
memory
http://www.filamentgroup.com/
lab/mv-initial-load-times.html
$ find backbone -name '*.js' | xargs wc -wcl
12 36 197 backbone/js/app.js
41 166 1130 backbone/js/collections/todos.js
26 78 536 backbone/js/models/todo.js
26 67 499 backbone/js/routers/router.js
131 428 3703 backbone/js/views/app-view.js
132 496 3888 backbone/js/views/todo-view.js
368 1271 9953 total
$ find emberjs -name '*.js' | xargs wc -wcl
6 14 159 emberjs/js/app.js
59 165 1486 emberjs/js/controllers/todo_controller.js
51 128 1195 emberjs/js/controllers/todos_controller.js
16 38 432 emberjs/js/controllers/todos_list_controller.js
11 31 262 emberjs/js/helpers/pluralize.js
9 18 158 emberjs/js/models/todo.js
38 78 816 emberjs/js/router.js
12 33 298 emberjs/js/views/todo_input_component.js
202 505 4806 total
lines words chars
People Problem
Random, funny internet photo
People Problem
• lack of knowledge in front-end technologies
• not enough pairing and information sharing
• team skill level was not adequate to pick up where
Vendor Co. left off
• amount of documentation was lacking
Our Solution
• focus on knowledge sharing
• pair programming / technical side projects
• build what the client understands
• built JS workflow with the client’s help
• explicit code, no magic
• uses CommonJS and Browserify
• use technologies with little change and a wealth of
documentation
Explicit Code
+
var MainLayout = require('../views/shared/layout');
module.exports = MainLayout.extend({
template: 'dashboard/layout',
ui: {
tooltipFields: '[data-tooltip=true]'
},
onRender: function() {
// apply jQuery plugin to tooltip fields
this.ui.tooltipFields.tooltip();
}
});
Backbone.Marionette is a composite application
library for Backbone.js that aims to simplify the
construction of large scale JavaScript applications.
It is a collection of common design and
implementation patterns found in the applications that
we have been building with Backbone, and includes
pieces inspired by composite application
architectures, event-driven architectures, messaging
architectures, and more.
Backbone.Marionette is a composite application
library for Backbone.js that aims to simplify the
construction of large scale JavaScript applications.
It is a collection of common design and
implementation patterns found in the applications that
we have been building with Backbone, and includes
pieces inspired by composite application
architectures, event-driven architectures, messaging
architectures, and more.
Backbone.Marionette is a composite application
library for Backbone.js that aims to simplify the
construction of large scale JavaScript applications.
It is a collection of common design and
implementation patterns found in the applications that
we have been building with Backbone, and includes
pieces inspired by composite application
architectures, event-driven architectures, messaging
architectures, and more.
Backbone.Marionette is a composite application
library for Backbone.js that aims to simplify the
construction of large scale JavaScript applications.
It is a collection of common design and
implementation patterns found in the applications that
we have been building with Backbone, and includes
pieces inspired by composite application
architectures, event-driven architectures, messaging
architectures, and more.
Backbone.Marionette is a composite application
library for Backbone.js that aims to simplify the
construction of large scale JavaScript applications.
It is a collection of common design and
implementation patterns found in the applications that
we have been building with Backbone, and includes
pieces inspired by composite application
architectures, event-driven architectures, messaging
architectures, and more.
var MyView = Marionette.ItemView.extend({
el: '#content',
template: '#template',
serializeData: function() {
return {
language: 'Marionette'
};
}
});
var myView = new MyView();
myView.render();
<div id="content"></div>
<script id="template" type="text/template">
<h1>Hello from <%- language %>!</h1>
</script>
http://codepen.io/coffeeandcode/pen/raWBWE
DOM
jQuery Underscore Templates
Backbone
Marionette
Activity Monitor
0
175
350
525
700
seconds 10 20 30 120
Ember App Backbone App
My Challenge
• build apps with
production data in
mind
• consider non-technical
needs of project
• show love for all
technology choices,
but be hesitant to
adopt new libraries
Thanks
Jonathan Knapp

@CoffeeAndCode
http://slidesha.re/1w5yv4A
Resources
Slide 1 image: https://flic.kr/p/8Y8T5T
Slide 2 image: Keynote default :)
Slide 35 image: https://flic.kr/p/7VFLeC
Slide 39: TodoMVC performance work by Filament Group: http://
www.filamentgroup.com/lab/mv-initial-load-times.html
Slide 41 image: the internets (don’t know source)

More Related Content

What's hot

JSF Component Behaviors
JSF Component BehaviorsJSF Component Behaviors
JSF Component BehaviorsAndy Schwartz
 
In The Trenches With Tomster, Upgrading Ember.js & Ember Data
In The Trenches With Tomster, Upgrading Ember.js & Ember DataIn The Trenches With Tomster, Upgrading Ember.js & Ember Data
In The Trenches With Tomster, Upgrading Ember.js & Ember DataStacy London
 
Refactoring Large Web Applications with Backbone.js
Refactoring Large Web Applications with Backbone.jsRefactoring Large Web Applications with Backbone.js
Refactoring Large Web Applications with Backbone.jsStacy London
 
Refactor Large applications with Backbone
Refactor Large applications with BackboneRefactor Large applications with Backbone
Refactor Large applications with BackboneColdFusionConference
 
Introduction to Vaadin
Introduction to VaadinIntroduction to Vaadin
Introduction to VaadinJeroen Benats
 
AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014Ran Wahle
 
Building Universal Web Apps with React ForwardJS 2017
Building Universal Web Apps with React ForwardJS 2017Building Universal Web Apps with React ForwardJS 2017
Building Universal Web Apps with React ForwardJS 2017Elyse Kolker Gordon
 
Introducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and serverIntroducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and serverSpike Brehm
 
Vaadin Components @ Angular U
Vaadin Components @ Angular UVaadin Components @ Angular U
Vaadin Components @ Angular UJoonas Lehtinen
 
Introduction to Sightly and Sling Models
Introduction to Sightly and Sling ModelsIntroduction to Sightly and Sling Models
Introduction to Sightly and Sling ModelsStefano Celentano
 
[FEConf Korea 2017]Angular 컴포넌트 대화법
[FEConf Korea 2017]Angular 컴포넌트 대화법[FEConf Korea 2017]Angular 컴포넌트 대화법
[FEConf Korea 2017]Angular 컴포넌트 대화법Jeado Ko
 
HTL(Sightly) - All you need to know
HTL(Sightly) - All you need to knowHTL(Sightly) - All you need to know
HTL(Sightly) - All you need to knowPrabhdeep Singh
 
Angular App Presentation
Angular App PresentationAngular App Presentation
Angular App PresentationElizabeth Long
 

What's hot (20)

JSF Component Behaviors
JSF Component BehaviorsJSF Component Behaviors
JSF Component Behaviors
 
In The Trenches With Tomster, Upgrading Ember.js & Ember Data
In The Trenches With Tomster, Upgrading Ember.js & Ember DataIn The Trenches With Tomster, Upgrading Ember.js & Ember Data
In The Trenches With Tomster, Upgrading Ember.js & Ember Data
 
Refactoring Large Web Applications with Backbone.js
Refactoring Large Web Applications with Backbone.jsRefactoring Large Web Applications with Backbone.js
Refactoring Large Web Applications with Backbone.js
 
Refactor Large applications with Backbone
Refactor Large applications with BackboneRefactor Large applications with Backbone
Refactor Large applications with Backbone
 
Introduction to Vaadin
Introduction to VaadinIntroduction to Vaadin
Introduction to Vaadin
 
AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014
 
Building Universal Web Apps with React ForwardJS 2017
Building Universal Web Apps with React ForwardJS 2017Building Universal Web Apps with React ForwardJS 2017
Building Universal Web Apps with React ForwardJS 2017
 
Angular JS
Angular JSAngular JS
Angular JS
 
ParisJS #10 : RequireJS
ParisJS #10 : RequireJSParisJS #10 : RequireJS
ParisJS #10 : RequireJS
 
Introduction to Unit Tests and TDD
Introduction to Unit Tests and TDDIntroduction to Unit Tests and TDD
Introduction to Unit Tests and TDD
 
Introducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and serverIntroducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and server
 
Vaadin Components @ Angular U
Vaadin Components @ Angular UVaadin Components @ Angular U
Vaadin Components @ Angular U
 
Introduction to Sightly and Sling Models
Introduction to Sightly and Sling ModelsIntroduction to Sightly and Sling Models
Introduction to Sightly and Sling Models
 
[FEConf Korea 2017]Angular 컴포넌트 대화법
[FEConf Korea 2017]Angular 컴포넌트 대화법[FEConf Korea 2017]Angular 컴포넌트 대화법
[FEConf Korea 2017]Angular 컴포넌트 대화법
 
HTL(Sightly) - All you need to know
HTL(Sightly) - All you need to knowHTL(Sightly) - All you need to know
HTL(Sightly) - All you need to know
 
Booting up with polymer
Booting up with polymerBooting up with polymer
Booting up with polymer
 
Angular App Presentation
Angular App PresentationAngular App Presentation
Angular App Presentation
 
Vaadin Components
Vaadin ComponentsVaadin Components
Vaadin Components
 
Vaadin & Web Components
Vaadin & Web ComponentsVaadin & Web Components
Vaadin & Web Components
 
Vaadin 7.2
Vaadin 7.2Vaadin 7.2
Vaadin 7.2
 

Similar to From Backbone to Ember and Back(bone) Again

WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 
Yeoman AngularJS and D3 - A solid stack for web apps
Yeoman AngularJS and D3 - A solid stack for web appsYeoman AngularJS and D3 - A solid stack for web apps
Yeoman AngularJS and D3 - A solid stack for web appsclimboid
 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applicationshchen1
 
Javascript frameworks: Backbone.js
Javascript frameworks: Backbone.jsJavascript frameworks: Backbone.js
Javascript frameworks: Backbone.jsSoós Gábor
 
Rp 6 session 2 naresh bhatia
Rp 6  session 2 naresh bhatiaRp 6  session 2 naresh bhatia
Rp 6 session 2 naresh bhatiasapientindia
 
Create an application with ember
Create an application with ember Create an application with ember
Create an application with ember Chandra Sekar
 
Modern ASP.NET Webskills
Modern ASP.NET WebskillsModern ASP.NET Webskills
Modern ASP.NET WebskillsCaleb Jenkins
 
Dynamic Application Development by NodeJS ,AngularJS with OrientDB
Dynamic Application Development by NodeJS ,AngularJS with OrientDBDynamic Application Development by NodeJS ,AngularJS with OrientDB
Dynamic Application Development by NodeJS ,AngularJS with OrientDBApaichon Punopas
 
Web development concepts using microsoft technologies
Web development concepts using microsoft technologiesWeb development concepts using microsoft technologies
Web development concepts using microsoft technologiesHosam Kamel
 
gDayX 2013 - Advanced AngularJS - Nicolas Embleton
gDayX 2013 - Advanced AngularJS - Nicolas EmbletongDayX 2013 - Advanced AngularJS - Nicolas Embleton
gDayX 2013 - Advanced AngularJS - Nicolas EmbletonGeorge Nguyen
 
Seven Versions of One Web Application
Seven Versions of One Web ApplicationSeven Versions of One Web Application
Seven Versions of One Web ApplicationYakov Fain
 
Web Development for UX Designers
Web Development for UX DesignersWeb Development for UX Designers
Web Development for UX DesignersAshlimarie
 
Refactoring JavaScript Applications
Refactoring JavaScript ApplicationsRefactoring JavaScript Applications
Refactoring JavaScript ApplicationsJovan Vidić
 
Beginning MEAN Stack
Beginning MEAN StackBeginning MEAN Stack
Beginning MEAN StackRob Davarnia
 
Valentine with Angular js - Introduction
Valentine with Angular js - IntroductionValentine with Angular js - Introduction
Valentine with Angular js - IntroductionSenthil Kumar
 
Introduction To Code Igniter
Introduction To Code IgniterIntroduction To Code Igniter
Introduction To Code IgniterAmzad Hossain
 
ASP.NET Presentation
ASP.NET PresentationASP.NET Presentation
ASP.NET PresentationRasel Khan
 
Intro to Rails Give Camp Atlanta
Intro to Rails Give Camp AtlantaIntro to Rails Give Camp Atlanta
Intro to Rails Give Camp AtlantaJason Noble
 
ASP.NEt MVC and Angular What a couple
ASP.NEt MVC and Angular What a coupleASP.NEt MVC and Angular What a couple
ASP.NEt MVC and Angular What a coupleAlexandre Marreiros
 

Similar to From Backbone to Ember and Back(bone) Again (20)

WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
Yeoman AngularJS and D3 - A solid stack for web apps
Yeoman AngularJS and D3 - A solid stack for web appsYeoman AngularJS and D3 - A solid stack for web apps
Yeoman AngularJS and D3 - A solid stack for web apps
 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applications
 
RIA / SPA with ASP.NET
RIA / SPA with ASP.NETRIA / SPA with ASP.NET
RIA / SPA with ASP.NET
 
Javascript frameworks: Backbone.js
Javascript frameworks: Backbone.jsJavascript frameworks: Backbone.js
Javascript frameworks: Backbone.js
 
Rp 6 session 2 naresh bhatia
Rp 6  session 2 naresh bhatiaRp 6  session 2 naresh bhatia
Rp 6 session 2 naresh bhatia
 
Create an application with ember
Create an application with ember Create an application with ember
Create an application with ember
 
Modern ASP.NET Webskills
Modern ASP.NET WebskillsModern ASP.NET Webskills
Modern ASP.NET Webskills
 
Dynamic Application Development by NodeJS ,AngularJS with OrientDB
Dynamic Application Development by NodeJS ,AngularJS with OrientDBDynamic Application Development by NodeJS ,AngularJS with OrientDB
Dynamic Application Development by NodeJS ,AngularJS with OrientDB
 
Web development concepts using microsoft technologies
Web development concepts using microsoft technologiesWeb development concepts using microsoft technologies
Web development concepts using microsoft technologies
 
gDayX 2013 - Advanced AngularJS - Nicolas Embleton
gDayX 2013 - Advanced AngularJS - Nicolas EmbletongDayX 2013 - Advanced AngularJS - Nicolas Embleton
gDayX 2013 - Advanced AngularJS - Nicolas Embleton
 
Seven Versions of One Web Application
Seven Versions of One Web ApplicationSeven Versions of One Web Application
Seven Versions of One Web Application
 
Web Development for UX Designers
Web Development for UX DesignersWeb Development for UX Designers
Web Development for UX Designers
 
Refactoring JavaScript Applications
Refactoring JavaScript ApplicationsRefactoring JavaScript Applications
Refactoring JavaScript Applications
 
Beginning MEAN Stack
Beginning MEAN StackBeginning MEAN Stack
Beginning MEAN Stack
 
Valentine with Angular js - Introduction
Valentine with Angular js - IntroductionValentine with Angular js - Introduction
Valentine with Angular js - Introduction
 
Introduction To Code Igniter
Introduction To Code IgniterIntroduction To Code Igniter
Introduction To Code Igniter
 
ASP.NET Presentation
ASP.NET PresentationASP.NET Presentation
ASP.NET Presentation
 
Intro to Rails Give Camp Atlanta
Intro to Rails Give Camp AtlantaIntro to Rails Give Camp Atlanta
Intro to Rails Give Camp Atlanta
 
ASP.NEt MVC and Angular What a couple
ASP.NEt MVC and Angular What a coupleASP.NEt MVC and Angular What a couple
ASP.NEt MVC and Angular What a couple
 

Recently uploaded

Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
SoftTeco - Software Development Company Profile
SoftTeco - Software Development Company ProfileSoftTeco - Software Development Company Profile
SoftTeco - Software Development Company Profileakrivarotava
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogueitservices996
 
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencessuser9e7c64
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesVictoriaMetrics
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...OnePlan Solutions
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesKrzysztofKkol1
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfkalichargn70th171
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxRTS corp
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITmanoharjgpsolutions
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingShane Coughlan
 

Recently uploaded (20)

Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
SoftTeco - Software Development Company Profile
SoftTeco - Software Development Company ProfileSoftTeco - Software Development Company Profile
SoftTeco - Software Development Company Profile
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
 
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conference
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
 

From Backbone to Ember and Back(bone) Again

  • 2. Partner at Coffee & Code. Lover of tech. Hi, I’m Jon.
  • 3. Hi, I’m Jon. Partner at Coffee & Code. Lover of tech.
  • 4. Developer module.exports = Work.create({ code: function() { return 'the solution'; } })
  • 5. Consultant module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } }) module.exports = Work.create({ code: function() { return 'the solution'; } })
  • 8. Widget Dashboard Item 1 Hunger Level 72% Room Orange # of Yawns 12.4 0 50 100 10am 12pm Item 2 Hunger Level 12% Room Salon D # of Yawns 204 0 50 100 10am 12pm Item 3 Hunger Level 45% Room Cypress # of Yawns 16 0 50 100 10am 12pm
  • 9. Widget Dashboard • single page Javascript app, built in Backbone • pulls data from API server • more and more features caused code bloat • Widget Factory does not know much Javascript
  • 10. Widget Dashboard • single page Javascript app, built in Backbone • pulls data from API server • more and more features caused code bloat • Widget Factory does not know much Javascript
  • 11. Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface.
  • 12. Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface.
  • 13. Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface.
  • 14. Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface.
  • 15. Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface.
  • 16. Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface.
  • 17. var MyView = Backbone.View.extend({ el: '#content', template: _.template($('#template').text()), render: function() { this.$el.html(this.template({ language: 'Backbone' })); return this; } }); var myView = new MyView(); myView.render(); <div id="content"></div> <script id="template" type="text/template"> <h1>Hello from <%- language %>!</h1> </script> http://codepen.io/coffeeandcode/pen/VYmZjK
  • 19. : Issues • library does not do much, never will • easy to start integration, difficult things around edges • lack of project architecture leaves a lot up to the developers • easy to create memory leaks
  • 20. Widget Dashboard 2.0 • app rewritten in Ember.js • goal was to write less code, easier to teach • less moving parts == less to screw up • Widget Factory still does not know much JS
  • 21. Widget Dashboard 2.0 • app rewritten in Ember.js • goal was to write less code, easier to teach • less moving parts == less to screw up • Widget Factory still does not know much JS
  • 22. A framework for creating ambitious web applications.
  • 23. A framework for creating ambitious web applications.
  • 24. A framework for creating ambitious web applications.
  • 25. Ember.js is an open-source client-side JavaScript web application framework based on the model-view- controller (MVC) software architectural pattern. It allows developers to create scalable single-page applications by incorporating common idioms and best practices into a framework that provides a rich object model, declarative two-way data binding, computed properties, automatically-updating templates powered by Handlebars.js, and a router for managing application state.[1] 1. http://en.wikipedia.org/wiki/Ember.js
  • 26. Ember.js is an open-source client-side JavaScript web application framework based on the model-view- controller (MVC) software architectural pattern. It allows developers to create scalable single-page applications by incorporating common idioms and best practices into a framework that provides a rich object model, declarative two-way data binding, computed properties, automatically-updating templates powered by Handlebars.js, and a router for managing application state.[1] 1. http://en.wikipedia.org/wiki/Ember.js
  • 27. Ember.js is an open-source client-side JavaScript web application framework based on the model-view- controller (MVC) software architectural pattern. It allows developers to create scalable single-page applications by incorporating common idioms and best practices into a framework that provides a rich object model, declarative two-way data binding, computed properties, automatically-updating templates powered by Handlebars.js, and a router for managing application state.[1] 1. http://en.wikipedia.org/wiki/Ember.js
  • 28. Ember.js is an open-source client-side JavaScript web application framework based on the model-view- controller (MVC) software architectural pattern. It allows developers to create scalable single-page applications by incorporating common idioms and best practices into a framework that provides a rich object model, declarative two-way data binding, computed properties, automatically-updating templates powered by Handlebars.js, and a router for managing application state.[1] 1. http://en.wikipedia.org/wiki/Ember.js
  • 29. Ember.js is an open-source client-side JavaScript web application framework based on the model-view- controller (MVC) software architectural pattern. It allows developers to create scalable single-page applications by incorporating common idioms and best practices into a framework that provides a rich object model, declarative two-way data binding, computed properties, automatically-updating templates powered by Handlebars.js, and a router for managing application state.[1] 1. http://en.wikipedia.org/wiki/Ember.js
  • 30. Ember.js is an open-source client-side JavaScript web application framework based on the model-view- controller (MVC) software architectural pattern. It allows developers to create scalable single-page applications by incorporating common idioms and best practices into a framework that provides a rich object model, declarative two-way data binding, computed properties, automatically-updating templates powered by Handlebars.js, and a router for managing application state.[1] 1. http://en.wikipedia.org/wiki/Ember.js
  • 31. var App = Ember.Application.create(); App.IndexRoute = Ember.Route.extend({ model: function() { return { language: 'Ember' }; } }); <div id="content"></div> <script data-template-name="index" type="text/x-handlebars"> <h1>Hello from {{language}}!</h1> </script> http://codepen.io/coffeeandcode/pen/ZYBzad
  • 33. : Issues • very opinionated, very large codebase • does black magic with Handlebars • assumes you need the big guns • two-way data binding by default • easy to shoot yourself in the foot
  • 35. Performance Civic i-VTEC Engine by Kris Carillo: https://flic.kr/p/7VFLeC
  • 36. Widget Dashboard Item 1 Hunger Level 72% Room Orange # of Yawns 12.4 0 50 100 10am 12pm Item 2 Hunger Level 12% Room Salon D # of Yawns 204 0 50 100 10am 12pm Item 3 Hunger Level 45% Room Cypress # of Yawns 16 0 50 100 10am 12pm
  • 38. Poor Man’s Testing 0 175 350 525 700 seconds 10 20 30 120 Ember App MB of memory
  • 40. $ find backbone -name '*.js' | xargs wc -wcl 12 36 197 backbone/js/app.js 41 166 1130 backbone/js/collections/todos.js 26 78 536 backbone/js/models/todo.js 26 67 499 backbone/js/routers/router.js 131 428 3703 backbone/js/views/app-view.js 132 496 3888 backbone/js/views/todo-view.js 368 1271 9953 total $ find emberjs -name '*.js' | xargs wc -wcl 6 14 159 emberjs/js/app.js 59 165 1486 emberjs/js/controllers/todo_controller.js 51 128 1195 emberjs/js/controllers/todos_controller.js 16 38 432 emberjs/js/controllers/todos_list_controller.js 11 31 262 emberjs/js/helpers/pluralize.js 9 18 158 emberjs/js/models/todo.js 38 78 816 emberjs/js/router.js 12 33 298 emberjs/js/views/todo_input_component.js 202 505 4806 total lines words chars
  • 42. People Problem • lack of knowledge in front-end technologies • not enough pairing and information sharing • team skill level was not adequate to pick up where Vendor Co. left off • amount of documentation was lacking
  • 43. Our Solution • focus on knowledge sharing • pair programming / technical side projects • build what the client understands • built JS workflow with the client’s help • explicit code, no magic • uses CommonJS and Browserify • use technologies with little change and a wealth of documentation
  • 44. Explicit Code + var MainLayout = require('../views/shared/layout'); module.exports = MainLayout.extend({ template: 'dashboard/layout', ui: { tooltipFields: '[data-tooltip=true]' }, onRender: function() { // apply jQuery plugin to tooltip fields this.ui.tooltipFields.tooltip(); } });
  • 45. Backbone.Marionette is a composite application library for Backbone.js that aims to simplify the construction of large scale JavaScript applications. It is a collection of common design and implementation patterns found in the applications that we have been building with Backbone, and includes pieces inspired by composite application architectures, event-driven architectures, messaging architectures, and more.
  • 46. Backbone.Marionette is a composite application library for Backbone.js that aims to simplify the construction of large scale JavaScript applications. It is a collection of common design and implementation patterns found in the applications that we have been building with Backbone, and includes pieces inspired by composite application architectures, event-driven architectures, messaging architectures, and more.
  • 47. Backbone.Marionette is a composite application library for Backbone.js that aims to simplify the construction of large scale JavaScript applications. It is a collection of common design and implementation patterns found in the applications that we have been building with Backbone, and includes pieces inspired by composite application architectures, event-driven architectures, messaging architectures, and more.
  • 48. Backbone.Marionette is a composite application library for Backbone.js that aims to simplify the construction of large scale JavaScript applications. It is a collection of common design and implementation patterns found in the applications that we have been building with Backbone, and includes pieces inspired by composite application architectures, event-driven architectures, messaging architectures, and more.
  • 49. Backbone.Marionette is a composite application library for Backbone.js that aims to simplify the construction of large scale JavaScript applications. It is a collection of common design and implementation patterns found in the applications that we have been building with Backbone, and includes pieces inspired by composite application architectures, event-driven architectures, messaging architectures, and more.
  • 50. var MyView = Marionette.ItemView.extend({ el: '#content', template: '#template', serializeData: function() { return { language: 'Marionette' }; } }); var myView = new MyView(); myView.render(); <div id="content"></div> <script id="template" type="text/template"> <h1>Hello from <%- language %>!</h1> </script> http://codepen.io/coffeeandcode/pen/raWBWE
  • 52. Activity Monitor 0 175 350 525 700 seconds 10 20 30 120 Ember App Backbone App
  • 53. My Challenge • build apps with production data in mind • consider non-technical needs of project • show love for all technology choices, but be hesitant to adopt new libraries
  • 55. Resources Slide 1 image: https://flic.kr/p/8Y8T5T Slide 2 image: Keynote default :) Slide 35 image: https://flic.kr/p/7VFLeC Slide 39: TodoMVC performance work by Filament Group: http:// www.filamentgroup.com/lab/mv-initial-load-times.html Slide 41 image: the internets (don’t know source)

Editor's Notes

  1. explain Coffee + Code
  2. Time Machine: my cohort, Eric Browning, is talking about “No More Static Comps: Design Process in the Modern World” at 11am in Salon D. I’m a consultant that gets to work with lots of different clients and I get to write (and see) a lot of different code. To keep it professional, no names in presentation or during questions besides my own.
  3. Most programmers get paid to write code. They work on different projects.
  4. I get paid to work on MANY different projects. Get to see a lot of good/bad practices, work in different languages, solve different problems. I can bring unique perspective to projects.
  5. Client = Widget Factory if you haven’t guessed, no real names please
  6. Widget Factory hired Vendor Co to build a web application. A dashboard. Many moving pieces / parts. We will focus on front-end UI.
  7. * show latest numbers from server * chart shows historical numbers over past X hours * data loaded when app loads and polls every X seconds
  8. data from API server was in bloated format adding features felt like it was taking too much time
  9. there was some code pairing and information sharing to help bridge gap everyone had best intentions in mind
  10. best intentions in mind Ember has easy data binding, easily update views when data updates
  11. I used Backbone in many projects before, comfortable
  12. laughable, does not provide much in terms of “structure” organizes jQuery spaghetti code (still useful)
  13. the “M” in MVC, organization of data JS Objects and Arrays with enumeration management methods
  14. utilize events for having app adapt to changes in state uniform way to manage DOM events and create custom events
  15. logic to map data and state changes to what the user sees and interacts with ends up doing most of the work
  16. * views have events as well, no biggie nowadays but useful for separation of responsibility
  17. pushes JSON out of the box can be customized, but it can be painful and require a lot of custom code
  18. opinionated collection of “best practices” does a lot of the grunt work for you
  19. * created to tackle complicated web applications
  20. (highlight parts of the definition giving a real explanation of what that means for the developer)
  21. * same as Backbone and most front-end “frameworks”
  22. this is where Ember truly shines directional team very interested in providing best of breed, open to changing technologies
  23. start to build relationships between data separate library called Ember.data that handles async data retrieval
  24. Backbone all manual, Ember is automatic
  25. router gets quite a bit of praise much more powerful than Backbones, handles tiers of triggered controllers (nice if your app plays well with well structured urls) I’m not used to it yet
  26. surprised to see conversations of Rails bloat, but flocking to Ember two way data binding by default produces unnecessary overhead follows Rails, easy to write code, also easy to not know what you wrote (how much computation behind the scenes?) app still suffered from two big issues
  27. * original app looked great with 10 - 20 items * needed to show more than 500, also limited by other architecture choices load all the dataz! write less code, bind more things render it all
  28. Comparing Backbone w/Marionette to Vendor Co’s
  29. took TodoMVC app and “productionized” assets to take performance numbers
  30. I downloaded TodoMVC examples and got line counts
  31. what I believe was the biggest issue with Vendor Co’s app Widget Factory can’t maintain something they don’t understand they would have been disappointed in any solution they received
  32. * technical solution delivered that did not account for non-technical project needs * how often things broke in lib or architectural decisions
  33. * keyword is “our”, built entire structure with assistance from Widget Factory employees * discuss how our solution addressed non-technical needs of project * team uplift / pairing * designing a workflow together * explicit code rather than implicit magic * amount (and quality) of documentation for js libs and css framework (bootstrap) abstracted JS workflow into common Grunt library abstracted common application system and code into common UI library
  34. this will create a Layout based on your application’s main layout you “export” what you want other files to be able to require all dependencies must be required Browserify handles dependency management all source is concatenated into one js file (automatically skips unused source code)
  35. built upon Backbone and Backbone.Wreqr (messaging patterns for Backbone apps) Backbone.BabySitter (manage child views) * Wreqr changing to Backbone Radio in upcoming release of Marionette
  36. removes the copy/paste boilerplate for view rendering from Backbone
  37. bringing design patterns into Backbone: Application singleton module loader view hierarchies view behaviors (sectioned responsibilities for a single view) template caching view regions / region managers
  38. view hierarchies ItemView, LayoutView, CollectionView, CompositeView Regions and RegionManagers Backbone.Wreqr / Radio that uses channels (ex: “global”) commands (do something, don’t care about response) event aggregator (custom events attached to your application) request / response (return data from request)
  39. My challege to all of you consider non-technical needs or else miss expectations on delivery hesitate to introduce new technologies to solve the problem think about the REAL problems and what it takes to solve them, do not focus on only technical problems
  40. I’m Jonathan Knapp of Coffee and Code, thanks!