Top Banner
JavaScript Bonanza The modern developer story Björn Ekengren @ekengren Diversify Javascriptpa?erns.org
42

JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Jun 13, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

JavaScript  Bonanza  The  modern  developer  story  

Björn  Ekengren  @ekengren  Diversify  Javascriptpa?erns.org  

Page 2: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011
Page 3: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011
Page 4: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011
Page 5: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Server  generated  content  

Server  Page  Generator  

Page 6: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

ApplicaDon  generated  content  

Server  Data  services  

Page 7: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

JSF  Request  Lifecycle  

Request  

Response  

Restore  view   Process  validaDons  

Render    response  

Invoke  applikaDon  

Update  model  values  

Apply  request  values  

Page 8: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

History  

Page 9: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

IE6   Firefox  2   IE7   Safari  3   Opera  8   Safari  4   Firefox  3   Opera  9   IE8   Firefox  3.6   Opera  10.51   Chrome  4  

2001   2006   2007   2008   2009   2010   2011  

IE9,  Chrome  16  FireFox  9  

Page 10: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

2007   2008   2009   2010   2011  

JavaScript  Performance  over  Dme  (Higher  is  be?er)  

Page 11: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011
Page 12: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Architecture  

The  first  rule  of  building  large  applicaDons:  

The  second  rule  of  building  large  applicaDons:  

Do  not  build  large  applicaDons  

Do  not  build  large  applicaDons  

Page 13: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Architecture  cont…  

•  Basic  framework  for  working  with  the  DOM  •  Pa?erns  •  MVC  •  Module  communicaDon  •  TemplaDng  •  Dependency  management  •  Test  •  Building  

Page 14: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

DOM  Frameworks  •  jQuery  •  Dojo  •  Prototype  •  YUI  •  MooTools  •  ExtJS  •  Cappucino  •  QooxDoo  •  FuseJS  

Page 15: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Pa?erns  

•  MVC    •  Observer  (pubsub)  •  Module  •  Façade  •  Mediator  

Page 16: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

MVC  

•  Backbone.js  •  JavaScriptMVC  •  Spine.js  •  EmberJS  •  Serenade  •  KnockoutJS  (MVVM)  •  Sammy.js  

Page 17: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Backbone  var Photo = Backbone.Model.extend({ // Default attributes for the photo defaults: { src: "placeholder.jpg", caption: "A default image", viewed: false }, // Ensure that each photo created has an `src`. initialize: function() { this.set({"src": this.defaults.src}); } });

Page 18: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Module  CommunicaDon  

•  jsSignals  •  PubSubJS  •  Ben  Almans  pub/sub  •  Peter  Higgins  pub/sub  •  Custom  Events  

Page 19: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

jsSignals  //store local reference for brevity var Signal = signals.Signal; //custom object that dispatch signals var myObject = { started : new Signal(), stopped : new Signal() }; function onStarted(param1, param2){ alert(param1 + param2); } myObject.started.add(onStarted); //add listener myObject.started.dispatch('foo', 'bar'); //dispatch

Page 20: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

TemplaDng  •  Underscore  •  jQuery  templaDng  •  Mustache  •  Handlebars  •  Dust.js  •  ICanHaz.js  •  PURE  •  MicroTemplates  •  Closure  Templates  •  jQuery.view  

Page 21: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Underscore  var photoTemplate = ‘<li class="photo”> <h2><%= caption %></h2> <img class="source" src="<%= src %>"/> <div class="meta-data”> <%= metadata %> </div> </li>’

photoEl.innerHTML = _.template('photoTemplate', {src: photoModel.getSrc()});

Page 22: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Dependency  Management  

•  AMD  –  Asynchronous  Module  DefiniDon  

•  RequireJS  •  curl.js  •  StealJS  •  JSL  Script  Loader  •  Bootstrap  

Page 23: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

AMD  

define( ‘pnyxtr’, [foo, bar], function(foo, bar){ var module = {}; module.doFoo = foo.doFooStuff(); module.doBar = bar.doBarStuff(); return module; } };

id  

dependencies  factory  

Page 24: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

RequireJS  require([”pnyxtr", ”logger”], function($) { //the pnyxtr and logger plugins //have been loaded. $(function() { logger.log(pnyxtr.doFoo()); }); });

Page 25: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Test  •  Qunit  •  Jasmine  •  FireUnit  •  Crosscheck  •  JSSpec  •  jsTestDriver  •  WebDriver  •  FuncUnit  •  YUI  Test  •  Selenium  •  Google  JS  Test  •  Mocha  

Page 26: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Jasmine  function helloWorld() {

return "Hello JFokus!"; }

describe("Hello world", function() { it("says hello", function() { expect(helloWorld()).toEqual("Hello world!"); });

});

Page 27: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Building  •  Jake  •  Smasher  •  YUI  Compressor  •  Sprockets  •  Closure  Compiler  •  UglifyJS  •  ShrinkSafe  •  JSMin  •  Grunt.js  

Page 28: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Other  

•  Feature  detecDon  – Modernizr  – Has.js  

•  LocalStorage  – Store.js  – Persist.JS  

•  CSS  – Less  – Sass  

Page 29: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

What  to  choose?  

Page 30: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

What  to  choose?  

Page 31: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

What  to  choose?  

Page 32: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

What  to  choose?  

•  Complete  packages  – Brunch  – Wakanda  

•  TodoMVC  

Page 33: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Tools  •  IDEs  

–  Eclipse  –  Netbeans  –  Webstorm  –  Cloud9  –  Textmate  –  Visual  Studio  

•  Browser  tools  –  Firebug  –  Chrome  developer  tools  –  Yslow  

•  Code  analysis  –  JSLint  –  CSSLint  –  CoffeeLint  

Page 34: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

“To  err  is  human,  but  to  really  foul  things  up  you  need  a  computer.”  

(Paul  Ehrlich)    

Page 35: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Advice  on  learning  JavaScript  Level  1  •  Get  an  understanding  of  –  FuncDons  –  Scope  –  ‘this’  –  Falsy  and  truthy  values  –  Indexing  of  arrays  vs  object  a?ributes  

•  Get  an  IDE  that  support  you  •  Read  

Page 36: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Advice  on  learning  JavaScript  Level  2  •  Get  an  understanding  of  –  Asynchronous  funcDon  execuDon  –  JSON  notaDon    –  Closures  –  Basic  pa?erns  –  AJAX  

•  Learn  a  DOM  framework  –  jQuery,  Dojo,  ExtJS,  YUI,  Mootools  …  

•  Read  

Page 37: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Advice  on  learning  JavaScript  Level  3  •  Get  an  understanding  of  –  Prototypical  inheritance/prototype  chain  –  ParDally  applied  funcDons  –  FuncDon  arguments  variable  –  Knowing  what  tools  to  use  to  build  robust  cross  browser  code  

•  Learn  a  unit  test  framework  –  Qunit,  Jasmine,  JSTestDriver,  Mocha  

•  Read  

Page 38: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Advice  on  learning  JavaScript  Level  4  

•  Structure  code  to  build  large  applicaDons  •  Learn  an  MVC  framework  – Backbone,  JavaScriptMVC,  EmberJS,  KnockoutJS  

•  Read    

Page 39: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Javascriptpa?erns.org/ladder.html  

Page 40: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Summary  

•  SeparaDon  of  concerns  •  Be?er  user  experience  •  Easier  do  debug  •  Get  to  know  the  language  

Page 41: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

QuesDons  

Page 42: JavaScriptBonanza - Jfokus · 2019-09-11 · IE6* Firefox2* IE7* Safari*3* Opera8* Safari*4* Firefox3* Opera9* IE8* Firefox3.6* Opera 10.51 Chrome4 2001 2006 2007 2008 2009 2010 2011

Cool  stuff  

•  Mindmaps  •  JSLinux  •  JSNes  •  Mugeda  •  Mr  doob  •  Languages  that  compile  to  JS  •  Ro.me  •  Impress.js