SlideShare a Scribd company logo
1 of 39
Download to read offline
JavaScript Performance and
Best Practices

 Doris Chen Ph.D.
 Developer Evangelist
 doris.chen@microsoft.com
 http://blogs.msdn.com/b/dorischen/
 Twitter @doristchen
Who am I?
• Developer Evangelist at Microsoft based in Silicon Valley, CA
   – Blog: http://blogs.msdn.com/b/dorischen/
   – Twitter @doristchen
   – Email: doris.chen@microsoft.com
• Has over 13 years of experience in the software industry focusing on
  web technologies
• Spoke and published widely at JavaOne, O'Reilly, SD West, SD
  Forum and worldwide User Groups meetings
• Before joining Microsoft, Doris Chen was a Technology Evangelist at
  Sun Microsystems
• Doris received her Ph.D. from the University of California at Los
  Angeles (UCLA)
Agenda
• Optimization Strategies


• JavaScript Best Practices
Ajaxify
• The client and server are in a dialog
• Make the messages between them as small as
  possible
• The client does not need a copy of the
  database
  – just enough information to serve the user
• Don't rewrite the server application in
  JavaScript
Don't Optimize Without Measuring
• Intuitions are often wrong
• A single trial is unreliable. Timers can be off by
  as much as 15 msec
• Even accurate measurements can lead to
  wrong conclusions
Manual Timing Method


function myFunctionToTest() {
var start = new Date().getTime();
... // body of the function
var totalTime = new Date().getTime() - start;
}
Only speed up things that take a lot of
                time
• If profiling shows that you are spending most
  of your time in A, don't bother optimizing C.
Don't Tune For Quirks
• Some browsers have surprising inefficiencies
• A trick that is faster on Browser A might be
  slower on Browser B
• The performance characteristics of the next
  generation may be significantly different
• Avoid short-term optimizations
Put stylesheets at the top (css)
>   Want the browser to display whatever content
    it has as soon as possible
       Avoids flash of unstyled content or blank white
        screen
>   Solution: put stylesheets in document head
       allows the page to render progressively
>   CSS at the bottom:
       prohibits progressive rendering in many browsers,
        including Internet Explorer
       browsers block rendering to avoid having to redraw
        elements of the page if their styles change
Move scripts to the bottom (javascript)
>   Scripts block parallel downloads across all
    hostnames




>   Scripts block rendering of everything below them
    in the page
JavaScript Best Practices
> Provide a clean separation of content, CSS, and
  JavaScript
> De-reference unused objects

> Think Asynchronous

> Working with Objects

> Defer Loading Resources

> General JavaScript Coding Best Practices



                                                11
Separation of content, CSS, and
                      JavaScript
>   A rich web application user interface is made up
    of
       content (HTML/XHTML)
       styles (CSS)
       JavaScript
>   Place CSS and JavaScript code in separate files
       Optimize the bandwidth usage by having CSS and
        JavaScript file loaded only once
>   Variables to decide using external or inline
            multiple page views per user per session
            many of pages re-use the same scripts and stylesheets
Inline or External
• Inline JavaScript and CSS in front page, but dynamically
  download the external files after the page has finished loading

<style>#Styles</style>
<body>The quick brown fox...</body>
<script type="text/javascript">
// JavaScript logic
<script>
-------------------------------------------------------------------------------------
• For multiple views per user, and reusable scripts/css:
<link rel="stylesheet" type="text/css"
href="cart.css">
<body>The quick brown fox...</body>
<script type="text/javascript" src="cart.js">
De-reference unused objects
 //delete objects
 var foo='Delete Me'; //do something with foo
 delete foo;

  // detach listeners
someElement.removeEventListener(type, fn, false);

 // remove DOM elements
 someElement.parentNode.removeChild(someElement);

 // page onunload
 window.onunload= function() { /*do something*/}

                                                    14
Think Asynchronous
> Prevents browsers from halting execution of a
  code block that might take a long time
> Semi-Asynchronous – Like an Ajax request
       Use a callback
>   use setTimeout() in conjunction with a callback
function longProcess({ name : value}, callback) {
    // do what needs to be done
    callback.apply({});
}

setTimeout(function() {
    longProcess({ name : “doris”}, function() {
    alert(“all done”);
       }
}, 0);
Working with Objects (I)
var i;
for (i = 0; i < divs.length; i += 1) {
    divs[i].style.color = "black";
    divs[i].style.border = thickness + 'px solid blue';
    divs[i].style.backgroundColor = "white";
}
-----------------------------------------------------------------------------------------------------------------------------------------------
var        border = thickness + 'px solid blue';
var        nrDivs = divs.length;
var        ds, i;
for        (i = 0; i < nrDivs; i += 1) {
           ds = divs[i].style;
           ds.color = "black";
           ds.border = border;                                                                                                           Good
           ds.backgroundColor = "white";
}
Strings
• Concatenation with +
  – Each operation allocates memory
  – foo = a + b;
• Concatenate with array.join('')
  – The contents of an array are concatenated into a
    single string
  – foo = [a, b].join('');
Working with Objects (II)
               String Concatenation
window.tablebuilder = function() {
    var _header, _rows = [];
    this.setHeader = function(_headers) {
        _header = "<tr><th>" +
_headers.join("</th><th>") + "</tr>";
    };
    this.addRow = function(_cells) {
        _rows.push("<tr><td>" +
_cells.join("</td><td>") + "</td></tr>");
    };
    this.toString = function() {
        return "<table>" + _header +
          "<tbody>" + _rows.join("") + "</tbody>" +
          "</table>";
    };
};
Defer Loading Resources
> If you have a large library or set of libraries,
  you don't need to load everything when a
  page is loaded
> Resources can be html, scripts, or css
       Use Ajax Request
       Add script/css links using DOM
Example: Defer Loading Resources

<script>
var deferredLibs = [ '/resources/jquery.js' ,
'/resources/base.js'];
addLibraries(libs : deferredLibs,
             function(args) {
                // initialize components
              });
</script>
Example: Defer Loading Resources (cont.)

function addLibraries( libs, callback) {
  for(var i=0; i < libs.length; i+=1) {
    var head =
document.getElementsByTagName("head")[0];
    var s = document.createElement("script");
    // add callback tracking logic
    s.src = libs[i];
    head.appendChild(s);
  }
}
JavaScript Best Practices
> Provide a clean separation of content, CSS, and
  JavaScript
> De-reference unused objects

> Think Asynchronous

> Working with Objects

> Defer Loading Resources

> General JavaScript Coding Best Practices



                                                22
Use === Instead of ==

• two different kinds of equality operators: ===
  | !== and == | !=
• same type and value
  – === true
  – !== false
Eval = Bad
   eval(string)

• eval function compiles and executes a string and
  returns the result
   – gives us access to JavaScript’s compiler
• what the browser uses to convert strings into actions
• most misused feature of the language
   – decreases script’s performance substantially
   – also poses a huge security risk because it grants far too much
     power to the passed in text
• Avoid it if you can!
Don’t Use Short-Hand
 • Technically, get away with omitting most curly
   braces and semi-colons
 if(someVariableExists)
    x = false
    anotherfunctionCall();
-----------------------------------------------------------------------------------------------------------------------------
 Interpreted by some browsers

 if(someVariableExists) {
    x = false;}
    anotherFunctionCall();
 ----------------------------------------------------------------------------------------------------------------------------- -----

 if(someVariableExists) {
   x = false;
   anotherFunctionCall();
 }
Declare Variables Outside of the For
              Statement
     for(var i = 0; i < someArray.length; i++) {
          var container = document.getElementById('container');
          container.innerHtml += 'my number: ' + i;
          console.log(i);
     }
----------------------------------------------------------------------------------------------------------------------
     var container = document.getElementById('container');
     for(var i = 0, len = someArray.length; i < len; i++) {
          container.innerHtml += 'my number: ' + i;
          console.log(i);
     }
Reduce Globals
    "By reducing your global footprint to a single name, you significantly reduce
    the chance of bad interactions with other applications, widgets, or libraries."
    - Douglas Crockford


        var name = doris';
        var lastName = chen';
        function doSomething() {...}
        console.log(name);
-----------------------------------------------------------------------------------------------------------------------------
        var DudeNameSpace = {
             name : 'Jeffrey',
             lastName : 'Way',
             doSomething : function() {...}
        }
        console.log(DudeNameSpace.name);
Don't Pass a String to "SetInterval"
          or "SetTimeOut"
• Never pass a string to SetInterval and
  SetTimeOut

setInterval(
    "document.getElementById('container').innerHTML +=
    'My new number: ' + i", 3000
);

• Pass function name
 setInterval(someFunction, 3000);
Use {} Instead of New Object()
        var o = new Object();
        o.name = 'Jeffrey';
        o.lastName = 'Way';
        o.someFunction = function() {
        console.log(this.name);
        }
----------------------------------------------------------------------------------------------------------------------

        var o = {
             name: 'Jeffrey',
             lastName = 'Way',
             someFunction : function() {
             console.log(this.name);
             }
        };

         var o = {}; //create empty object
Use [] Instead of New Array()

             var a = new Array();
             a[0] = "Joe";
             a[1] = 'Plumber';
----------------------------------------------------------------------------------------------------------------------

              var a = ['Joe','Plumber'];
Code Quality
• High quality code is most likely to avoid
  platform problems.
• Code Conventions for the JavaScript
  Programming Language
  – http://javascript.crockford.com/code.html
• Use JSLint.com. Pass with no warnings
JSLint -- Code Quality Tool
• JSLint can help improve the robustness and
  portability of your programs
  – enforces style rules
  – spot some errors that are very difficult to find in
    debugging
  – It can help eliminate implied globals
• Integrated with tools, Visual Studio 2010
  – http://jslint4vs2010.codeplex.com/
• Resources
  – http://www.jslint.com/
  – http://www.javascriptlint.com/download.htm
DOM Manipulation
• If JavaScript were infinitely fast, most pages
  would run at about the same speed.
• The bottleneck tends to be the DOM interface
• There is a significant cost every time you
  touch the DOM tree
• Each touch can result in a reflow computation,
  which is expensive
Make good use of Ajax Libraries
• Effective code reuse will make widgets more
  effective
• JavaScript Toolkits
  – Wrap up ajax details in javascript libraries
  – jQuery, Dojo, prototype+scriptaculous, YUI,...
Reduce the size of JavaScript file
• Reduce the amount of source code to reduce
  download time.
• Minification deletes whitespace and
  comments
  – While in development mode keep your scripts
    readable so that they may be debugged easier
• Consider compressing your JavaScript
  resources when you deploy your application
  – If you use a 3rd party JavaScript library use the
    compressed version if one is provided.
Gzip components (server)
>   you can affect users' download times
       Gzip supported in more browsers
       Gzip generally reduces the response size by 70%
>   Not just for html, gzip all scripts, stylesheets, XML, JSON
    but not images, PDF Content-Encoding: gzip

>   Gzip configuration
       HTTP request
    Accept-Encoding: gzip, deflate

       HTTP response
        Content-Encoding: gzip
Resources
>   Best practices and Guidelines
       http://developer.yahoo.com/performance/rules.ht
        ml
>   Useful Sites
       http://stevesouders.com/
       http://javascript.crockford.com/
Upcoming Web Camps
2 Days HTML5 and Web Development
WebCamp
  May 20-May 21st, 2011, Mountain View, CA
Free, learning innovative web technology,
hands on experience
JavaScript Performance and
Best Practices

 Doris Chen Ph.D.
 Developer Evangelist
 doris.chen@microsoft.com
 http://blogs.msdn.com/b/dorischen/
 Twitter @doristchen

More Related Content

What's hot

How AngularJS Embraced Traditional Design Patterns
How AngularJS Embraced Traditional Design PatternsHow AngularJS Embraced Traditional Design Patterns
How AngularJS Embraced Traditional Design PatternsRan Mizrahi
 
Fundamental JavaScript [In Control 2009]
Fundamental JavaScript [In Control 2009]Fundamental JavaScript [In Control 2009]
Fundamental JavaScript [In Control 2009]Aaron Gustafson
 
JavaScript - From Birth To Closure
JavaScript - From Birth To ClosureJavaScript - From Birth To Closure
JavaScript - From Birth To ClosureRobert Nyman
 
5 Tips for Better JavaScript
5 Tips for Better JavaScript5 Tips for Better JavaScript
5 Tips for Better JavaScriptTodd Anglin
 
Javascript basics for automation testing
Javascript  basics for automation testingJavascript  basics for automation testing
Javascript basics for automation testingVikas Thange
 
Powerful JavaScript Tips and Best Practices
Powerful JavaScript Tips and Best PracticesPowerful JavaScript Tips and Best Practices
Powerful JavaScript Tips and Best PracticesDragos Ionita
 
JavaScript Library Overview
JavaScript Library OverviewJavaScript Library Overview
JavaScript Library Overviewjeresig
 
JavaScript - An Introduction
JavaScript - An IntroductionJavaScript - An Introduction
JavaScript - An IntroductionManvendra Singh
 
Object Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptObject Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptForziatech
 
Java script tutorial
Java script tutorialJava script tutorial
Java script tutorialDoeun KOCH
 
Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)
Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)
Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)raja kvk
 
Javascript Module Patterns
Javascript Module PatternsJavascript Module Patterns
Javascript Module PatternsNicholas Jansma
 
JavaScript - Chapter 8 - Objects
 JavaScript - Chapter 8 - Objects JavaScript - Chapter 8 - Objects
JavaScript - Chapter 8 - ObjectsWebStackAcademy
 
Object Oriented Programming in JavaScript
Object Oriented Programming in JavaScriptObject Oriented Programming in JavaScript
Object Oriented Programming in JavaScriptzand3rs
 
Workshop 8: Templating: Handlebars, DustJS
Workshop 8: Templating: Handlebars, DustJSWorkshop 8: Templating: Handlebars, DustJS
Workshop 8: Templating: Handlebars, DustJSVisual Engineering
 
Scalable JavaScript Design Patterns
Scalable JavaScript Design PatternsScalable JavaScript Design Patterns
Scalable JavaScript Design PatternsAddy Osmani
 
Intro to JavaScript Testing
Intro to JavaScript TestingIntro to JavaScript Testing
Intro to JavaScript TestingRan Mizrahi
 

What's hot (20)

How AngularJS Embraced Traditional Design Patterns
How AngularJS Embraced Traditional Design PatternsHow AngularJS Embraced Traditional Design Patterns
How AngularJS Embraced Traditional Design Patterns
 
Fundamental JavaScript [In Control 2009]
Fundamental JavaScript [In Control 2009]Fundamental JavaScript [In Control 2009]
Fundamental JavaScript [In Control 2009]
 
JavaScript - From Birth To Closure
JavaScript - From Birth To ClosureJavaScript - From Birth To Closure
JavaScript - From Birth To Closure
 
5 Tips for Better JavaScript
5 Tips for Better JavaScript5 Tips for Better JavaScript
5 Tips for Better JavaScript
 
Java script
Java scriptJava script
Java script
 
Javascript basics for automation testing
Javascript  basics for automation testingJavascript  basics for automation testing
Javascript basics for automation testing
 
Powerful JavaScript Tips and Best Practices
Powerful JavaScript Tips and Best PracticesPowerful JavaScript Tips and Best Practices
Powerful JavaScript Tips and Best Practices
 
Java Script Best Practices
Java Script Best PracticesJava Script Best Practices
Java Script Best Practices
 
Javascript
JavascriptJavascript
Javascript
 
JavaScript Library Overview
JavaScript Library OverviewJavaScript Library Overview
JavaScript Library Overview
 
JavaScript - An Introduction
JavaScript - An IntroductionJavaScript - An Introduction
JavaScript - An Introduction
 
Object Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptObject Oriented Programming In JavaScript
Object Oriented Programming In JavaScript
 
Java script tutorial
Java script tutorialJava script tutorial
Java script tutorial
 
Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)
Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)
Advanced Object Oriented JavaScript (prototype, closure, scope, design patterns)
 
Javascript Module Patterns
Javascript Module PatternsJavascript Module Patterns
Javascript Module Patterns
 
JavaScript - Chapter 8 - Objects
 JavaScript - Chapter 8 - Objects JavaScript - Chapter 8 - Objects
JavaScript - Chapter 8 - Objects
 
Object Oriented Programming in JavaScript
Object Oriented Programming in JavaScriptObject Oriented Programming in JavaScript
Object Oriented Programming in JavaScript
 
Workshop 8: Templating: Handlebars, DustJS
Workshop 8: Templating: Handlebars, DustJSWorkshop 8: Templating: Handlebars, DustJS
Workshop 8: Templating: Handlebars, DustJS
 
Scalable JavaScript Design Patterns
Scalable JavaScript Design PatternsScalable JavaScript Design Patterns
Scalable JavaScript Design Patterns
 
Intro to JavaScript Testing
Intro to JavaScript TestingIntro to JavaScript Testing
Intro to JavaScript Testing
 

Viewers also liked

Jquery Best Practices
Jquery Best PracticesJquery Best Practices
Jquery Best Practicesbrinsknaps
 
Heap and stack space in java
Heap and stack space in javaHeap and stack space in java
Heap and stack space in javaTalha Ocakçı
 
JavaScript Programming
JavaScript ProgrammingJavaScript Programming
JavaScript ProgrammingSehwan Noh
 
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Matt Raible
 

Viewers also liked (7)

Jquery Best Practices
Jquery Best PracticesJquery Best Practices
Jquery Best Practices
 
Heap and stack space in java
Heap and stack space in javaHeap and stack space in java
Heap and stack space in java
 
Javascript1 pdf
Javascript1 pdfJavascript1 pdf
Javascript1 pdf
 
Studi kelayakan
Studi kelayakanStudi kelayakan
Studi kelayakan
 
Java script
Java scriptJava script
Java script
 
JavaScript Programming
JavaScript ProgrammingJavaScript Programming
JavaScript Programming
 
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
 

Similar to Performance Optimization and JavaScript Best Practices

Ajax Performance Tuning and Best Practices
Ajax Performance Tuning and Best PracticesAjax Performance Tuning and Best Practices
Ajax Performance Tuning and Best PracticesDoris Chen
 
#NewMeetup Performance
#NewMeetup Performance#NewMeetup Performance
#NewMeetup PerformanceJustin Cataldo
 
e-suap - client technologies- english version
e-suap - client technologies- english versione-suap - client technologies- english version
e-suap - client technologies- english versionSabino Labarile
 
Get Ahead with HTML5 on Moible
Get Ahead with HTML5 on MoibleGet Ahead with HTML5 on Moible
Get Ahead with HTML5 on Moiblemarkuskobler
 
JavaScript front end performance optimizations
JavaScript front end performance optimizationsJavaScript front end performance optimizations
JavaScript front end performance optimizationsChris Love
 
Play framework productivity formula
Play framework   productivity formula Play framework   productivity formula
Play framework productivity formula Sorin Chiprian
 
Web performance essentials - Goodies
Web performance essentials - GoodiesWeb performance essentials - Goodies
Web performance essentials - GoodiesJerry Emmanuel
 
TypeScript and SharePoint Framework
TypeScript and SharePoint FrameworkTypeScript and SharePoint Framework
TypeScript and SharePoint FrameworkBob German
 
Developing High Performance Web Apps - CodeMash 2011
Developing High Performance Web Apps - CodeMash 2011Developing High Performance Web Apps - CodeMash 2011
Developing High Performance Web Apps - CodeMash 2011Timothy Fisher
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVCAlive Kuo
 
Enhance Web Performance
Enhance Web PerformanceEnhance Web Performance
Enhance Web PerformanceAdam Lu
 
Practical tipsmakemobilefaster oscon2016
Practical tipsmakemobilefaster oscon2016Practical tipsmakemobilefaster oscon2016
Practical tipsmakemobilefaster oscon2016Doris Chen
 
Building Cloud-Native Applications with Microsoft Windows Azure
Building Cloud-Native Applications with Microsoft Windows AzureBuilding Cloud-Native Applications with Microsoft Windows Azure
Building Cloud-Native Applications with Microsoft Windows AzureBill Wilder
 
Java script Learn Easy
Java script Learn Easy Java script Learn Easy
Java script Learn Easy prince Loffar
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 
SharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentialsSharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentialsMark Rackley
 

Similar to Performance Optimization and JavaScript Best Practices (20)

Ajax Performance Tuning and Best Practices
Ajax Performance Tuning and Best PracticesAjax Performance Tuning and Best Practices
Ajax Performance Tuning and Best Practices
 
#NewMeetup Performance
#NewMeetup Performance#NewMeetup Performance
#NewMeetup Performance
 
e-suap - client technologies- english version
e-suap - client technologies- english versione-suap - client technologies- english version
e-suap - client technologies- english version
 
Java script
Java scriptJava script
Java script
 
Performance patterns
Performance patternsPerformance patterns
Performance patterns
 
Jquery fundamentals
Jquery fundamentalsJquery fundamentals
Jquery fundamentals
 
Get Ahead with HTML5 on Moible
Get Ahead with HTML5 on MoibleGet Ahead with HTML5 on Moible
Get Ahead with HTML5 on Moible
 
JavaScript front end performance optimizations
JavaScript front end performance optimizationsJavaScript front end performance optimizations
JavaScript front end performance optimizations
 
Play framework productivity formula
Play framework   productivity formula Play framework   productivity formula
Play framework productivity formula
 
Web performance essentials - Goodies
Web performance essentials - GoodiesWeb performance essentials - Goodies
Web performance essentials - Goodies
 
TypeScript and SharePoint Framework
TypeScript and SharePoint FrameworkTypeScript and SharePoint Framework
TypeScript and SharePoint Framework
 
Developing High Performance Web Apps - CodeMash 2011
Developing High Performance Web Apps - CodeMash 2011Developing High Performance Web Apps - CodeMash 2011
Developing High Performance Web Apps - CodeMash 2011
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC
 
Enhance Web Performance
Enhance Web PerformanceEnhance Web Performance
Enhance Web Performance
 
Practical tipsmakemobilefaster oscon2016
Practical tipsmakemobilefaster oscon2016Practical tipsmakemobilefaster oscon2016
Practical tipsmakemobilefaster oscon2016
 
Building Cloud-Native Applications with Microsoft Windows Azure
Building Cloud-Native Applications with Microsoft Windows AzureBuilding Cloud-Native Applications with Microsoft Windows Azure
Building Cloud-Native Applications with Microsoft Windows Azure
 
Java script Learn Easy
Java script Learn Easy Java script Learn Easy
Java script Learn Easy
 
JavaScripts & jQuery
JavaScripts & jQueryJavaScripts & jQuery
JavaScripts & jQuery
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
SharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentialsSharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentials
 

More from Doris Chen

Building Web Sites that Work Everywhere
Building Web Sites that Work EverywhereBuilding Web Sites that Work Everywhere
Building Web Sites that Work EverywhereDoris Chen
 
Angular mobile angular_u
Angular mobile angular_uAngular mobile angular_u
Angular mobile angular_uDoris Chen
 
Lastest Trends in Web Development
Lastest Trends in Web DevelopmentLastest Trends in Web Development
Lastest Trends in Web DevelopmentDoris Chen
 
Angular or Backbone: Go Mobile!
Angular or Backbone: Go Mobile!Angular or Backbone: Go Mobile!
Angular or Backbone: Go Mobile!Doris Chen
 
OSCON Presentation: Developing High Performance Websites and Modern Apps with...
OSCON Presentation: Developing High Performance Websites and Modern Apps with...OSCON Presentation: Developing High Performance Websites and Modern Apps with...
OSCON Presentation: Developing High Performance Websites and Modern Apps with...Doris Chen
 
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps Faster
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps FasterPractical Performance Tips and Tricks to Make Your HTML/JavaScript Apps Faster
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps FasterDoris Chen
 
Developing High Performance Websites and Modern Apps with JavaScript and HTML5
Developing High Performance Websites and Modern Apps with JavaScript and HTML5Developing High Performance Websites and Modern Apps with JavaScript and HTML5
Developing High Performance Websites and Modern Apps with JavaScript and HTML5Doris Chen
 
What Web Developers Need to Know to Develop Native HTML5/JS Apps
What Web Developers Need to Know to Develop Native HTML5/JS AppsWhat Web Developers Need to Know to Develop Native HTML5/JS Apps
What Web Developers Need to Know to Develop Native HTML5/JS AppsDoris Chen
 
Windows 8 Opportunity
Windows 8 OpportunityWindows 8 Opportunity
Windows 8 OpportunityDoris Chen
 
Wins8 appfoforweb fluent
Wins8 appfoforweb fluentWins8 appfoforweb fluent
Wins8 appfoforweb fluentDoris Chen
 
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...Doris Chen
 
What Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 AppsWhat Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 AppsDoris Chen
 
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Doris Chen
 
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3Doris Chen
 
Introduction to CSS3
Introduction to CSS3Introduction to CSS3
Introduction to CSS3Doris Chen
 
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Doris Chen
 
Practical HTML5: Using It Today
Practical HTML5: Using It TodayPractical HTML5: Using It Today
Practical HTML5: Using It TodayDoris Chen
 
Dive Into HTML5
Dive Into HTML5Dive Into HTML5
Dive Into HTML5Doris Chen
 
Practical HTML5: Using It Today
Practical HTML5: Using It TodayPractical HTML5: Using It Today
Practical HTML5: Using It TodayDoris Chen
 
HTML 5 Development for Windows Phone and Desktop
HTML 5 Development for Windows Phone and DesktopHTML 5 Development for Windows Phone and Desktop
HTML 5 Development for Windows Phone and DesktopDoris Chen
 

More from Doris Chen (20)

Building Web Sites that Work Everywhere
Building Web Sites that Work EverywhereBuilding Web Sites that Work Everywhere
Building Web Sites that Work Everywhere
 
Angular mobile angular_u
Angular mobile angular_uAngular mobile angular_u
Angular mobile angular_u
 
Lastest Trends in Web Development
Lastest Trends in Web DevelopmentLastest Trends in Web Development
Lastest Trends in Web Development
 
Angular or Backbone: Go Mobile!
Angular or Backbone: Go Mobile!Angular or Backbone: Go Mobile!
Angular or Backbone: Go Mobile!
 
OSCON Presentation: Developing High Performance Websites and Modern Apps with...
OSCON Presentation: Developing High Performance Websites and Modern Apps with...OSCON Presentation: Developing High Performance Websites and Modern Apps with...
OSCON Presentation: Developing High Performance Websites and Modern Apps with...
 
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps Faster
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps FasterPractical Performance Tips and Tricks to Make Your HTML/JavaScript Apps Faster
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps Faster
 
Developing High Performance Websites and Modern Apps with JavaScript and HTML5
Developing High Performance Websites and Modern Apps with JavaScript and HTML5Developing High Performance Websites and Modern Apps with JavaScript and HTML5
Developing High Performance Websites and Modern Apps with JavaScript and HTML5
 
What Web Developers Need to Know to Develop Native HTML5/JS Apps
What Web Developers Need to Know to Develop Native HTML5/JS AppsWhat Web Developers Need to Know to Develop Native HTML5/JS Apps
What Web Developers Need to Know to Develop Native HTML5/JS Apps
 
Windows 8 Opportunity
Windows 8 OpportunityWindows 8 Opportunity
Windows 8 Opportunity
 
Wins8 appfoforweb fluent
Wins8 appfoforweb fluentWins8 appfoforweb fluent
Wins8 appfoforweb fluent
 
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
 
What Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 AppsWhat Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 Apps
 
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
 
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
 
Introduction to CSS3
Introduction to CSS3Introduction to CSS3
Introduction to CSS3
 
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
 
Practical HTML5: Using It Today
Practical HTML5: Using It TodayPractical HTML5: Using It Today
Practical HTML5: Using It Today
 
Dive Into HTML5
Dive Into HTML5Dive Into HTML5
Dive Into HTML5
 
Practical HTML5: Using It Today
Practical HTML5: Using It TodayPractical HTML5: Using It Today
Practical HTML5: Using It Today
 
HTML 5 Development for Windows Phone and Desktop
HTML 5 Development for Windows Phone and DesktopHTML 5 Development for Windows Phone and Desktop
HTML 5 Development for Windows Phone and Desktop
 

Recently uploaded

From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 

Recently uploaded (20)

From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 

Performance Optimization and JavaScript Best Practices

  • 1. JavaScript Performance and Best Practices Doris Chen Ph.D. Developer Evangelist doris.chen@microsoft.com http://blogs.msdn.com/b/dorischen/ Twitter @doristchen
  • 2. Who am I? • Developer Evangelist at Microsoft based in Silicon Valley, CA – Blog: http://blogs.msdn.com/b/dorischen/ – Twitter @doristchen – Email: doris.chen@microsoft.com • Has over 13 years of experience in the software industry focusing on web technologies • Spoke and published widely at JavaOne, O'Reilly, SD West, SD Forum and worldwide User Groups meetings • Before joining Microsoft, Doris Chen was a Technology Evangelist at Sun Microsystems • Doris received her Ph.D. from the University of California at Los Angeles (UCLA)
  • 3. Agenda • Optimization Strategies • JavaScript Best Practices
  • 4. Ajaxify • The client and server are in a dialog • Make the messages between them as small as possible • The client does not need a copy of the database – just enough information to serve the user • Don't rewrite the server application in JavaScript
  • 5. Don't Optimize Without Measuring • Intuitions are often wrong • A single trial is unreliable. Timers can be off by as much as 15 msec • Even accurate measurements can lead to wrong conclusions
  • 6. Manual Timing Method function myFunctionToTest() { var start = new Date().getTime(); ... // body of the function var totalTime = new Date().getTime() - start; }
  • 7. Only speed up things that take a lot of time • If profiling shows that you are spending most of your time in A, don't bother optimizing C.
  • 8. Don't Tune For Quirks • Some browsers have surprising inefficiencies • A trick that is faster on Browser A might be slower on Browser B • The performance characteristics of the next generation may be significantly different • Avoid short-term optimizations
  • 9. Put stylesheets at the top (css) > Want the browser to display whatever content it has as soon as possible  Avoids flash of unstyled content or blank white screen > Solution: put stylesheets in document head  allows the page to render progressively > CSS at the bottom:  prohibits progressive rendering in many browsers, including Internet Explorer  browsers block rendering to avoid having to redraw elements of the page if their styles change
  • 10. Move scripts to the bottom (javascript) > Scripts block parallel downloads across all hostnames > Scripts block rendering of everything below them in the page
  • 11. JavaScript Best Practices > Provide a clean separation of content, CSS, and JavaScript > De-reference unused objects > Think Asynchronous > Working with Objects > Defer Loading Resources > General JavaScript Coding Best Practices 11
  • 12. Separation of content, CSS, and JavaScript > A rich web application user interface is made up of  content (HTML/XHTML)  styles (CSS)  JavaScript > Place CSS and JavaScript code in separate files  Optimize the bandwidth usage by having CSS and JavaScript file loaded only once > Variables to decide using external or inline  multiple page views per user per session  many of pages re-use the same scripts and stylesheets
  • 13. Inline or External • Inline JavaScript and CSS in front page, but dynamically download the external files after the page has finished loading <style>#Styles</style> <body>The quick brown fox...</body> <script type="text/javascript"> // JavaScript logic <script> ------------------------------------------------------------------------------------- • For multiple views per user, and reusable scripts/css: <link rel="stylesheet" type="text/css" href="cart.css"> <body>The quick brown fox...</body> <script type="text/javascript" src="cart.js">
  • 14. De-reference unused objects //delete objects var foo='Delete Me'; //do something with foo delete foo; // detach listeners someElement.removeEventListener(type, fn, false); // remove DOM elements someElement.parentNode.removeChild(someElement); // page onunload window.onunload= function() { /*do something*/} 14
  • 15. Think Asynchronous > Prevents browsers from halting execution of a code block that might take a long time > Semi-Asynchronous – Like an Ajax request  Use a callback > use setTimeout() in conjunction with a callback function longProcess({ name : value}, callback) { // do what needs to be done callback.apply({}); } setTimeout(function() { longProcess({ name : “doris”}, function() { alert(“all done”); } }, 0);
  • 16. Working with Objects (I) var i; for (i = 0; i < divs.length; i += 1) { divs[i].style.color = "black"; divs[i].style.border = thickness + 'px solid blue'; divs[i].style.backgroundColor = "white"; } ----------------------------------------------------------------------------------------------------------------------------------------------- var border = thickness + 'px solid blue'; var nrDivs = divs.length; var ds, i; for (i = 0; i < nrDivs; i += 1) { ds = divs[i].style; ds.color = "black"; ds.border = border; Good ds.backgroundColor = "white"; }
  • 17. Strings • Concatenation with + – Each operation allocates memory – foo = a + b; • Concatenate with array.join('') – The contents of an array are concatenated into a single string – foo = [a, b].join('');
  • 18. Working with Objects (II) String Concatenation window.tablebuilder = function() { var _header, _rows = []; this.setHeader = function(_headers) { _header = "<tr><th>" + _headers.join("</th><th>") + "</tr>"; }; this.addRow = function(_cells) { _rows.push("<tr><td>" + _cells.join("</td><td>") + "</td></tr>"); }; this.toString = function() { return "<table>" + _header + "<tbody>" + _rows.join("") + "</tbody>" + "</table>"; }; };
  • 19. Defer Loading Resources > If you have a large library or set of libraries, you don't need to load everything when a page is loaded > Resources can be html, scripts, or css  Use Ajax Request  Add script/css links using DOM
  • 20. Example: Defer Loading Resources <script> var deferredLibs = [ '/resources/jquery.js' , '/resources/base.js']; addLibraries(libs : deferredLibs, function(args) { // initialize components }); </script>
  • 21. Example: Defer Loading Resources (cont.) function addLibraries( libs, callback) { for(var i=0; i < libs.length; i+=1) { var head = document.getElementsByTagName("head")[0]; var s = document.createElement("script"); // add callback tracking logic s.src = libs[i]; head.appendChild(s); } }
  • 22. JavaScript Best Practices > Provide a clean separation of content, CSS, and JavaScript > De-reference unused objects > Think Asynchronous > Working with Objects > Defer Loading Resources > General JavaScript Coding Best Practices 22
  • 23. Use === Instead of == • two different kinds of equality operators: === | !== and == | != • same type and value – === true – !== false
  • 24. Eval = Bad eval(string) • eval function compiles and executes a string and returns the result – gives us access to JavaScript’s compiler • what the browser uses to convert strings into actions • most misused feature of the language – decreases script’s performance substantially – also poses a huge security risk because it grants far too much power to the passed in text • Avoid it if you can!
  • 25. Don’t Use Short-Hand • Technically, get away with omitting most curly braces and semi-colons if(someVariableExists) x = false anotherfunctionCall(); ----------------------------------------------------------------------------------------------------------------------------- Interpreted by some browsers if(someVariableExists) { x = false;} anotherFunctionCall(); ----------------------------------------------------------------------------------------------------------------------------- ----- if(someVariableExists) { x = false; anotherFunctionCall(); }
  • 26. Declare Variables Outside of the For Statement for(var i = 0; i < someArray.length; i++) { var container = document.getElementById('container'); container.innerHtml += 'my number: ' + i; console.log(i); } ---------------------------------------------------------------------------------------------------------------------- var container = document.getElementById('container'); for(var i = 0, len = someArray.length; i < len; i++) { container.innerHtml += 'my number: ' + i; console.log(i); }
  • 27. Reduce Globals "By reducing your global footprint to a single name, you significantly reduce the chance of bad interactions with other applications, widgets, or libraries." - Douglas Crockford var name = doris'; var lastName = chen'; function doSomething() {...} console.log(name); ----------------------------------------------------------------------------------------------------------------------------- var DudeNameSpace = { name : 'Jeffrey', lastName : 'Way', doSomething : function() {...} } console.log(DudeNameSpace.name);
  • 28. Don't Pass a String to "SetInterval" or "SetTimeOut" • Never pass a string to SetInterval and SetTimeOut setInterval( "document.getElementById('container').innerHTML += 'My new number: ' + i", 3000 ); • Pass function name setInterval(someFunction, 3000);
  • 29. Use {} Instead of New Object() var o = new Object(); o.name = 'Jeffrey'; o.lastName = 'Way'; o.someFunction = function() { console.log(this.name); } ---------------------------------------------------------------------------------------------------------------------- var o = { name: 'Jeffrey', lastName = 'Way', someFunction : function() { console.log(this.name); } }; var o = {}; //create empty object
  • 30. Use [] Instead of New Array() var a = new Array(); a[0] = "Joe"; a[1] = 'Plumber'; ---------------------------------------------------------------------------------------------------------------------- var a = ['Joe','Plumber'];
  • 31. Code Quality • High quality code is most likely to avoid platform problems. • Code Conventions for the JavaScript Programming Language – http://javascript.crockford.com/code.html • Use JSLint.com. Pass with no warnings
  • 32. JSLint -- Code Quality Tool • JSLint can help improve the robustness and portability of your programs – enforces style rules – spot some errors that are very difficult to find in debugging – It can help eliminate implied globals • Integrated with tools, Visual Studio 2010 – http://jslint4vs2010.codeplex.com/ • Resources – http://www.jslint.com/ – http://www.javascriptlint.com/download.htm
  • 33. DOM Manipulation • If JavaScript were infinitely fast, most pages would run at about the same speed. • The bottleneck tends to be the DOM interface • There is a significant cost every time you touch the DOM tree • Each touch can result in a reflow computation, which is expensive
  • 34. Make good use of Ajax Libraries • Effective code reuse will make widgets more effective • JavaScript Toolkits – Wrap up ajax details in javascript libraries – jQuery, Dojo, prototype+scriptaculous, YUI,...
  • 35. Reduce the size of JavaScript file • Reduce the amount of source code to reduce download time. • Minification deletes whitespace and comments – While in development mode keep your scripts readable so that they may be debugged easier • Consider compressing your JavaScript resources when you deploy your application – If you use a 3rd party JavaScript library use the compressed version if one is provided.
  • 36. Gzip components (server) > you can affect users' download times  Gzip supported in more browsers  Gzip generally reduces the response size by 70% > Not just for html, gzip all scripts, stylesheets, XML, JSON but not images, PDF Content-Encoding: gzip > Gzip configuration  HTTP request Accept-Encoding: gzip, deflate  HTTP response Content-Encoding: gzip
  • 37. Resources > Best practices and Guidelines  http://developer.yahoo.com/performance/rules.ht ml > Useful Sites  http://stevesouders.com/  http://javascript.crockford.com/
  • 38. Upcoming Web Camps 2 Days HTML5 and Web Development WebCamp May 20-May 21st, 2011, Mountain View, CA Free, learning innovative web technology, hands on experience
  • 39. JavaScript Performance and Best Practices Doris Chen Ph.D. Developer Evangelist doris.chen@microsoft.com http://blogs.msdn.com/b/dorischen/ Twitter @doristchen