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

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

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

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