javascript assets & packaging overview

33
JavaScript Assets & Packaging Overview

Upload: dimituri

Post on 22-May-2015

422 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: JavaScript Assets & Packaging Overview

JavaScriptAssets & Packaging Overview

Page 2: JavaScript Assets & Packaging Overview

   <script  src=    <script  src=    <script  src=    <script  src=    <script  src=    <script  src=    <script  src=    <script  src=</head>

“80% of the end-user response time is spent on the front-end. Most of this time is tied up in downloading all the

components in the page: images, stylesheets, scripts, Flash, etc”

Yahoo!'s Exceptional Performance team

Page 3: JavaScript Assets & Packaging Overview

Minimize HTTP requests

Page 4: JavaScript Assets & Packaging Overview

Minimize HTTP requests...but don't end up with a ~30k line source

Page 5: JavaScript Assets & Packaging Overview

Google Libraries API

http://code.google.com/apis/libraries/

Page 6: JavaScript Assets & Packaging Overview
Page 7: JavaScript Assets & Packaging Overview

(function()  {

   //  Code  goes  here...

}).call(this);

Page 8: JavaScript Assets & Packaging Overview

var  exports  =  (function()  {

   //  Code  goes  here...    return  exports;

})();

Page 9: JavaScript Assets & Packaging Overview

var  MyClass  =  (function()  {

   function  MyClass()  {}                                    //  constructor    MyClass.foo  =  function()  {};                      //  static    MyClass.prototype.bar  =  function()  {};  //  instance    return  MyClass;

})();

var  myObject  =  new  MyClass();myObject.bar();MyClass.foo();

Page 10: JavaScript Assets & Packaging Overview

function  first()  {    var  result  =  'WIN';    return  result;}

function  second()  {    result  =  'FAIL';    return  result;}

var  result  =  first();var  result2  =  second();console.log(result);

The deal with globals

Page 11: JavaScript Assets & Packaging Overview

JSHint

http://www.jshint.com/

Page 12: JavaScript Assets & Packaging Overview

function  first()  {    var  result  =  'WIN';    return  result;}

function  second()  {    result  =  'FAIL';    return  result;}

var  result  =  first();var  result2  =  second();console.log(result);

Page 13: JavaScript Assets & Packaging Overview

/*jshint  undef:true,devel:true  */

function  first()  {    var  result  =  'WIN';    return  result;}

function  second()  {    result  =  'FAIL';    return  result;}

var  result  =  first();var  result2  =  second();console.log(result);

Page 14: JavaScript Assets & Packaging Overview

$  jshint  test.jstest.js:  line  9,  col  3,  'result'  is  not  defined.test.js:  line  10,  col  10,  'result'  is  not  defined.

2  errors

Page 15: JavaScript Assets & Packaging Overview

HELL YEAH!

Page 17: JavaScript Assets & Packaging Overview

UglifyJS – how good is it?

UglifyJS Closure YUI

Size 39% 38% 43%

Time 1.59 s 7.4 s 1.82 s

(lower is better)

Page 18: JavaScript Assets & Packaging Overview

http://www.commonjs.org/specs/

Page 19: JavaScript Assets & Packaging Overview

“Small, loosely coupled modules are the future and large, tightly-bound monolithic libraries are the past.”

Page 20: JavaScript Assets & Packaging Overview

CommonJS: Packages/1.1{    "name":  "beans",    "description":  "Build  tasks  for  CoffeeScript  projects  targeting  Node  and  the  browser.",    "keywords":  ["browser",  "build",  "coffeescript"],    "version":  "0.6.1",    "author":  "Dimitry  Solovyov  <[email protected]>  (http://100-­‐hour.com)",    "repository":  {        "type":  "git",        "url":  "git://github.com/dimituri/beans.git"    },    "main":  "./lib/beans",    "dependencies":  {        "glob":  "~2.0.7",        "nodeunit":  "~0.5.3",        "request":  "~2.1.1",        "rimraf":  "~1.0.4",        "stitch":  "~0.3.2",        "uglify-­‐js":  "~1.0.6",        "which":  "~1.0.0"

Contents ofpackage.json

Page 21: JavaScript Assets & Packaging Overview

CommonJS: Packages/1.1{    "name":  "beans",    "description":  "Build  tasks  for  CoffeeScript  projects  targeting  Node  and  the  browser.",    "keywords":  ["browser",  "build",  "coffeescript"],    "version":  "0.6.1",    "author":  "Dimitry  Solovyov  <[email protected]>  (http://100-­‐hour.com)",    "repository":  {        "type":  "git",        "url":  "git://github.com/dimituri/beans.git"    },    "main":  "./lib/beans",    "dependencies":  {        "glob":  "~2.0.7",        "nodeunit":  "~0.5.3",        "request":  "~2.1.1",        "rimraf":  "~1.0.4",        "stitch":  "~0.3.2",        "uglify-­‐js":  "~1.0.6",        "which":  "~1.0.0"

Page 22: JavaScript Assets & Packaging Overview

Dependency hell

Page 23: JavaScript Assets & Packaging Overview

http://npmjs.org

Page 24: JavaScript Assets & Packaging Overview
Page 25: JavaScript Assets & Packaging Overview

“We like to think of it asnpm's little sister.”

Page 26: JavaScript Assets & Packaging Overview

$  npm  install  ender  -­‐g$  ender  build  [email protected]  backbone

Page 28: JavaScript Assets & Packaging Overview

WE NEED TO GO DEEPER(that's what she said)

Page 29: JavaScript Assets & Packaging Overview

//  In  'path/to/file.js':module.exports  =  {    exportedFunction:  function()  {}};

//  In  some  other  file:var  localName  =  require('path/to/file.js');localName.exportedFunction();

CommonJS: Modules/1.1

Page 31: JavaScript Assets & Packaging Overview

var  fs            =  require('fs')    ,  stitch    =  require('stitch');

var  package  =  stitch.createPackage({    paths:  [        __dirname  +  '/lib',        __dirname  +  '/vendor'    ]});

package.compile(function(err,  source)  {    fs.writeFileSync('package.js',  source);});

Page 32: JavaScript Assets & Packaging Overview

The debugger statement...or how to find your way around a stiched source

function  mayContainBugs()  {    //  Executed  code  goes  here...    debugger;  //  Pause  and  invoke  debugger}

Page 33: JavaScript Assets & Packaging Overview