SlideShare a Scribd company logo
Kevin Ball @kbal11
Modern Javascript
An Overview of the Javascript Ecosystem in 2015
Kevin Ball @kbal11
Why Javascript?
Image Source: https://twitter.com/dberkholz/status/395922559151009792
Kevin Ball @kbal11
Why Javascript?
Image Source: http://www.internetlivestats.com/total-number-of-websites/#trend
Kevin Ball @kbal11
Why Javascript?
Source: Vision Mobile 2014 Developer Economics Report
Kevin Ball @kbal11
Great, where do I start?
NPM
Bower
Node.js Grunt
Gulp
Broccoli
Angular
Ember
BackboneExpress
AMD
React
io.js
Require.js
ES6 Modules
TypeScript
CoffeeScript Dart
jQuery
Kevin Ball @kbal11
Let’s Break It Down
• Execution Environments (Browsers, node.js, io.js)
• Webservers (Express, Hapi)
• Package Management (NPM, Bower)
• Task Runners and Build (Grunt, Gulp, Broccoli)
• Front End Tools (jQuery, Backbone, Angular, Ember, React)
• Module Systems (AMD, Require, Node Modules, ES6 Modules)
• Javascript “Flavors” (CoffeeScript, TypeScript, Dart, ES6)
Kevin Ball @kbal11
Let’s Break It Down
Your Application
Code
Client Application Lifecycle
Compilation &
Packaging
Webserver
User Browser
Kevin Ball @kbal11
Let’s Break It Down
• Execution Environments (Browsers, node.js, io.js)
• Webservers (Express, Hapi)
• Package Management (NPM, Bower)
• Task Runners and Build (Grunt, Gulp, Broccoli)
• Front End Tools (jQuery, Backbone, Angular, Ember, React)
• Module Systems (AMD, Require, Node Modules, ES6 Modules)
• Javascript “Flavors” (CoffeeScript, TypeScript, Dart, ES6)
Kevin Ball @kbal11
Let’s Break It Down
• Execution Environments (Browsers, node.js, io.js)
• Webservers (Express, Hapi)
• Package Management (NPM, Bower)
• Task Runners and Build (Grunt, Gulp, Broccoli)
• Front End Tools (jQuery, Backbone, Angular, Ember, React)
• Module Systems (AMD, Require, Node Modules, ES6 Modules)
• Javascript “Flavors” (CoffeeScript, TypeScript, Dart, ES6)
Your Application
Code
Kevin Ball @kbal11
• Execution Environments (Browsers, node.js, io.js)
• Webservers (Express, Hapi)
• Package Management (NPM, Bower)
• Task Runners and Build (Grunt, Gulp, Broccoli)
• Front End Tools (jQuery, Backbone, Angular, Ember, React)
• Module Systems (AMD, Require, Node Modules, ES6 Modules)
• Javascript “Flavors” (CoffeeScript, TypeScript, Dart, ES6)
Let’s Break It Down Your Application
Code
Compilation &
Packaging
Kevin Ball @kbal11
• Execution Environments (Browsers, node.js, io.js)
• Webservers (Express, Hapi)
• Package Management (NPM, Bower)
• Task Runners and Build (Grunt, Gulp, Broccoli)
• Front End Tools (jQuery, Backbone, Angular, Ember, React)
• Module Systems (AMD, Require, Node Modules, ES6 Modules)
• Javascript “Flavors” (CoffeeScript, TypeScript, Dart, ES6)
Let’s Break It Down Your Application
Code
Webserver
Kevin Ball @kbal11
• Execution Environments (Browsers, node.js, io.js)
• Webservers (Express, Hapi)
• Package Management (NPM, Bower)
• Task Runners and Build (Grunt, Gulp, Broccoli)
• Front End Tools (jQuery, Backbone, Angular, Ember, React)
• Module Systems (AMD, Require, Node Modules, ES6 Modules)
• Javascript “Flavors” (CoffeeScript, TypeScript, Dart, ES6)
Let’s Break It Down Your Application
Code
User Browser
Kevin Ball @kbal11
Let’s Break It Down
Your Application
Code
Client Application Lifecycle
Compilation &
Packaging
Webserver
User Browser
Kevin Ball @kbal11
Your Application Code
• Javascript “Flavors”
• Front End Tools
• Module Systems
• Package Management
Kevin Ball @kbal11
Javascript “Flavors”
• “Plain old Javascript” (EcmaScript 5)
• EcmaScript 6
• Coffeescript
• Typescript
• Dart
Kevin Ball @kbal11
Javascript “Flavors”
Image Source: http://hakumilol123.deviantart.com/art/Luffy-is-confused-332924357
Kevin Ball @kbal11
Javascript “Flavors”
• ES5 requires the least work (no build required).
• ES6 is where the world is going.
• Coffeescript popular among ruby developers.
• Typescript adds strict typing & structure.
• Dart appears to be orphaned.
• Some tools emphasize one flavor or another.
Kevin Ball @kbal11
Front End Tools
• jQuery
• Backbone
• Angular
• Ember
• React
Kevin Ball @kbal11
jQuery
• The “Browser API” that should have been.
• Used on over 60% of ALL websites.
• Easy to learn, easy to use.
Kevin Ball @kbal11
Backbone
• Lightweight, minimalist MVC.
• Straightforward to learn.
• Minimalistic - doesn’t provide structure, just
tools.
Kevin Ball @kbal11
Angular
• Opinionated framework.
• Huge community, backed by Google.
• Very structured, written for testability.
• Big learning curve from novice to expert.
• 1.0 in Javascript, 2.0 in Typescript.
Kevin Ball @kbal11
Ember
• Opinionated framework.
• Big community focus.
• Big learning curve.
• Big performance focus.
• Absorbing many of the best concepts from other
frameworks.
• Jumped in head-first on ES6.
Kevin Ball @kbal11
React
• View layer only.
• Built by & used extensively by Facebook.
• “Different” approach to bindings and state.
• Very fast.
Kevin Ball @kbal11
Front End Tools
• If you’re just getting started, start with jQuery.
• Backbone is the easiest next step.
• Angular 2.0 looks good but they’re abandoning
backwards compatibility.
• Ember appears to be absorbing all of the good
ideas, with focus on maintaining compatibility.
• React is super cool and very different.
Kevin Ball @kbal11
Module Systems
–Eloquent JavaScript
“Most modern programming languages have
some kind of module system built in. Not
JavaScript. Once again, we have to invent
something ourselves.”
Kevin Ball @kbal11
Module Systems
• AMD (RequireJS)
• CommonJS (Node Modules)
• ES6 Modules
Kevin Ball @kbal11
Module Systems
• AMD (RequireJS)
• Asynchronous, suited to browser environment.
• CommonJS (Node Modules)
• ES6 Modules
Kevin Ball @kbal11
Module Systems
• AMD (RequireJS)
• Asynchronous, suited to browser environment.
• CommonJS (Node Modules)
• Synchronous. Package for browser with web
pack or browserify.
• ES6 Modules
Kevin Ball @kbal11
Module Systems
• AMD (RequireJS)
• Asynchronous, suited to browser environment.
• CommonJS (Node Modules)
• Synchronous. Package for browser with web pack
or browserify.
• ES6 Modules
• The future.
Kevin Ball @kbal11
Package Management
• NPM
• bower
Kevin Ball @kbal11
Package Management
• NPM
• Node Package Manager
• bower
Kevin Ball @kbal11
Package Management
• NPM
• Node Package Manager.
• Bower
• “Front End Package Manager”
Kevin Ball @kbal11
Let’s Break It Down
Your Application
Code
Client Application Lifecycle
Compilation &
Packaging
Webserver
User Browser
Kevin Ball @kbal11
Compilation and Packaging
• Minifiers and Concatinators
• Compilers and Transpilers
• Task Runners to get it all done
Kevin Ball @kbal11
Minifiers and Concatinators
• Exist to minimize the number and size of web
requests.
• “Rewrite” javascript changing names of all
internal variables to as short as possible.
• Concatinators put it all together to only require
one request.
• Source maps allow you to trace it back for debug.
Kevin Ball @kbal11
Compilers and Transpilers
• How you get from ES6/CoffeeScript/TypeScript/
etc to “Plain Old Javascript”.
• Typically run first in your build chain.
• Source maps doubly important.
Kevin Ball @kbal11
Task Runners
• Grunt
• Gulp
• Broccoli
Kevin Ball @kbal11
Task Runners: Grunt
• Most popular task runner in Node world.
• Configuration based using JSON Objects.
• Communication between tasks via files.
Kevin Ball @kbal11
Sample Gruntfile.js
module.exports = function(grunt) {
grunt.initConfig({
jshint: {
files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'],
options: {
globals: {
jQuery: true
}
}
},
watch: {
files: ['<%= jshint.files %>'],
tasks: ['jshint']
}
});
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-watch');
!
grunt.registerTask('default', ['jshint']);
};
Kevin Ball @kbal11
Task Runners: Gulp
• 2nd most popular Node task runner.
• Code over configuration.
• Communication between tasks as pipes.
Kevin Ball @kbal11
Sample gulpfile.js
var gulp = require(‘gulp’);
var jshint = require(‘gulp-jshint’);
!
gulp.task(‘jshint’, function() {
return gulp.src(['gulpfile.js', 'src/**/*.js', ‘test/**/*.js’])
.pipe(jshint())
.pipe(jshint.reporter(‘jshint-stylish’))
.pipe(jshint.reporter(‘fail’));
});
!
gulp.watch([‘src/**/*.js’, ‘test/**/*.js’], ‘jshint’);
gulp.task(‘default’, ‘jshint’);
Kevin Ball @kbal11
Task Runners: Broccoli
• Really a build tool, not a task runner.
• Newest of the 3, still immature (especially on
Windows).
• Tree-based system.
Kevin Ball @kbal11
Sample Brocfile.js
// Brocfile.js
var concat = require('broccoli-concat'),
pickFiles = require('broccoli-static-compiler'),
mergeTrees = require('broccoli-merge-trees');
!
// concat the JS
var scripts = concat('app/', {
inputFiles: ['**/*.js'],
outputFile: '/assets/scripts.js'
});
// concat the CSS
var styles = concat('app/styles', {
inputFiles: ['**/*.css'],
outputFile: '/assets/styles.css'
});
!
// and merge all the trees together
module.exports = mergeTrees([scripts, styles]);
Kevin Ball @kbal11
Task Runners
• Grunt - Good for beginners, most familiar style.!
• Gulp
• Broccoli
Kevin Ball @kbal11
Task Runners
• Grunt
• Gulp - Good for Linux/piped background.!
• Broccoli
Kevin Ball @kbal11
Task Runners
• Grunt
• Gulp
• Broccoli - The next big thing. Experts should
check it out.
Kevin Ball @kbal11
Let’s Break It Down
Your Application
Code
Client Application Lifecycle
Compilation &
Packaging
Webserver
User Browser
Kevin Ball @kbal11
Webserver
• Execution Environments
• Webservers
Kevin Ball @kbal11
Execution Environments
• Browsers
• Node.js
• io.js
Kevin Ball @kbal11
Node.js
• Server-side javascript execution framework
• Built on Chrome’s v8 javascript runtime
• Asynchronous, event-driven framework
• Defines it’s own modules system
Kevin Ball @kbal11
io.js
• Fork of Node.js
• Moves much more quickly
• More community-managed
• In the process of merging back with node.js
Kevin Ball @kbal11
Webservers
• Express
• Hapi
• Koa
Kevin Ball @kbal11
Webservers
• Express
• The de facto standard
• Hapi
• Koa
Kevin Ball @kbal11
Webservers
• Express
• The de facto standard
• Hapi
• Configuration over code
• Koa
Kevin Ball @kbal11
Webservers
• Express
• The de facto standard
• Hapi
• Configuration over code
• Koa
• Minimalist successor to Express
Kevin Ball @kbal11
Let’s Break It Down
Your Application
Code
Client Application Lifecycle
Compilation &
Packaging
Webserver
User Browser
Kevin Ball @kbal11
User Browser
• The “Traditional” place where javascript runs
• May be a desktop browser, but may also be on
laptop, mobile browser, or even embedded
within a mobile application.
• Different browsers have different levels of spec
support.
Kevin Ball @kbal11
Cross-Browser Support
• Typically support last 2 versions of each
browser.
• Quickest way to good cross-browser support is
use frameworks with good cross-browser
support.
• Things mostly break down on the bleeding
edge.
Kevin Ball @kbal11
But really, where do I start?
• yeoman
• ember-cli
Let someone else choose for you!
Kevin Ball @kbal11
Kevin Ball @kbal11
Javascript is the Future
I’ll see you there.
Kevin Ball
http://kevinball.com
http://twitter.com/kbal11

More Related Content

What's hot

Write Once, Run Everywhere - Ember.js Munich
Write Once, Run Everywhere - Ember.js MunichWrite Once, Run Everywhere - Ember.js Munich
Write Once, Run Everywhere - Ember.js Munich
Mike North
 
improving the performance of Rails web Applications
improving the performance of Rails web Applicationsimproving the performance of Rails web Applications
improving the performance of Rails web Applications
John McCaffrey
 
jQuery Chicago 2014 - Next-generation JavaScript Testing
jQuery Chicago 2014 - Next-generation JavaScript TestingjQuery Chicago 2014 - Next-generation JavaScript Testing
jQuery Chicago 2014 - Next-generation JavaScript Testing
Vlad Filippov
 
Webcomponents are your frameworks best friend
Webcomponents are your frameworks best friendWebcomponents are your frameworks best friend
Webcomponents are your frameworks best friend
Filip Bruun Bech-Larsen
 
[Srijan Wednesday Webinars] Developing Large Scale Applications in AngularJS
[Srijan Wednesday Webinars] Developing Large Scale Applications in AngularJS[Srijan Wednesday Webinars] Developing Large Scale Applications in AngularJS
[Srijan Wednesday Webinars] Developing Large Scale Applications in AngularJS
Srijan Technologies
 
The Dark Side of Single Page Applications
The Dark Side of Single Page ApplicationsThe Dark Side of Single Page Applications
The Dark Side of Single Page Applications
Dor Kalev
 
Frameworks and webcomponents
Frameworks and webcomponentsFrameworks and webcomponents
Frameworks and webcomponents
Filip Bruun Bech-Larsen
 
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksBuilding Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
FITC
 
Web a Quebec - JS Debugging
Web a Quebec - JS DebuggingWeb a Quebec - JS Debugging
Web a Quebec - JS Debugging
Rami Sayar
 
Cvcc performance tuning
Cvcc performance tuningCvcc performance tuning
Cvcc performance tuning
John McCaffrey
 
Freelancing and side-projects on Rails
Freelancing and side-projects on RailsFreelancing and side-projects on Rails
Freelancing and side-projects on Rails
John McCaffrey
 
Agile sites @ telmore
Agile sites @ telmore Agile sites @ telmore
Agile sites @ telmore
Michele Sciabarrà
 
Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Untangling - fall2017 - week 9
Untangling - fall2017 - week 9
Derek Jacoby
 
Agile sites2
Agile sites2Agile sites2
Agile sites2
Michele Sciabarrà
 
Agile sites311training
Agile sites311trainingAgile sites311training
Agile sites311training
Michele Sciabarrà
 
React101 v3
React101 v3React101 v3
React101 v3
Janice Gluck
 
Windycityrails page performance
Windycityrails page performanceWindycityrails page performance
Windycityrails page performance
John McCaffrey
 
Javascript Frameworks Comparison
Javascript Frameworks ComparisonJavascript Frameworks Comparison
Javascript Frameworks Comparison
Deepu S Nath
 
MEAN Stack WeNode Barcelona Workshop
MEAN Stack WeNode Barcelona WorkshopMEAN Stack WeNode Barcelona Workshop
MEAN Stack WeNode Barcelona WorkshopValeri Karpov
 
Why use Go for web development?
Why use Go for web development?Why use Go for web development?
Why use Go for web development?
Weng Wei
 

What's hot (20)

Write Once, Run Everywhere - Ember.js Munich
Write Once, Run Everywhere - Ember.js MunichWrite Once, Run Everywhere - Ember.js Munich
Write Once, Run Everywhere - Ember.js Munich
 
improving the performance of Rails web Applications
improving the performance of Rails web Applicationsimproving the performance of Rails web Applications
improving the performance of Rails web Applications
 
jQuery Chicago 2014 - Next-generation JavaScript Testing
jQuery Chicago 2014 - Next-generation JavaScript TestingjQuery Chicago 2014 - Next-generation JavaScript Testing
jQuery Chicago 2014 - Next-generation JavaScript Testing
 
Webcomponents are your frameworks best friend
Webcomponents are your frameworks best friendWebcomponents are your frameworks best friend
Webcomponents are your frameworks best friend
 
[Srijan Wednesday Webinars] Developing Large Scale Applications in AngularJS
[Srijan Wednesday Webinars] Developing Large Scale Applications in AngularJS[Srijan Wednesday Webinars] Developing Large Scale Applications in AngularJS
[Srijan Wednesday Webinars] Developing Large Scale Applications in AngularJS
 
The Dark Side of Single Page Applications
The Dark Side of Single Page ApplicationsThe Dark Side of Single Page Applications
The Dark Side of Single Page Applications
 
Frameworks and webcomponents
Frameworks and webcomponentsFrameworks and webcomponents
Frameworks and webcomponents
 
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksBuilding Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
 
Web a Quebec - JS Debugging
Web a Quebec - JS DebuggingWeb a Quebec - JS Debugging
Web a Quebec - JS Debugging
 
Cvcc performance tuning
Cvcc performance tuningCvcc performance tuning
Cvcc performance tuning
 
Freelancing and side-projects on Rails
Freelancing and side-projects on RailsFreelancing and side-projects on Rails
Freelancing and side-projects on Rails
 
Agile sites @ telmore
Agile sites @ telmore Agile sites @ telmore
Agile sites @ telmore
 
Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Untangling - fall2017 - week 9
Untangling - fall2017 - week 9
 
Agile sites2
Agile sites2Agile sites2
Agile sites2
 
Agile sites311training
Agile sites311trainingAgile sites311training
Agile sites311training
 
React101 v3
React101 v3React101 v3
React101 v3
 
Windycityrails page performance
Windycityrails page performanceWindycityrails page performance
Windycityrails page performance
 
Javascript Frameworks Comparison
Javascript Frameworks ComparisonJavascript Frameworks Comparison
Javascript Frameworks Comparison
 
MEAN Stack WeNode Barcelona Workshop
MEAN Stack WeNode Barcelona WorkshopMEAN Stack WeNode Barcelona Workshop
MEAN Stack WeNode Barcelona Workshop
 
Why use Go for web development?
Why use Go for web development?Why use Go for web development?
Why use Go for web development?
 

Similar to Modern javascript

Backbonemeetup
BackbonemeetupBackbonemeetup
Backbonemeetup
Ben McCormick
 
Mvvm knockout vs angular
Mvvm knockout vs angularMvvm knockout vs angular
Mvvm knockout vs angular
Basarat Syed
 
RubyConf China 2015 - Rails off assets pipeline
RubyConf China 2015 - Rails off assets pipelineRubyConf China 2015 - Rails off assets pipeline
RubyConf China 2015 - Rails off assets pipeline
Florian Dutey
 
JavaScript Build System Battle Royale | PrDC 2017
JavaScript Build System Battle Royale | PrDC 2017JavaScript Build System Battle Royale | PrDC 2017
JavaScript Build System Battle Royale | PrDC 2017
David Wesst
 
Angular 2 overview
Angular 2 overviewAngular 2 overview
Angular 2 overview
Jesse Warden
 
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Arun Gupta
 
AngularJS - Architecture decisions in a large project 
AngularJS - Architecture decisionsin a large project AngularJS - Architecture decisionsin a large project 
AngularJS - Architecture decisions in a large project 
Elad Hirsch
 
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Nilesh Panchal
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO DevsWO Community
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and Gaelyk
Guillaume Laforge
 
Rails 3.1
Rails 3.1Rails 3.1
Rails 3.1
Lori Olson
 
CI/CD and Asset Serving for Single Page Apps
CI/CD and Asset Serving for Single Page AppsCI/CD and Asset Serving for Single Page Apps
CI/CD and Asset Serving for Single Page Apps
Mike North
 
WebObjects Developer Tools
WebObjects Developer ToolsWebObjects Developer Tools
WebObjects Developer ToolsWO Community
 
Java EE 7 Soup to Nuts at JavaOne 2014
Java EE 7 Soup to Nuts at JavaOne 2014Java EE 7 Soup to Nuts at JavaOne 2014
Java EE 7 Soup to Nuts at JavaOne 2014
Arun Gupta
 
Ohio Devfest - Visual Analysis with GCP
Ohio Devfest - Visual Analysis with GCPOhio Devfest - Visual Analysis with GCP
Ohio Devfest - Visual Analysis with GCP
Wesley Workman
 
Angular2.0@Shanghai0319
Angular2.0@Shanghai0319Angular2.0@Shanghai0319
Angular2.0@Shanghai0319
Bibby Chung
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on RailsAvi Kedar
 
There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...
There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...
There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...
Chef
 
Inside Wordnik's Architecture
Inside Wordnik's ArchitectureInside Wordnik's Architecture
Inside Wordnik's Architecture
Tony Tam
 
React.JS Conf & F8
React.JS Conf & F8React.JS Conf & F8
React.JS Conf & F8
Hsuan Fu Lien
 

Similar to Modern javascript (20)

Backbonemeetup
BackbonemeetupBackbonemeetup
Backbonemeetup
 
Mvvm knockout vs angular
Mvvm knockout vs angularMvvm knockout vs angular
Mvvm knockout vs angular
 
RubyConf China 2015 - Rails off assets pipeline
RubyConf China 2015 - Rails off assets pipelineRubyConf China 2015 - Rails off assets pipeline
RubyConf China 2015 - Rails off assets pipeline
 
JavaScript Build System Battle Royale | PrDC 2017
JavaScript Build System Battle Royale | PrDC 2017JavaScript Build System Battle Royale | PrDC 2017
JavaScript Build System Battle Royale | PrDC 2017
 
Angular 2 overview
Angular 2 overviewAngular 2 overview
Angular 2 overview
 
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
 
AngularJS - Architecture decisions in a large project 
AngularJS - Architecture decisionsin a large project AngularJS - Architecture decisionsin a large project 
AngularJS - Architecture decisions in a large project 
 
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO Devs
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and Gaelyk
 
Rails 3.1
Rails 3.1Rails 3.1
Rails 3.1
 
CI/CD and Asset Serving for Single Page Apps
CI/CD and Asset Serving for Single Page AppsCI/CD and Asset Serving for Single Page Apps
CI/CD and Asset Serving for Single Page Apps
 
WebObjects Developer Tools
WebObjects Developer ToolsWebObjects Developer Tools
WebObjects Developer Tools
 
Java EE 7 Soup to Nuts at JavaOne 2014
Java EE 7 Soup to Nuts at JavaOne 2014Java EE 7 Soup to Nuts at JavaOne 2014
Java EE 7 Soup to Nuts at JavaOne 2014
 
Ohio Devfest - Visual Analysis with GCP
Ohio Devfest - Visual Analysis with GCPOhio Devfest - Visual Analysis with GCP
Ohio Devfest - Visual Analysis with GCP
 
Angular2.0@Shanghai0319
Angular2.0@Shanghai0319Angular2.0@Shanghai0319
Angular2.0@Shanghai0319
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
 
There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...
There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...
There and Back Again: How We Drank the Chef Kool-Aid, Sobered Up, and Learned...
 
Inside Wordnik's Architecture
Inside Wordnik's ArchitectureInside Wordnik's Architecture
Inside Wordnik's Architecture
 
React.JS Conf & F8
React.JS Conf & F8React.JS Conf & F8
React.JS Conf & F8
 

More from Kevin Ball

Npm Shrinkwrap
Npm ShrinkwrapNpm Shrinkwrap
Npm Shrinkwrap
Kevin Ball
 
Understanding the Nesting Structure of the Ember.js View Layer
Understanding the Nesting Structure of the Ember.js View LayerUnderstanding the Nesting Structure of the Ember.js View Layer
Understanding the Nesting Structure of the Ember.js View Layer
Kevin Ball
 
Intro to Javascript
Intro to JavascriptIntro to Javascript
Intro to JavascriptKevin Ball
 
Underscore.js
Underscore.jsUnderscore.js
Underscore.js
Kevin Ball
 
Omniauth: Future Proof Your Authentication
Omniauth: Future Proof Your AuthenticationOmniauth: Future Proof Your Authentication
Omniauth: Future Proof Your Authentication
Kevin Ball
 
Ruby 1.9 Fibers
Ruby 1.9 FibersRuby 1.9 Fibers
Ruby 1.9 Fibers
Kevin Ball
 

More from Kevin Ball (6)

Npm Shrinkwrap
Npm ShrinkwrapNpm Shrinkwrap
Npm Shrinkwrap
 
Understanding the Nesting Structure of the Ember.js View Layer
Understanding the Nesting Structure of the Ember.js View LayerUnderstanding the Nesting Structure of the Ember.js View Layer
Understanding the Nesting Structure of the Ember.js View Layer
 
Intro to Javascript
Intro to JavascriptIntro to Javascript
Intro to Javascript
 
Underscore.js
Underscore.jsUnderscore.js
Underscore.js
 
Omniauth: Future Proof Your Authentication
Omniauth: Future Proof Your AuthenticationOmniauth: Future Proof Your Authentication
Omniauth: Future Proof Your Authentication
 
Ruby 1.9 Fibers
Ruby 1.9 FibersRuby 1.9 Fibers
Ruby 1.9 Fibers
 

Recently uploaded

Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Globus
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
WSO2
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 

Recently uploaded (20)

Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 

Modern javascript

  • 1. Kevin Ball @kbal11 Modern Javascript An Overview of the Javascript Ecosystem in 2015
  • 2. Kevin Ball @kbal11 Why Javascript? Image Source: https://twitter.com/dberkholz/status/395922559151009792
  • 3. Kevin Ball @kbal11 Why Javascript? Image Source: http://www.internetlivestats.com/total-number-of-websites/#trend
  • 4. Kevin Ball @kbal11 Why Javascript? Source: Vision Mobile 2014 Developer Economics Report
  • 5. Kevin Ball @kbal11 Great, where do I start? NPM Bower Node.js Grunt Gulp Broccoli Angular Ember BackboneExpress AMD React io.js Require.js ES6 Modules TypeScript CoffeeScript Dart jQuery
  • 6.
  • 7. Kevin Ball @kbal11 Let’s Break It Down • Execution Environments (Browsers, node.js, io.js) • Webservers (Express, Hapi) • Package Management (NPM, Bower) • Task Runners and Build (Grunt, Gulp, Broccoli) • Front End Tools (jQuery, Backbone, Angular, Ember, React) • Module Systems (AMD, Require, Node Modules, ES6 Modules) • Javascript “Flavors” (CoffeeScript, TypeScript, Dart, ES6)
  • 8. Kevin Ball @kbal11 Let’s Break It Down Your Application Code Client Application Lifecycle Compilation & Packaging Webserver User Browser
  • 9. Kevin Ball @kbal11 Let’s Break It Down • Execution Environments (Browsers, node.js, io.js) • Webservers (Express, Hapi) • Package Management (NPM, Bower) • Task Runners and Build (Grunt, Gulp, Broccoli) • Front End Tools (jQuery, Backbone, Angular, Ember, React) • Module Systems (AMD, Require, Node Modules, ES6 Modules) • Javascript “Flavors” (CoffeeScript, TypeScript, Dart, ES6)
  • 10. Kevin Ball @kbal11 Let’s Break It Down • Execution Environments (Browsers, node.js, io.js) • Webservers (Express, Hapi) • Package Management (NPM, Bower) • Task Runners and Build (Grunt, Gulp, Broccoli) • Front End Tools (jQuery, Backbone, Angular, Ember, React) • Module Systems (AMD, Require, Node Modules, ES6 Modules) • Javascript “Flavors” (CoffeeScript, TypeScript, Dart, ES6) Your Application Code
  • 11. Kevin Ball @kbal11 • Execution Environments (Browsers, node.js, io.js) • Webservers (Express, Hapi) • Package Management (NPM, Bower) • Task Runners and Build (Grunt, Gulp, Broccoli) • Front End Tools (jQuery, Backbone, Angular, Ember, React) • Module Systems (AMD, Require, Node Modules, ES6 Modules) • Javascript “Flavors” (CoffeeScript, TypeScript, Dart, ES6) Let’s Break It Down Your Application Code Compilation & Packaging
  • 12. Kevin Ball @kbal11 • Execution Environments (Browsers, node.js, io.js) • Webservers (Express, Hapi) • Package Management (NPM, Bower) • Task Runners and Build (Grunt, Gulp, Broccoli) • Front End Tools (jQuery, Backbone, Angular, Ember, React) • Module Systems (AMD, Require, Node Modules, ES6 Modules) • Javascript “Flavors” (CoffeeScript, TypeScript, Dart, ES6) Let’s Break It Down Your Application Code Webserver
  • 13. Kevin Ball @kbal11 • Execution Environments (Browsers, node.js, io.js) • Webservers (Express, Hapi) • Package Management (NPM, Bower) • Task Runners and Build (Grunt, Gulp, Broccoli) • Front End Tools (jQuery, Backbone, Angular, Ember, React) • Module Systems (AMD, Require, Node Modules, ES6 Modules) • Javascript “Flavors” (CoffeeScript, TypeScript, Dart, ES6) Let’s Break It Down Your Application Code User Browser
  • 14. Kevin Ball @kbal11 Let’s Break It Down Your Application Code Client Application Lifecycle Compilation & Packaging Webserver User Browser
  • 15. Kevin Ball @kbal11 Your Application Code • Javascript “Flavors” • Front End Tools • Module Systems • Package Management
  • 16. Kevin Ball @kbal11 Javascript “Flavors” • “Plain old Javascript” (EcmaScript 5) • EcmaScript 6 • Coffeescript • Typescript • Dart
  • 17. Kevin Ball @kbal11 Javascript “Flavors” Image Source: http://hakumilol123.deviantart.com/art/Luffy-is-confused-332924357
  • 18. Kevin Ball @kbal11 Javascript “Flavors” • ES5 requires the least work (no build required). • ES6 is where the world is going. • Coffeescript popular among ruby developers. • Typescript adds strict typing & structure. • Dart appears to be orphaned. • Some tools emphasize one flavor or another.
  • 19. Kevin Ball @kbal11 Front End Tools • jQuery • Backbone • Angular • Ember • React
  • 20. Kevin Ball @kbal11 jQuery • The “Browser API” that should have been. • Used on over 60% of ALL websites. • Easy to learn, easy to use.
  • 21. Kevin Ball @kbal11 Backbone • Lightweight, minimalist MVC. • Straightforward to learn. • Minimalistic - doesn’t provide structure, just tools.
  • 22. Kevin Ball @kbal11 Angular • Opinionated framework. • Huge community, backed by Google. • Very structured, written for testability. • Big learning curve from novice to expert. • 1.0 in Javascript, 2.0 in Typescript.
  • 23. Kevin Ball @kbal11 Ember • Opinionated framework. • Big community focus. • Big learning curve. • Big performance focus. • Absorbing many of the best concepts from other frameworks. • Jumped in head-first on ES6.
  • 24. Kevin Ball @kbal11 React • View layer only. • Built by & used extensively by Facebook. • “Different” approach to bindings and state. • Very fast.
  • 25. Kevin Ball @kbal11 Front End Tools • If you’re just getting started, start with jQuery. • Backbone is the easiest next step. • Angular 2.0 looks good but they’re abandoning backwards compatibility. • Ember appears to be absorbing all of the good ideas, with focus on maintaining compatibility. • React is super cool and very different.
  • 26. Kevin Ball @kbal11 Module Systems –Eloquent JavaScript “Most modern programming languages have some kind of module system built in. Not JavaScript. Once again, we have to invent something ourselves.”
  • 27. Kevin Ball @kbal11 Module Systems • AMD (RequireJS) • CommonJS (Node Modules) • ES6 Modules
  • 28. Kevin Ball @kbal11 Module Systems • AMD (RequireJS) • Asynchronous, suited to browser environment. • CommonJS (Node Modules) • ES6 Modules
  • 29. Kevin Ball @kbal11 Module Systems • AMD (RequireJS) • Asynchronous, suited to browser environment. • CommonJS (Node Modules) • Synchronous. Package for browser with web pack or browserify. • ES6 Modules
  • 30. Kevin Ball @kbal11 Module Systems • AMD (RequireJS) • Asynchronous, suited to browser environment. • CommonJS (Node Modules) • Synchronous. Package for browser with web pack or browserify. • ES6 Modules • The future.
  • 31. Kevin Ball @kbal11 Package Management • NPM • bower
  • 32. Kevin Ball @kbal11 Package Management • NPM • Node Package Manager • bower
  • 33. Kevin Ball @kbal11 Package Management • NPM • Node Package Manager. • Bower • “Front End Package Manager”
  • 34. Kevin Ball @kbal11 Let’s Break It Down Your Application Code Client Application Lifecycle Compilation & Packaging Webserver User Browser
  • 35. Kevin Ball @kbal11 Compilation and Packaging • Minifiers and Concatinators • Compilers and Transpilers • Task Runners to get it all done
  • 36. Kevin Ball @kbal11 Minifiers and Concatinators • Exist to minimize the number and size of web requests. • “Rewrite” javascript changing names of all internal variables to as short as possible. • Concatinators put it all together to only require one request. • Source maps allow you to trace it back for debug.
  • 37. Kevin Ball @kbal11 Compilers and Transpilers • How you get from ES6/CoffeeScript/TypeScript/ etc to “Plain Old Javascript”. • Typically run first in your build chain. • Source maps doubly important.
  • 38. Kevin Ball @kbal11 Task Runners • Grunt • Gulp • Broccoli
  • 39. Kevin Ball @kbal11 Task Runners: Grunt • Most popular task runner in Node world. • Configuration based using JSON Objects. • Communication between tasks via files.
  • 40. Kevin Ball @kbal11 Sample Gruntfile.js module.exports = function(grunt) { grunt.initConfig({ jshint: { files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'], options: { globals: { jQuery: true } } }, watch: { files: ['<%= jshint.files %>'], tasks: ['jshint'] } }); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-watch'); ! grunt.registerTask('default', ['jshint']); };
  • 41. Kevin Ball @kbal11 Task Runners: Gulp • 2nd most popular Node task runner. • Code over configuration. • Communication between tasks as pipes.
  • 42. Kevin Ball @kbal11 Sample gulpfile.js var gulp = require(‘gulp’); var jshint = require(‘gulp-jshint’); ! gulp.task(‘jshint’, function() { return gulp.src(['gulpfile.js', 'src/**/*.js', ‘test/**/*.js’]) .pipe(jshint()) .pipe(jshint.reporter(‘jshint-stylish’)) .pipe(jshint.reporter(‘fail’)); }); ! gulp.watch([‘src/**/*.js’, ‘test/**/*.js’], ‘jshint’); gulp.task(‘default’, ‘jshint’);
  • 43. Kevin Ball @kbal11 Task Runners: Broccoli • Really a build tool, not a task runner. • Newest of the 3, still immature (especially on Windows). • Tree-based system.
  • 44. Kevin Ball @kbal11 Sample Brocfile.js // Brocfile.js var concat = require('broccoli-concat'), pickFiles = require('broccoli-static-compiler'), mergeTrees = require('broccoli-merge-trees'); ! // concat the JS var scripts = concat('app/', { inputFiles: ['**/*.js'], outputFile: '/assets/scripts.js' }); // concat the CSS var styles = concat('app/styles', { inputFiles: ['**/*.css'], outputFile: '/assets/styles.css' }); ! // and merge all the trees together module.exports = mergeTrees([scripts, styles]);
  • 45. Kevin Ball @kbal11 Task Runners • Grunt - Good for beginners, most familiar style.! • Gulp • Broccoli
  • 46. Kevin Ball @kbal11 Task Runners • Grunt • Gulp - Good for Linux/piped background.! • Broccoli
  • 47. Kevin Ball @kbal11 Task Runners • Grunt • Gulp • Broccoli - The next big thing. Experts should check it out.
  • 48. Kevin Ball @kbal11 Let’s Break It Down Your Application Code Client Application Lifecycle Compilation & Packaging Webserver User Browser
  • 49. Kevin Ball @kbal11 Webserver • Execution Environments • Webservers
  • 50. Kevin Ball @kbal11 Execution Environments • Browsers • Node.js • io.js
  • 51. Kevin Ball @kbal11 Node.js • Server-side javascript execution framework • Built on Chrome’s v8 javascript runtime • Asynchronous, event-driven framework • Defines it’s own modules system
  • 52. Kevin Ball @kbal11 io.js • Fork of Node.js • Moves much more quickly • More community-managed • In the process of merging back with node.js
  • 53. Kevin Ball @kbal11 Webservers • Express • Hapi • Koa
  • 54. Kevin Ball @kbal11 Webservers • Express • The de facto standard • Hapi • Koa
  • 55. Kevin Ball @kbal11 Webservers • Express • The de facto standard • Hapi • Configuration over code • Koa
  • 56. Kevin Ball @kbal11 Webservers • Express • The de facto standard • Hapi • Configuration over code • Koa • Minimalist successor to Express
  • 57. Kevin Ball @kbal11 Let’s Break It Down Your Application Code Client Application Lifecycle Compilation & Packaging Webserver User Browser
  • 58. Kevin Ball @kbal11 User Browser • The “Traditional” place where javascript runs • May be a desktop browser, but may also be on laptop, mobile browser, or even embedded within a mobile application. • Different browsers have different levels of spec support.
  • 59. Kevin Ball @kbal11 Cross-Browser Support • Typically support last 2 versions of each browser. • Quickest way to good cross-browser support is use frameworks with good cross-browser support. • Things mostly break down on the bleeding edge.
  • 60. Kevin Ball @kbal11 But really, where do I start? • yeoman • ember-cli Let someone else choose for you!
  • 62. Kevin Ball @kbal11 Javascript is the Future I’ll see you there. Kevin Ball http://kevinball.com http://twitter.com/kbal11