SlideShare a Scribd company logo
A   JAVASCRIPT   MODULE   LOADER




           Ed Siok
           @sioked
      Slalom Consulting
THE PROBLEM
DEPENDENCIES
< !--scripts-->
<script type = "text/javascript"src = '/Scripts/jquery-1.5.2.min.js' > </script>
<script type="text/javascript " src='/Scripts/jquery-ui-1.8.11.custom.min.js'></script>
<script type="text / javascript " src='/Scripts/jquery.validate.min.js'></script>
<script type="text / javascript " src='/Scripts/jquery.validate.unobtrusive.min.js'></script>
<script type="text / javascript " src='/Scripts/jquery.timers-1.2.js'></script>
<script type="text / javascript " src='/Scripts/jquery.easing.1.3.js'></script>
<script type="text / javascript " src='/Scripts/jquery.cycle.all.min.js'></script>
<script type="text / javascript " src='/Scripts/jquery.functions.js'></script>
<script type="text / javascript " src='/Scripts/jquery.dataTables.min.js'></script>
<script type="text / javascript " src='/Scripts/search.js'></script>

<script type="text / javascript " src='/Scripts/galleryview.setup.js'></script>



<!-- Zone Scripts -->
<script type='text/javascript' src='/Scripts/CMS/GraphicBanner.js'></script>
<script type='text/javascript' src='/Scripts/CMS/SimpleTile.js'></script>
<script type='text/javascript' src='/Scripts/CMS/FocusAreaTabs.js'></script>



<script type="text / javascript ">

   var _gaq = _gaq || [];
   _gaq.push(['_setAccount', 'UA-1988710-1']);
   _gaq.push(['_trackPageview']);

   (function () {
       var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
       ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
       var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
   })();

</script>
SPEED
EXECUTION ORDER
THE SOLUTION
BASIC USE


<script data-main="scripts/main" src="scripts/require.js"></script>
BASIC USE

require([“some/module”, “a.js”, “b.js”],
   function(){
  //This function is called once all scripts are
downloaded and executed
});
MODULES
// acura/tsx.js
define({
    make: "Acura",
    model: "tsx",
    horsepower: 201
});

// main.js
require(['acura/tsx'], function(tsx){
  console.log(tsx.horsepower);
});
// util.js
define(function(){
    var SECONDS = 60,
      MINS = 60,
      HOURS = 24;
    function convertDaysToSeconds(days){
      return days*HOURS*MINS*SECONDS;
    }

      return {
        daysToSeconds : convertDaysToSeconds
      }
});

// main.js
require(['util'], function(util){
  var days = 13;
  var seconds = util.daysToSeconds(13);
});
// util.js
define("util", ["constants"], function(c){
  function convertDaysToSeconds(days){
    return days*c.HOURS*c.MINS*c.SECONDS;
  }

  return {
    daysToSeconds : convertDaysToSeconds
  }
});
//A few convenient extras:
require(["text!template.html"], function(template){
  //The text is passed in as a string into the function
  console.log(template);
});

//-----------------------------
require.ready(function(){
  //fires once the dom is loaded - often in other libraries,
but very convenient nonetheless
});

//-----------------------------
require(['some/module'], function(){
  //can nest requires
  require(['a.js','b.js']);
});

//-----------------------------
//Conveniently, this also works:
var util = require(['util']);
OPTIMIZATION
Requirejs
FIN.

More Related Content

PDF
Requirejs
PDF
PPT
Managing JavaScript Dependencies With RequireJS
PPSX
RequireJS
PPTX
Require js
PDF
Lightning Talk: Making JS better with Browserify
PDF
Browserify
PDF
JavaScript Dependencies, Modules & Browserify
Requirejs
Managing JavaScript Dependencies With RequireJS
RequireJS
Require js
Lightning Talk: Making JS better with Browserify
Browserify
JavaScript Dependencies, Modules & Browserify

What's hot (20)

PDF
React.js触ってみた 吉澤和香奈
PDF
Javascript ui for rest services
PPTX
Asynchronous Module Definition (AMD) used for Dependency Injection (DI) and MVVM
PDF
Packing it all: JavaScript module bundling from 2000 to now
PDF
Modularize JavaScript with RequireJS
PPTX
Backbone.js
PDF
Integrating Browserify with Sprockets
PDF
AngularJS Deep Dives (NYC GDG Apr 2013)
PDF
Module, AMD, RequireJS
PDF
Vue 淺談前端建置工具
KEY
Rails3 asset-pipeline
PPTX
Let's react - Meetup
PDF
Casl. isomorphic permission management.pptx
PDF
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
PDF
AngularJS application architecture
PDF
OUTDATED (Encore)
PDF
Advanced Tips & Tricks for using Angular JS
PPTX
Packing for the Web with Webpack
PPTX
Javascript first-class citizenery
React.js触ってみた 吉澤和香奈
Javascript ui for rest services
Asynchronous Module Definition (AMD) used for Dependency Injection (DI) and MVVM
Packing it all: JavaScript module bundling from 2000 to now
Modularize JavaScript with RequireJS
Backbone.js
Integrating Browserify with Sprockets
AngularJS Deep Dives (NYC GDG Apr 2013)
Module, AMD, RequireJS
Vue 淺談前端建置工具
Rails3 asset-pipeline
Let's react - Meetup
Casl. isomorphic permission management.pptx
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
AngularJS application architecture
OUTDATED (Encore)
Advanced Tips & Tricks for using Angular JS
Packing for the Web with Webpack
Javascript first-class citizenery
Ad

Viewers also liked (6)

PDF
Meet Handlebar
PDF
Require.JS
PDF
Using RequireJS for Modular JavaScript Code
PPT
Require JS
PDF
Using RequireJS with CakePHP
PDF
Open layers - utilisation simple et avancée
Meet Handlebar
Require.JS
Using RequireJS for Modular JavaScript Code
Require JS
Using RequireJS with CakePHP
Open layers - utilisation simple et avancée
Ad

Recently uploaded (20)

DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Modernizing your data center with Dell and AMD
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Big Data Technologies - Introduction.pptx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
Cloud computing and distributed systems.
PDF
KodekX | Application Modernization Development
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
cuic standard and advanced reporting.pdf
The AUB Centre for AI in Media Proposal.docx
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
20250228 LYD VKU AI Blended-Learning.pptx
Modernizing your data center with Dell and AMD
Unlocking AI with Model Context Protocol (MCP)
Per capita expenditure prediction using model stacking based on satellite ima...
Digital-Transformation-Roadmap-for-Companies.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
Spectral efficient network and resource selection model in 5G networks
NewMind AI Weekly Chronicles - August'25 Week I
Big Data Technologies - Introduction.pptx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
The Rise and Fall of 3GPP – Time for a Sabbatical?
MYSQL Presentation for SQL database connectivity
Cloud computing and distributed systems.
KodekX | Application Modernization Development
Building Integrated photovoltaic BIPV_UPV.pdf
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Diabetes mellitus diagnosis method based random forest with bat algorithm
cuic standard and advanced reporting.pdf

Requirejs

  • 1. A JAVASCRIPT MODULE LOADER Ed Siok @sioked Slalom Consulting
  • 3. DEPENDENCIES < !--scripts--> <script type = "text/javascript"src = '/Scripts/jquery-1.5.2.min.js' > </script> <script type="text/javascript " src='/Scripts/jquery-ui-1.8.11.custom.min.js'></script> <script type="text / javascript " src='/Scripts/jquery.validate.min.js'></script> <script type="text / javascript " src='/Scripts/jquery.validate.unobtrusive.min.js'></script> <script type="text / javascript " src='/Scripts/jquery.timers-1.2.js'></script> <script type="text / javascript " src='/Scripts/jquery.easing.1.3.js'></script> <script type="text / javascript " src='/Scripts/jquery.cycle.all.min.js'></script> <script type="text / javascript " src='/Scripts/jquery.functions.js'></script> <script type="text / javascript " src='/Scripts/jquery.dataTables.min.js'></script> <script type="text / javascript " src='/Scripts/search.js'></script> <script type="text / javascript " src='/Scripts/galleryview.setup.js'></script> <!-- Zone Scripts --> <script type='text/javascript' src='/Scripts/CMS/GraphicBanner.js'></script> <script type='text/javascript' src='/Scripts/CMS/SimpleTile.js'></script> <script type='text/javascript' src='/Scripts/CMS/FocusAreaTabs.js'></script> <script type="text / javascript "> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-1988710-1']); _gaq.push(['_trackPageview']); (function () { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script>
  • 7. BASIC USE <script data-main="scripts/main" src="scripts/require.js"></script>
  • 8. BASIC USE require([“some/module”, “a.js”, “b.js”], function(){ //This function is called once all scripts are downloaded and executed });
  • 10. // acura/tsx.js define({ make: "Acura", model: "tsx", horsepower: 201 }); // main.js require(['acura/tsx'], function(tsx){ console.log(tsx.horsepower); });
  • 11. // util.js define(function(){ var SECONDS = 60, MINS = 60, HOURS = 24; function convertDaysToSeconds(days){ return days*HOURS*MINS*SECONDS; } return { daysToSeconds : convertDaysToSeconds } }); // main.js require(['util'], function(util){ var days = 13; var seconds = util.daysToSeconds(13); });
  • 12. // util.js define("util", ["constants"], function(c){ function convertDaysToSeconds(days){ return days*c.HOURS*c.MINS*c.SECONDS; } return { daysToSeconds : convertDaysToSeconds } });
  • 13. //A few convenient extras: require(["text!template.html"], function(template){ //The text is passed in as a string into the function console.log(template); }); //----------------------------- require.ready(function(){ //fires once the dom is loaded - often in other libraries, but very convenient nonetheless }); //----------------------------- require(['some/module'], function(){ //can nest requires require(['a.js','b.js']); }); //----------------------------- //Conveniently, this also works: var util = require(['util']);
  • 16. FIN.

Editor's Notes

  • #2: Test\n
  • #3: \n
  • #4: 1. DEPENDENCIES - No way to cross-reference javascript (dependencies)\nEvery page needs to repeat the list of scripts, maintain it&amp;#x2019;s own set of dependencies\n
  • #5: 2. SPEED - Each new script that is included blocks the browser until it is done downloading &amp; runs\n\n
  • #6: 3. EXECUTION ORDER - Managing order of downloading &amp; running scripts- what comes before what &amp; what needs to be on the page afterwards\n
  • #7: \n
  • #8: The easiest way to use it is to just load require.js on the page and point it to a single file that contains the scripts- it will download all scripts in parallel &amp; execute in order\n
  • #9: A single main file that can load any dependencies\n
  • #10: Modules are where require.js really shines.\nJavaScript&amp;#x2019;s biggest problem is that it was designed to be written and run directly in the browser- they didn&amp;#x2019;t have to worry about how to manage dependencies in between scripts- they didn&amp;#x2019;t expect it to grow like it did. Require.js solves this problem for us.\n\n
  • #11: Once you define a module, you can then use that module in any require script and directly call that script as a function\n
  • #12: \n
  • #13: Modules can be named, can require other modules (or files), and pass those modules into the module function\n
  • #14: \n
  • #15: \n
  • #16: Assuming a structure like above, you can build a build script that can trace down through all of your files and build a minified version of each, as well as an overall minified project file\n
  • #17: \n