SlideShare a Scribd company logo
1 of 57
5 Tips
For Better




             @toddanglin
<TODO: HAPPY PLACE IMAGE>
@toddanglin
 Brought to you by @KendoUI
Why
JavaScript?


WHY?!
It‟s the first?
It‟s the best?
It‟s the easiest?
It‟s the fastest?
It‟s everywhere.
No, really.
Brendan Eich.
Netscape.
“JS had to 'look like Java'
  only less so, be Java‟s
dumb kid brother or boy-
 hostage sidekick. Plus, I
   had to be done in ten
days or something worse
    than JS would have
        happened”
:
::
:
Aug 1996
       Microsoft
                     Mar 1999                        Firefox
                      XHR                             Safari
                                                     Chrome
                                                     Mobile
                                     //
Sept 1995
Netscape
                          Aug 2001
                            IE6
              June 1997
             ECMAScript
                                          Feb 2005
                                            Ajax
JavaScript won by
       default.
   If you're the last man left on
 earth, it doesn't matter how ugly
you are when the women come to
       re-populate the planet.

                           Scott Koon
Can‟t Beat „em,
Join „em.
Modern JavaScript
  Faster. Easier. Better.
Attwood‟s Law:
Any application that can be
 written in JavaScript, will
 eventually be written in
         JavaScript
            2007
MOST COMMON PROBLEMS
1. Slow Execution
2. Memory leaks
3. Poor Code Organization
4. Lack of Understanding
5(ISH) TIPS
From real
masters:
  Jordan
   Ivan
Tsvetomir
 Atanas
  Burke
   John
 Brandon
TIP #1
jQuery is a friend…
 …that will stab you in the back.




                                    Prove It
CACHE OBJECTS

                                     BAD
$("#myDiv").css("color","red");
$("#myDiv").css("opacity",1);

                                  BETTER
$("#myDiv").css("color","red")
           .css("opacity",1);

                                    BEST*
var $myDiv = $("#myDiv");
$myDiv.css("color","red");
$myDiv.css("opacity",1);          Prove It
NATIVE LOOPS

                                      BAD
$.each(arr, function (i) {i / 2;});


                                  BETTER
arr.forEach(function (i) {i / 2;});

                                      BEST*
var i = 0, len = arr.length;
for (i = 0; i < len; i += 1) {
   i / 2;
}                                Prove It
TIP #2
Avoid Global Variables
     They're slow & rude.
function add(num1, num2){
            return num1 + num2;
        }

        var result = add(5, 10);    Prove It
16:39
BAD
        var name = "Todd";
        function sayHello(){
           alert(name);
        }

                                BETTER
        function sayHello(){
           var name = "Todd";
           alert(name);
        }



16:39
Closures & Module Pattern
BEST(ISH)
        var app = (function(){
             var _name = "Todd";

            return{
               sayHello: function(){
               alert(_name);
            }
          }
        }());

        app.sayHello();

16:39
SUPER PATTERN
         Self-Executing Anonymous Functions + Global Imports
                             + Prototype


(function(window,$,c){
     var _private = "Todd";
     function privateClass(){}

     function myWidget(){}
     myWidget.prototype.doSomething =
function(){}

     window.myWidget = myWidget;
}(window,jQuery,console);
                                              Prove It
TIP #3
Bind to Events & Pub/Sub
          Just listen.
BAD
        <button id="btn" onclick="sayHello();">
        Click Me
        </button>



                                             BETTER
        $(function(){
           $(“#btn").on("click",sayHello);
        });



16:39
BEST
        $(document).on("click",
                   "button", sayHello);




                        Why?


16:39
UNBINDING EVENTS

$(document).off("click","button");
                 OR
$(document).remove("button");
BAD
        function doSomthing{
           ...
           doSomethingElse();

            doOneMoreThing();
        }




16:39
BETTER
        function doSomething{
           ...
           $.trigger("DO_SOMETHING_DONE");
        }

        $(document).on("DO_SOMETHING_DONE",
           function(){
              doSomethingElse();
           });



16:39
ALSO BETTER
        function doSomething(){
           var dfd = new $.Deferred();

            //Do something async, then...
            //dfd.resolve();

            return dfd.promise();
        }

        function doSomethingElse(){
           $.when(doSomething()).then(//The next
        thing);
        }
16:39
TIP #4
Don't fondle the DOM.
       Go with the flow.
My Awesome Page
               Lorem ipsumy samplish
               jibber jabbish text only
               meant to serve as a
               placeholder, and much like
               Pi, should never repeat or
               be read much beyond the
               first few characters.




            Copyright Fo'eva
BAD
 function doSomething{
    ...
    var $list = $("body").append("<ul>");
    for(var i = 0; i < 10; i++){
       $list.append("<li>"+ i +"</li>")
    }
 }




16:39
BETTER
 function doSomething{
    ...
    var $domChunk = $("<ul>");
    for(var i = 0; i < 10; i += 1){
       $domChunk.append("<li>"+ i +"</li>");
    }
    $("body").append($domChunk);
 }




16:39
DOM SPEED WITH
       STRINGS & INNERHTML
function doSomething{
   ...
   var domString = "<ul>";
   for(var i = 0; i < 10; i += 1){
      domString += "<li>"+ i +"</li>";
   }
   domString += "</ul>"
   $("body")[0].innerHTML = domString;
}
                                    Prove It
BEST
 <script type="text/x-kendo-template" id="tmp">
    <ul>
       #for(var i = 0; i < data.length; i += 1){#
           <li>#= data[i] #</li>
       #}#
    </ul>
 </script>

 function doSomething(){
    var myData = [1,..,10];
    var template = kendo.template($("#tmp").html());
    $("body").append(template(myData));
 }

16:39
                                                Prove It
TIP #5
Learn a module pattern.
        And use it.
PERFORMANCE   CONVENIENCE
Manual (index.html)
A.js
       <script src="B.js"></script>
       <script src="A.js"></script>
       <script src="main.js"></script>


       Module Loader (main.js)
B.js
       require(["A","B"], function(){
           //Dependencies are loaded
       });
USE JSLINT
        Guaranteed to Hurt Your Feelings™


         MINIFY YOUR JS
             Words are for humans.


        MASTER BROWSER
           DEV TOOLS
           Debug JavaScript where it runs.

16:39
Debugging
console.log()
Fix IE
   <script type="text/javascript">
      <!--Console global variable fix for IE-->
      if (!this.console) {
        window.console = {
             log: function() {}
        };
      }
   </script>




16:39
Resources for Study
• Books
        – JavaScript: The Good Parts (Crockford)
        – JavaScript: The Definitive Guide (Flanagan)
        – JavaScript Patterns (Stefanov)
        – High Performance JavaScript (Zakas)




16:39
console.clear();
A&Q

anglin@telerik.com | @toddanglin
       www.KendoUI.com

More Related Content

What's hot

Pattern matching
Pattern matchingPattern matching
Pattern matching
shravs_188
 
Object relational and extended relational databases
Object relational and extended relational databasesObject relational and extended relational databases
Object relational and extended relational databases
Suhad Jihad
 
Data base management system
Data base management systemData base management system
Data base management system
Navneet Jingar
 

What's hot (20)

enums
enumsenums
enums
 
SQL.ppt
SQL.pptSQL.ppt
SQL.ppt
 
Java(Polymorphism)
Java(Polymorphism)Java(Polymorphism)
Java(Polymorphism)
 
Basic DBMS ppt
Basic DBMS pptBasic DBMS ppt
Basic DBMS ppt
 
Pattern matching
Pattern matchingPattern matching
Pattern matching
 
Chapter2
Chapter2Chapter2
Chapter2
 
Entities and attributes
Entities and attributesEntities and attributes
Entities and attributes
 
Object oriented database
Object oriented databaseObject oriented database
Object oriented database
 
Architecture of dbms(lecture 3)
Architecture of dbms(lecture 3)Architecture of dbms(lecture 3)
Architecture of dbms(lecture 3)
 
Database Management System
Database Management SystemDatabase Management System
Database Management System
 
PHP - Introduction to File Handling with PHP
PHP -  Introduction to  File Handling with PHPPHP -  Introduction to  File Handling with PHP
PHP - Introduction to File Handling with PHP
 
Database Chapter 3
Database Chapter 3Database Chapter 3
Database Chapter 3
 
Object Oriented Programming
Object Oriented ProgrammingObject Oriented Programming
Object Oriented Programming
 
02 xml schema
02 xml schema02 xml schema
02 xml schema
 
PHP FUNCTIONS
PHP FUNCTIONSPHP FUNCTIONS
PHP FUNCTIONS
 
Object relational and extended relational databases
Object relational and extended relational databasesObject relational and extended relational databases
Object relational and extended relational databases
 
Data base management system
Data base management systemData base management system
Data base management system
 
Object oriented programming
Object oriented programmingObject oriented programming
Object oriented programming
 
PHP - DataType,Variable,Constant,Operators,Array,Include and require
PHP - DataType,Variable,Constant,Operators,Array,Include and requirePHP - DataType,Variable,Constant,Operators,Array,Include and require
PHP - DataType,Variable,Constant,Operators,Array,Include and require
 
Dbms
DbmsDbms
Dbms
 

Viewers also liked

Viewers also liked (18)

The Rich Standard: Getting Familiar with HTML5
The Rich Standard: Getting Familiar with HTML5The Rich Standard: Getting Familiar with HTML5
The Rich Standard: Getting Familiar with HTML5
 
Let’s talk about JavaScript - WebElement
Let’s talk about JavaScript - WebElementLet’s talk about JavaScript - WebElement
Let’s talk about JavaScript - WebElement
 
High Performance Kick Ass Web Apps (JavaScript edition)
High Performance Kick Ass Web Apps (JavaScript edition)High Performance Kick Ass Web Apps (JavaScript edition)
High Performance Kick Ass Web Apps (JavaScript edition)
 
JavaScript - From Birth To Closure
JavaScript - From Birth To ClosureJavaScript - From Birth To Closure
JavaScript - From Birth To Closure
 
JavaScript and Web Standards Sitting in a Tree
JavaScript and Web Standards Sitting in a TreeJavaScript and Web Standards Sitting in a Tree
JavaScript and Web Standards Sitting in a Tree
 
Introduction about-ajax-framework
Introduction about-ajax-frameworkIntroduction about-ajax-framework
Introduction about-ajax-framework
 
JavaScript Library Overview
JavaScript Library OverviewJavaScript Library Overview
JavaScript Library Overview
 
Gettings started with the superheroic JavaScript library AngularJS
Gettings started with the superheroic JavaScript library AngularJSGettings started with the superheroic JavaScript library AngularJS
Gettings started with the superheroic JavaScript library AngularJS
 
Why angular js Framework
Why angular js Framework Why angular js Framework
Why angular js Framework
 
Modern JavaScript Applications: Design Patterns
Modern JavaScript Applications: Design PatternsModern JavaScript Applications: Design Patterns
Modern JavaScript Applications: Design Patterns
 
Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]
 
Introduction to WAMP, a protocol enabling PUB/SUB and RPC over Websocket
Introduction to WAMP, a protocol enabling PUB/SUB and RPC over WebsocketIntroduction to WAMP, a protocol enabling PUB/SUB and RPC over Websocket
Introduction to WAMP, a protocol enabling PUB/SUB and RPC over Websocket
 
Virtual machine and javascript engine
Virtual machine and javascript engineVirtual machine and javascript engine
Virtual machine and javascript engine
 
Javascript
JavascriptJavascript
Javascript
 
JavaScript - An Introduction
JavaScript - An IntroductionJavaScript - An Introduction
JavaScript - An Introduction
 
AngularJS Basics with Example
AngularJS Basics with ExampleAngularJS Basics with Example
AngularJS Basics with Example
 
Introduction to Angularjs
Introduction to AngularjsIntroduction to Angularjs
Introduction to Angularjs
 
The JavaScript Programming Language
The JavaScript Programming LanguageThe JavaScript Programming Language
The JavaScript Programming Language
 

Similar to 5 Tips for Better JavaScript

Your Library Sucks, and why you should use it.
Your Library Sucks, and why you should use it.Your Library Sucks, and why you should use it.
Your Library Sucks, and why you should use it.
Peter Higgins
 
jQuery - 10 Time-Savers You (Maybe) Don't Know
jQuery - 10 Time-Savers You (Maybe) Don't KnowjQuery - 10 Time-Savers You (Maybe) Don't Know
jQuery - 10 Time-Savers You (Maybe) Don't Know
girish82
 
The Beauty Of Java Script V5a
The Beauty Of Java Script V5aThe Beauty Of Java Script V5a
The Beauty Of Java Script V5a
rajivmordani
 

Similar to 5 Tips for Better JavaScript (20)

JavaScript Neednt Hurt - JavaBin talk
JavaScript Neednt Hurt - JavaBin talkJavaScript Neednt Hurt - JavaBin talk
JavaScript Neednt Hurt - JavaBin talk
 
Your Library Sucks, and why you should use it.
Your Library Sucks, and why you should use it.Your Library Sucks, and why you should use it.
Your Library Sucks, and why you should use it.
 
Guidelines to clean coding
Guidelines to clean codingGuidelines to clean coding
Guidelines to clean coding
 
Javascript development done right
Javascript development done rightJavascript development done right
Javascript development done right
 
ES6: The Awesome Parts
ES6: The Awesome PartsES6: The Awesome Parts
ES6: The Awesome Parts
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)
 
GoCracow #5 Bartlomiej klimczak - GoBDD
GoCracow #5 Bartlomiej klimczak - GoBDDGoCracow #5 Bartlomiej klimczak - GoBDD
GoCracow #5 Bartlomiej klimczak - GoBDD
 
jQuery - 10 Time-Savers You (Maybe) Don't Know
jQuery - 10 Time-Savers You (Maybe) Don't KnowjQuery - 10 Time-Savers You (Maybe) Don't Know
jQuery - 10 Time-Savers You (Maybe) Don't Know
 
Wakanday JS201 Best Practices
Wakanday JS201 Best PracticesWakanday JS201 Best Practices
Wakanday JS201 Best Practices
 
ES6 is Nigh
ES6 is NighES6 is Nigh
ES6 is Nigh
 
Making JavaScript Libraries More Approachable
Making JavaScript Libraries More ApproachableMaking JavaScript Libraries More Approachable
Making JavaScript Libraries More Approachable
 
HTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyHTML5 for the Silverlight Guy
HTML5 for the Silverlight Guy
 
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptjQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
 
Txjs
TxjsTxjs
Txjs
 
The Beauty of Java Script
The Beauty of Java ScriptThe Beauty of Java Script
The Beauty of Java Script
 
The Beauty Of Java Script V5a
The Beauty Of Java Script V5aThe Beauty Of Java Script V5a
The Beauty Of Java Script V5a
 
Defensive programming in Javascript and Node.js
Defensive programming in Javascript and Node.jsDefensive programming in Javascript and Node.js
Defensive programming in Javascript and Node.js
 
Jquery optimization-tips
Jquery optimization-tipsJquery optimization-tips
Jquery optimization-tips
 
Perkenalan ReasonML
Perkenalan ReasonMLPerkenalan ReasonML
Perkenalan ReasonML
 
Playing With Fire - An Introduction to Node.js
Playing With Fire - An Introduction to Node.jsPlaying With Fire - An Introduction to Node.js
Playing With Fire - An Introduction to Node.js
 

More from Todd Anglin

HTML5 Mullet: Forms & Input Validation
HTML5 Mullet: Forms & Input ValidationHTML5 Mullet: Forms & Input Validation
HTML5 Mullet: Forms & Input Validation
Todd Anglin
 
HTML5 and CSS3 Techniques You Can Use Today
HTML5 and CSS3 Techniques You Can Use TodayHTML5 and CSS3 Techniques You Can Use Today
HTML5 and CSS3 Techniques You Can Use Today
Todd Anglin
 

More from Todd Anglin (16)

NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularNativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
 
Edge of the Web
Edge of the WebEdge of the Web
Edge of the Web
 
Making HTML5 Work Everywhere
Making HTML5 Work EverywhereMaking HTML5 Work Everywhere
Making HTML5 Work Everywhere
 
Developing a Modern Mobile App Strategy
Developing a Modern Mobile App StrategyDeveloping a Modern Mobile App Strategy
Developing a Modern Mobile App Strategy
 
HTML5 Bootcamp: Essential HTML, CSS, & JavaScript
HTML5 Bootcamp: Essential HTML, CSS, & JavaScriptHTML5 Bootcamp: Essential HTML, CSS, & JavaScript
HTML5 Bootcamp: Essential HTML, CSS, & JavaScript
 
HTML5 Mullet: Forms & Input Validation
HTML5 Mullet: Forms & Input ValidationHTML5 Mullet: Forms & Input Validation
HTML5 Mullet: Forms & Input Validation
 
50in50: Resources for HTML5, CSS3, & JavaScript Developers
50in50: Resources for HTML5, CSS3, & JavaScript Developers50in50: Resources for HTML5, CSS3, & JavaScript Developers
50in50: Resources for HTML5, CSS3, & JavaScript Developers
 
Using HTML5 to Build Mobile Apps
Using HTML5 to Build Mobile AppsUsing HTML5 to Build Mobile Apps
Using HTML5 to Build Mobile Apps
 
HTML5 and CSS3 Techniques You Can Use Today
HTML5 and CSS3 Techniques You Can Use TodayHTML5 and CSS3 Techniques You Can Use Today
HTML5 and CSS3 Techniques You Can Use Today
 
HTML5 for Tablets and Mobile
HTML5 for Tablets and MobileHTML5 for Tablets and Mobile
HTML5 for Tablets and Mobile
 
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET DevelopersAccelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
 
Doing More with LESS for CSS
Doing More with LESS for CSSDoing More with LESS for CSS
Doing More with LESS for CSS
 
Building RESTful Applications with OData
Building RESTful Applications with ODataBuilding RESTful Applications with OData
Building RESTful Applications with OData
 
Building a Testable Data Access Layer
Building a Testable Data Access LayerBuilding a Testable Data Access Layer
Building a Testable Data Access Layer
 
HTML5 and CSS3 Techniques You Can Use Today
HTML5 and CSS3 Techniques You Can Use TodayHTML5 and CSS3 Techniques You Can Use Today
HTML5 and CSS3 Techniques You Can Use Today
 
What’s New in ASP.NET 4
What’s New in ASP.NET 4What’s New in ASP.NET 4
What’s New in ASP.NET 4
 

Recently uploaded

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Recently uploaded (20)

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 

5 Tips for Better JavaScript

  • 1. 5 Tips For Better @toddanglin
  • 2.
  • 4. @toddanglin Brought to you by @KendoUI
  • 12. “JS had to 'look like Java' only less so, be Java‟s dumb kid brother or boy- hostage sidekick. Plus, I had to be done in ten days or something worse than JS would have happened”
  • 14. Aug 1996 Microsoft Mar 1999 Firefox XHR Safari Chrome Mobile // Sept 1995 Netscape Aug 2001 IE6 June 1997 ECMAScript Feb 2005 Ajax
  • 15. JavaScript won by default. If you're the last man left on earth, it doesn't matter how ugly you are when the women come to re-populate the planet. Scott Koon
  • 17. Modern JavaScript Faster. Easier. Better.
  • 18.
  • 19.
  • 20. Attwood‟s Law: Any application that can be written in JavaScript, will eventually be written in JavaScript 2007
  • 22. 1. Slow Execution 2. Memory leaks 3. Poor Code Organization 4. Lack of Understanding
  • 24. From real masters: Jordan Ivan Tsvetomir Atanas Burke John Brandon
  • 25. TIP #1 jQuery is a friend… …that will stab you in the back. Prove It
  • 26. CACHE OBJECTS BAD $("#myDiv").css("color","red"); $("#myDiv").css("opacity",1); BETTER $("#myDiv").css("color","red") .css("opacity",1); BEST* var $myDiv = $("#myDiv"); $myDiv.css("color","red"); $myDiv.css("opacity",1); Prove It
  • 27. NATIVE LOOPS BAD $.each(arr, function (i) {i / 2;}); BETTER arr.forEach(function (i) {i / 2;}); BEST* var i = 0, len = arr.length; for (i = 0; i < len; i += 1) { i / 2; } Prove It
  • 28. TIP #2 Avoid Global Variables They're slow & rude.
  • 29. function add(num1, num2){ return num1 + num2; } var result = add(5, 10); Prove It 16:39
  • 30. BAD var name = "Todd"; function sayHello(){ alert(name); } BETTER function sayHello(){ var name = "Todd"; alert(name); } 16:39
  • 31. Closures & Module Pattern
  • 32. BEST(ISH) var app = (function(){ var _name = "Todd"; return{ sayHello: function(){ alert(_name); } } }()); app.sayHello(); 16:39
  • 33. SUPER PATTERN Self-Executing Anonymous Functions + Global Imports + Prototype (function(window,$,c){ var _private = "Todd"; function privateClass(){} function myWidget(){} myWidget.prototype.doSomething = function(){} window.myWidget = myWidget; }(window,jQuery,console); Prove It
  • 34. TIP #3 Bind to Events & Pub/Sub Just listen.
  • 35. BAD <button id="btn" onclick="sayHello();"> Click Me </button> BETTER $(function(){ $(“#btn").on("click",sayHello); }); 16:39
  • 36. BEST $(document).on("click", "button", sayHello); Why? 16:39
  • 37. UNBINDING EVENTS $(document).off("click","button"); OR $(document).remove("button");
  • 38. BAD function doSomthing{ ... doSomethingElse(); doOneMoreThing(); } 16:39
  • 39. BETTER function doSomething{ ... $.trigger("DO_SOMETHING_DONE"); } $(document).on("DO_SOMETHING_DONE", function(){ doSomethingElse(); }); 16:39
  • 40. ALSO BETTER function doSomething(){ var dfd = new $.Deferred(); //Do something async, then... //dfd.resolve(); return dfd.promise(); } function doSomethingElse(){ $.when(doSomething()).then(//The next thing); } 16:39
  • 41. TIP #4 Don't fondle the DOM. Go with the flow.
  • 42. My Awesome Page Lorem ipsumy samplish jibber jabbish text only meant to serve as a placeholder, and much like Pi, should never repeat or be read much beyond the first few characters. Copyright Fo'eva
  • 43. BAD function doSomething{ ... var $list = $("body").append("<ul>"); for(var i = 0; i < 10; i++){ $list.append("<li>"+ i +"</li>") } } 16:39
  • 44. BETTER function doSomething{ ... var $domChunk = $("<ul>"); for(var i = 0; i < 10; i += 1){ $domChunk.append("<li>"+ i +"</li>"); } $("body").append($domChunk); } 16:39
  • 45. DOM SPEED WITH STRINGS & INNERHTML function doSomething{ ... var domString = "<ul>"; for(var i = 0; i < 10; i += 1){ domString += "<li>"+ i +"</li>"; } domString += "</ul>" $("body")[0].innerHTML = domString; } Prove It
  • 46. BEST <script type="text/x-kendo-template" id="tmp"> <ul> #for(var i = 0; i < data.length; i += 1){# <li>#= data[i] #</li> #}# </ul> </script> function doSomething(){ var myData = [1,..,10]; var template = kendo.template($("#tmp").html()); $("body").append(template(myData)); } 16:39 Prove It
  • 47. TIP #5 Learn a module pattern. And use it.
  • 48. PERFORMANCE CONVENIENCE
  • 49. Manual (index.html) A.js <script src="B.js"></script> <script src="A.js"></script> <script src="main.js"></script> Module Loader (main.js) B.js require(["A","B"], function(){ //Dependencies are loaded });
  • 50. USE JSLINT Guaranteed to Hurt Your Feelings™ MINIFY YOUR JS Words are for humans. MASTER BROWSER DEV TOOLS Debug JavaScript where it runs. 16:39
  • 53. Fix IE <script type="text/javascript"> <!--Console global variable fix for IE--> if (!this.console) { window.console = { log: function() {} }; } </script> 16:39
  • 54. Resources for Study • Books – JavaScript: The Good Parts (Crockford) – JavaScript: The Definitive Guide (Flanagan) – JavaScript Patterns (Stefanov) – High Performance JavaScript (Zakas) 16:39
  • 56.

Editor's Notes

  1. 5 Tips for Better JavaScript Love it or hate it, JavaScript is playing an increasingly important role in the next generation of web and mobile apps. As code continues to move from the server to the client, JavaScript is being used to do more than simple HTML manipulation. Be prepared for this transition and make sure the JavaScript you write is optimized and ready to perform on desktops and devices! In this session, you will learn ten practical tips that you can use today to write faster, more maintainable, memory friendly JavaScript. You will also learn techniques for testing, debugging, and profiling JavaScript apps.
  2. anglin@telerik.comKendo UI: Everything you need to build sites &amp; mobile apps with HTML and JavaScript (http://www.kendoui.com)
  3. AGENDA:- Why JavaScript? Why?!- Most Common JS Problems- TIPS- Future of JavaScript
  4. JavaScript uses syntax influenced by that of C. JavaScript copies many names and naming conventions from Java, but the two languages are otherwise unrelated and have very different semantics. The key design principles within JavaScript are taken from the Self and Scheme programming languages.http://en.wikipedia.org/wiki/JavaScript
  5. NOTES:HistoryEvolutionThe IE Connection (IE6 memory)Modern JS EnginesBOTTOM LINE: Only Cross Platform Language Solution
  6. Netscape also wanted a lightweight interpreted language that would complement Java by appealing to nonprofessional programmers, like Microsoft&apos;s VB
  7. Credit: Brendan Eich via WikipediaSource: http://www.jwz.org/blog/2010/10/every-day-i-learn-something-new-and-stupid/#comment-1021Brendan further said that JavaScript saved the world from VBScripthttp://www.jwz.org/blog/2010/10/every-day-i-learn-something-new-and-stupid/#comment-1049
  8. Java is to JavaScriptASCar is to CarpetNetscape was going to release JavaScript as “LiveScript.” Last minute change produced JavaScript.
  9. HOW DID JAVASCRIPT BECOME UBIQUITOUS?Netscape shipped first in Netscape 2Microsoft support added in IE3 (“JScript”)Other environments adopted JavaScript-like script languages: ActionScript (Flash), PDFs, Qt
  10. http://www.codinghorror.com/blog/2007/05/javascript-the-lingua-franca-of-the-web.html
  11. Contributing factors:New JS engines (V8)CPU speed (more local processing power)Better debugging toolsBetter understanding of language (closures, patterns, functional programming, JSLint)
  12. Chrome is 10x faster than IE7 (IE6 too old to test)Used crude relative test: http://jsbenchmark.celtickane.com
  13. http://geekmontage.com/firefox-vs-chrome-vs-ie/
  14. http://www.codinghorror.com/blog/2007/07/the-principle-of-least-power.htmlThe Principle of Least Power
  15. Jordan Ilchev, Icenium Team LeadIvan Ivanov, Sr DeveloperBurke Holland, Evangelist, Kendo UIJohn Bristowe, Evangelist, Kendo UITsvetomirTsonev, Sr Developer, Kendo UI
  16. jQuery built for convenience, not for performance.PERF PROOF: http://jsperf.com/id-vs-class-vs-tag-selectors/46Note: This in general is applicable to native JavaScript methods too, like document.getElementById()  not limited to jQuery only objects DOM lookups are slow especially if DOM is huge.Instead of this:$(&apos;#test&apos;).bind(&apos;click&apos;, function() { /**/ });$(&apos;#test&apos;).css(&apos;border&apos;, &apos;1px solid #999&apos;);Better use jQuery Method chaining:$(&apos;#test&apos;).bind(&apos;click&apos;, function() {/**/ })                 .css(&apos;border&apos;, &apos;1px solid #999&apos;);Or cache jQuery object:var $test = $(&apos;#test&apos;);$test.bind(&apos;click&apos;, function() {/**/ });$test.css(&apos;border&apos;, &apos;1px solid #999&apos;);(Performance comparison here: http://jsperf.com/jquery-chaining/12) (~+30% here, but it stacks on each additional method call)
  17. PRO TIP CONVENTION: Name jQuery variables with $ (ie $myObject)PERF TEST: http://jsperf.com/caching-jquery-objects-perfhttp://jsbin.com/udizam/2
  18. PERF TEST: http://jsperf.com/for-vs-foreach-vs-each/3- Caching the array length improves perf by about 15% (http://jsperf.com/for-vs-foreach-vs-each/24)- Technically a reverse (count down) for loop is faster (15%) than count-up loop, but much harder to read/use
  19. Global variables pollute the JS app and are slower to use in code. Harder to be a good JS &quot;neighbor&quot; with global variables (collide with other JS code).Better to use local variables, cached variable, or closures
  20. Chart credit: http://oreilly.com/server-administration/excerpts/even-faster-websites/writing-efficient-javascript.htmlPERF TEST: http://jsperf.com/global/2
  21. Pattern sometimes referred to as: MODULE EXPORThttp://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-DepthBE CAREFUL WITH CLOSURES: Most common source of memory leaks in modern appshttps://developers.google.com/speed/articles/optimizing-javascriptCircular Reference Memory Leaks: http://blogs.msdn.com/b/ericlippert/archive/2003/09/17/53028.aspx
  22. PERF TEST: http://jsperf.com/prototype-vs-closures/20Suppose you develop a widget. The widget has a number of axillary classes. If you just define them globally they will pollute the global window class, meaning they will be available from everywhere. Instead consider the following definition:             (function (window) {                        function classA () {}                        function classB () {}                                               function myWidget () {}                        myWidget.prototype.method1 = function ()                        {                        }                                               window.myWidget = myWidget;                                   }) (window, undefined); This is the pattern which jQuery follows. Now the only available global definition will be of myWidget. classA and classB remain hidden in the anonymous function. If you look closely in the definition, you will see the that window and undefined are passed to the anonymous function. Passing anonymous guaranties that undefined will be available in the scope of this function and will prevent you from someone who accidentally did something like: undefined = true; before your function. Also, if you use some minifier, it will replace all occurrences of window with some shorter name. Of course you can pass as much params as you wish, thus assuring that these objects exist in the scope of your anonymous function.
  23. - Binding to delegates is less brittle, easier to avoid memory leaks- Pub/Sub is super flexible, less coupling
  24. The scope of an inline event bind is GLOBAL!Inline event handlers can also cause memory leaks in IE: https://developers.google.com/speed/articles/optimizing-javascript
  25. Old jQuery syntax: .delegate
  26. Every time you need to dispose a DOM element, make sure you unbind all of its events, unless you want to come up with a memory leak.Whenever you bind an event handler to an event, you tell the processor to allocate memory for it. The more event handlers you have running at the same time, the more memory you are using. This is why it&apos;s important to unbind or detach your event handlers soon as you no longer need them.http://www.learnjquery.org/newsletter/Tutorial-3-jquery-events.html
  27. Event listening PUB/SUB
  28. Reducing the time spent changing the DOM improvesperf. Using templates improves readability/maintainability.Instead of this:var $list = $(&apos;#mylist&apos;).append(&apos;&lt;ul&gt;&apos;);for (var i = 0, l = itemlist.length; i &lt; l; i++) {       $list.append(&apos;&lt;li&gt;&apos; + itemlist[i] + &apos;&lt;/li&gt;&apos;);}better this:var $list = $(&apos;&lt;ul&gt;&apos;);for (var i = 0, l = itemlist.length; i &lt; l; i++) {       $list.append(&apos;&lt;li&gt;&apos; + itemlist[i] + &apos;&lt;/li&gt;&apos;);}$(&apos;#mylist&apos;).append($list);(Performance comparison here: http://jsperf.com/jquery-dom-manipulation/3) (up to x5 in this case)
  29. PERF TEST: http://jsperf.com/jquery-dom-manipulation/4When you want to dynamically build html, prefer string concatenation like: var html = ’&lt;p&gt;some paragraph&lt;/p&gt;’;html += ‘&lt;p&gt;another paragraph&lt;/p&gt;’;$(“#placeHolder”).html(html); over DOM object creation and appending/prepending like:             var p1 = document.createElement(&apos;p&apos;);            p1.innerHTML = &quot;some paragraph&quot;;            document.body.appendChild(p1);             var p2 = document.createElement(&apos;p’);            p2.innerHTML = &quot;another paragraph&quot;;            document.body.appendChild(p2);      assigning directly to the innerHTML proves to be the fastest method for html creation.
  30. PERF TEST: http://jsperf.com/jquery-dom-manipulation/5
  31. Common Examples:RequireJS, CommonJSApplications of any size are painful to manage without a module pattern.
  32. We want to reduce JavaScript files for performance (fewer network requests), BUT…One large JS file is hard to maintain. We&apos;d really prefer more modular files.
  33. JSLint – by Douglas CrockfordCode quality tool for JavaScripthttp://www.jslint.com/
  34. More complete fix by Paul Irish: http://paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/