O Reilly Ebooks Your bookshelf on your devices!
|
|
|
- Arnold Stevenson
- 10 years ago
- Views:
Transcription
1 Free Sampler
2 O Reilly Ebooks Your bookshelf on your devices! When you buy an ebook through oreilly.com, you get lifetime access to the book, and whenever possible we provide it to you in four, DRM-free file formats PDF,.epub, Kindle-compatible.mobi, and Android.apk ebook that you can use on the devices of your choice. Our ebook files are fully searchable and you can cut-and-paste and print them. We also alert you when we ve updated the files with corrections and additions. Learn more at You can also purchase O Reilly ebooks through itunes, the Android Marketplace, and Amazon.com.
3 High Performance JavaScript by Nicholas C. Zakas Copyright 2010 Yahoo!, Inc. All rights reserved. Printed in the United States of America. Published by O Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA O Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles ( For more information, contact our corporate/institutional sales department: (800) or [email protected]. Editor: Production Editor: Copyeditor: Proofreader: Mary E. Treseler Adam Zaremba Genevieve d Entremont Adam Zaremba Indexer: Cover Designer: Interior Designer: Illustrator: Fred Brown Karen Montgomery David Futato Robert Romano Printing History: March 2010: First Edition. Nutshell Handbook, the Nutshell Handbook logo, and the O Reilly logo are registered trademarks of O Reilly Media, Inc. High Performance JavaScript, the image of a short-eared owl, and related trade dress are trademarks of O Reilly Media, Inc. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and O Reilly Media, Inc. was aware of a trademark claim, the designations have been printed in caps or initial caps. While every precaution has been taken in the preparation of this book, the publisher and author assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. TM This book uses RepKover, a durable and flexible lay-flat binding. ISBN: [M]
4 Table of Contents Preface xi 1. Loading and Execution Script Positioning 2 Grouping Scripts 4 Nonblocking Scripts 5 Deferred Scripts 5 Dynamic Script Elements 6 XMLHttpRequest Script Injection 9 Recommended Nonblocking Pattern 10 Summary Data Access Managing Scope 16 Scope Chains and Identifier Resolution 16 Identifier Resolution Performance 19 Scope Chain Augmentation 21 Dynamic Scopes 24 Closures, Scope, and Memory 24 Object Members 27 Prototypes 27 Prototype Chains 29 Nested Members 30 Caching Object Member Values 31 Summary DOM Scripting DOM in the Browser World 35 Inherently Slow 36 DOM Access and Modification 36 innerhtml Versus DOM methods 37 vii
5 Cloning Nodes 41 HTML Collections 42 Walking the DOM 46 Repaints and Reflows 50 When Does a Reflow Happen? 51 Queuing and Flushing Render Tree Changes 51 Minimizing Repaints and Reflows 52 Caching Layout Information 56 Take Elements Out of the Flow for Animations 56 IE and :hover 57 Event Delegation 57 Summary Algorithms and Flow Control Loops 61 Types of Loops 61 Loop Performance 63 Function-Based Iteration 67 Conditionals 68 if-else Versus switch 68 Optimizing if-else 70 Lookup Tables 72 Recursion 73 Call Stack Limits 74 Recursion Patterns 75 Iteration 76 Memoization 77 Summary Strings and Regular Expressions String Concatenation 81 Plus (+) and Plus-Equals (+=) Operators 82 Array Joining 84 String.prototype.concat 86 Regular Expression Optimization 87 How Regular Expressions Work 88 Understanding Backtracking 89 Runaway Backtracking 91 A Note on Benchmarking 96 More Ways to Improve Regular Expression Efficiency 96 When Not to Use Regular Expressions 99 String Trimming 99 Trimming with Regular Expressions 99 viii Table of Contents
6 Trimming Without Regular Expressions 102 A Hybrid Solution 103 Summary Responsive Interfaces The Browser UI Thread 107 Browser Limits 109 How Long Is Too Long? 110 Yielding with Timers 111 Timer Basics 112 Timer Precision 114 Array Processing with Timers 114 Splitting Up Tasks 116 Timed Code 118 Timers and Performance 119 Web Workers 120 Worker Environment 120 Worker Communication 121 Loading External Files 122 Practical Uses 122 Summary Ajax Data Transmission 125 Requesting Data 125 Sending Data 131 Data Formats 134 XML 134 JSON 137 HTML 141 Custom Formatting 142 Data Format Conclusions 144 Ajax Performance Guidelines 145 Cache Data 145 Know the Limitations of Your Ajax Library 148 Summary Programming Practices Avoid Double Evaluation 151 Use Object/Array Literals 153 Don t Repeat Work 154 Lazy Loading 154 Conditional Advance Loading 156 Table of Contents ix
7 Use the Fast Parts 156 Bitwise Operators 156 Native Methods 159 Summary Building and Deploying High-Performance JavaScript Applications Apache Ant 163 Combining JavaScript Files 165 Preprocessing JavaScript Files 166 JavaScript Minification 168 Buildtime Versus Runtime Build Processes 170 JavaScript Compression 170 Caching JavaScript Files 171 Working Around Caching Issues 172 Using a Content Delivery Network 173 Deploying JavaScript Resources 173 Agile JavaScript Build Process 174 Summary Tools JavaScript Profiling 178 YUI Profiler 179 Anonymous Functions 182 Firebug 183 Console Panel Profiler 183 Console API 184 Net Panel 185 Internet Explorer Developer Tools 186 Safari Web Inspector 188 Profiles Panel 189 Resources Panel 191 Chrome Developer Tools 192 Script Blocking 193 Page Speed 194 Fiddler 196 YSlow 198 dynatrace Ajax Edition 199 Summary 202 Index x Table of Contents
8 CHAPTER 1 Loading and Execution JavaScript performance in the browser is arguably the most important usability issue facing developers. The problem is complex because of the blocking nature of JavaScript, which is to say that nothing else can happen while JavaScript code is being executed. In fact, most browsers use a single process for both user interface (UI) updates and JavaScript execution, so only one can happen at any given moment in time. The longer JavaScript takes to execute, the longer it takes before the browser is free to respond to user input. On a basic level, this means that the very presence of a <script> tag is enough to make the page wait for the script to be parsed and executed. Whether the actual JavaScript code is inline with the tag or included in an external file is irrelevant; the page download and rendering must stop and wait for the script to complete before proceeding. This is a necessary part of the page s life cycle because the script may cause changes to the page while executing. The typical example is using document.write() in the middle of a page (as often used by advertisements). For example: <html> <head> <title>script Example</title> </head> <body> <p> <script type="text/javascript"> document.write("the date is " + (new Date()).toDateString()); </script> </p> </body> </html> When the browser encounters a <script> tag, as in this HTML page, there is no way of knowing whether the JavaScript will insert content into the <p>, introduce additional elements, or perhaps even close the tag. Therefore, the browser stops processing the page as it comes in, executes the JavaScript code, then continues parsing and rendering the page. The same takes place for JavaScript loaded using the src attribute; the browser must first download the code from the external file, which takes time, and then parse 1
9 and execute the code. Page rendering and user interaction are completely blocked during this time. Script Positioning The two leading sources of information on JavaScript affecting page download performance are the Yahoo! Exceptional Performance team ( and Steve Souders, author of High Performance Web Sites (O Reilly) and Even Faster Web Sites (O Reilly). This chapter is heavily influenced by their combined research. The HTML 4 specification indicates that a <script> tag may be placed inside of a <head> or <body> tag in an HTML document and may appear any number of times within each. Traditionally, <script> tags that are used to load external JavaScript files have appeared in the <head>, along with <link> tags to load external CSS files and other metainformation about the page. The theory was that it s best to keep as many style and behavior dependencies together, loading them first so that the page will come in looking and behaving correctly. For example: <html> <head> <title>script Example</title> <-- Example of inefficient script positioning --> <script type="text/javascript" src="file1.js"></script> <script type="text/javascript" src="file2.js"></script> <script type="text/javascript" src="file3.js"></script> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <p>hello world!</p> </body> </html> Though this code seems innocuous, it actually has a severe performance issue: there are three JavaScript files being loaded in the <head>. Since each <script> tag blocks the page from continuing to render until it has fully downloaded and executed the Java- Script code, the perceived performance of this page will suffer. Keep in mind that browsers don t start rendering anything on the page until the opening <body> tag is encountered. Putting scripts at the top of the page in this way typically leads to a noticeable delay, often in the form of a blank white page, before the user can even begin reading or otherwise interacting with the page. To get a good understanding of how this occurs, it s useful to look at a waterfall diagram showing when each resource is downloaded. Figure 1-1 shows when each script and the stylesheet file get downloaded as the page is loading. Figure 1-1 shows an interesting pattern. The first JavaScript file begins to download and blocks any of the other files from downloading in the meantime. Further, there is 2 Chapter 1: Loading and Execution
10 Figure 1-1. JavaScript code execution blocks other file downloads a delay between the time at which file1.js is completely downloaded and the time at which file2.js begins to download. That space is the time it takes for the code contained in file1.js to fully execute. Each file must wait until the previous one has been downloaded and executed before the next download can begin. In the meantime, the user is met with a blank screen as the files are being downloaded one at a time. This is the behavior of most major browsers today. Internet Explorer 8, Firefox 3.5, Safari 4, and Chrome 2 all allow parallel downloads of JavaScript files. This is good news because the <script> tags don t necessarily block other <script> tags from downloading external resources. Unfortunately, JavaScript downloads still block downloading of other resources, such as images. And even though downloading a script doesn t block other scripts from downloading, the page must still wait for the JavaScript code to be downloaded and executed before continuing. So while the latest browsers have improved performance by allowing parallel downloads, the problem hasn t been completely solved. Script blocking still remains a problem. Because scripts block downloading of all resource types on the page, it s recommended to place all <script> tags as close to the bottom of the <body> tag as possible so as not to affect the download of the entire page. For example: <html> <head> <title>script Example</title> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <p>hello world!</p> <-- Example of recommended script positioning --> <script type="text/javascript" src="file1.js"></script> <script type="text/javascript" src="file2.js"></script> <script type="text/javascript" src="file3.js"></script> </body> </html> This code represents the recommended position for <script> tags in an HTML file. Even though the script downloads will block one another, the rest of the page has Script Positioning 3
11 already been downloaded and displayed to the user so that the entire page isn t perceived as slow. This is the Yahoo! Exceptional Performance team s first rule about JavaScript: put scripts at the bottom. Grouping Scripts Since each <script> tag blocks the page from rendering during initial download, it s helpful to limit the total number of <script> tags contained in the page. This applies to both inline scripts as well as those in external files. Every time a <script> tag is encountered during the parsing of an HTML page, there is going to be a delay while the code is executed; minimizing these delays improves the overall performance of the page. Steve Souders has also found that an inline script placed after a <link> tag referencing an external stylesheet caused the browser to block while waiting for the stylesheet to download. This is done to ensure that the inline script will have the most correct style information with which to work. Souders recommends never putting an inline script after a <link> tag for this reason. The problem is slightly different when dealing with external JavaScript files. Each HTTP request brings with it additional performance overhead, so downloading one single 100 KB file will be faster than downloading four 25 KB files. To that end, it s helpful to limit the number of external script files that your page references. Typically, a large website or web application will have several required JavaScript files. You can minimize the performance impact by concatenating these files together into a single file and then calling that single file with a single <script> tag. The concatenation can happen offline using a build tool (discussed in Chapter 9) or in real-time using a tool such as the Yahoo! combo handler. Yahoo! created the combo handler for use in distributing the Yahoo! User Interface (YUI) library files through their Content Delivery Network (CDN). Any website can pull in any number of YUI files by using a combo-handled URL and specifying the files to include. For example, this URL includes two files: This URL loads the versions of the yahoo-min.js and event-min.js files. These files exist separately on the server but are combined when this URL is requested. Instead of using two <script> tags (one to load each file), a single <script> tag can be used to load both: 4 Chapter 1: Loading and Execution
12 <html> <head> <title>script Example</title> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <p>hello world!</p> <-- Example of recommended script positioning --> <script type="text/javascript" src=" /build/event/event-min.js "></script> </body> </html> This code has a single <script> tag at the bottom of the page that loads multiple Java- Script files, showing the best practice for including external JavaScript on an HTML page. Nonblocking Scripts JavaScript s tendency to block browser processes, both HTTP requests and UI updates, is the most notable performance issue facing developers. Keeping JavaScript files small and limiting the number of HTTP requests are only the first steps in creating a responsive web application. The richer the functionality an application requires, the more JavaScript code is required, and so keeping source code small isn t always an option. Limiting yourself to downloading a single large JavaScript file will only result in locking the browser out for a long period of time, despite it being just one HTTP request. To get around this situation, you need to incrementally add more JavaScript to the page in a way that doesn t block the browser. The secret to nonblocking scripts is to load the JavaScript source code after the page has finished loading. In technical terms, this means downloading the code after the window s load event has been fired. There are a few techniques for achieving this result. Deferred Scripts HTML 4 defines an additional attribute for the <script> tag called defer. The defer attribute indicates that the script contained within the element is not going to modify the DOM and therefore execution can be safely deferred until a later point in time. The defer attribute is supported only in Internet Explorer 4+ and Firefox 3.5+, making it less than ideal for a generic cross-browser solution. In other browsers, the defer attribute is simply ignored and so the <script> tag is treated in the default (blocking) manner. Still, this solution is useful if your target browsers support it. The following is an example usage: <script type="text/javascript" src="file1.js" defer></script> Nonblocking Scripts 5
13 A <script> tag with defer may be placed anywhere in the document. The JavaScript file will begin downloading at the point that the <script> tag is parsed, but the code will not be executed until the DOM has been completely loaded (before the onload event handler is called). When a deferred JavaScript file is downloaded, it doesn t block the browser s other processes, and so these files can be downloaded in parallel with others on the page. Any <script> element marked with defer will not execute until after the DOM has been completely loaded; this holds true for inline scripts as well as for external script files. The following simple page demonstrates how the defer attribute alters the behavior of scripts: <html> <head> <title>script Defer Example</title> </head> <body> <script defer> alert("defer"); </script> <script> alert("script"); </script> <script> window.onload = function(){ alert("load"); }; </script> </body> </html> This code displays three alerts as the page is being processed. In browsers that don t support defer, the order of the alerts is defer, script, and load. In browsers that support defer, the order of the alerts is script, defer, and load. Note that the deferred <script> element isn t executed until after the second but is executed before the onload event handler is called. If your target browsers include only Internet Explorer and Firefox 3.5, then deferring scripts in this manner can be helpful. If you have a larger cross-section of browsers to support, there are other solutions that work in a more consistent manner. Dynamic Script Elements The Document Object Model (DOM) allows you to dynamically create almost any part of an HTML document using JavaScript. At its root, the <script> element isn t any different than any other element on a page: references can be retrieved through the DOM, and they can be moved, removed from the document, and even created. A new <script> element can be created very easily using standard DOM methods: 6 Chapter 1: Loading and Execution
14 var script = document.createelement("script"); script.type = "text/javascript"; script.src = "file1.js"; document.getelementsbytagname("head")[0].appendchild(script); This new <script> element loads the source file file1.js. The file begins downloading as soon as the element is added to the page. The important thing about this technique is that the file is downloaded and executed without blocking other page processes, regardless of where the download is initiated. You can even place this code in the <head> of a document without affecting the rest of the page (aside from the one HTTP connection that is used to download the file). It s generally safer to add new <script> nodes to the <head> element instead of the <body>, especially if this code is executing during page load. Internet Explorer may experience an operation aborted error if all of the <body> contents have not yet been loaded. * When a file is downloaded using a dynamic script node, the retrieved code is typically executed immediately (except in Firefox and Opera, which will wait until any previous dynamic script nodes have executed). This works well when the script is self-executing but can be problematic if the code contains only interfaces to be used by other scripts on the page. In that case, you need to track when the code has been fully downloaded and is ready for use. This is accomplished using events that are fired by the dynamic <script> node. Firefox, Opera, Chrome, and Safari 3+ all fire a load event when the src of a <script> element has been retrieved. You can therefore be notified when the script is ready by listening for this event: var script = document.createelement("script") script.type = "text/javascript"; //Firefox, Opera, Chrome, Safari 3+ script.onload = function(){ alert("script loaded!"); }; script.src = "file1.js"; document.getelementsbytagname("head")[0].appendchild(script); Internet Explorer supports an alternate implementation that fires a readystatechange event. There is a readystate property on the <script> element that is changed at various times during the download of an external file. There are five possible values for ready State: * See The dreaded operation aborted error at -dreaded-operation-aborted-error/ for a more in-depth discussion of this issue. Nonblocking Scripts 7
15 "uninitialized" The default state "loading" Download has begun "loaded" Download has completed "interactive" Data is completely downloaded but isn t fully available "complete" All data is ready to be used Microsoft s documentation for readystate and each of the possible values seems to indicate that not all states will be used during the lifetime of the <script> element, but there is no indication as to which will always be used. In practice, the two states of most interest are "loaded" and "complete". Internet Explorer is inconsistent with which of these two readystate values indicates the final state, as sometimes the <script> element will reach the "loaded" state but never reach "complete" whereas other times "com plete" will be reached without "loaded" ever having been used. The safest way to use the readystatechange event is to check for both of these states and remove the event handler when either one occurs (to ensure the event isn t handled twice): var script = document.createelement("script") script.type = "text/javascript"; //Internet Explorer script.onreadystatechange = function(){ if (script.readystate == "loaded" script.readystate == "complete"){ script.onreadystatechange = null; alert("script loaded."); } }; script.src = "file1.js"; document.getelementsbytagname("head")[0].appendchild(script); In most cases, you ll want to use a single approach to dynamically load JavaScript files. The following function encapsulates both the standard and IE-specific functionality: function loadscript(url, callback){ var script = document.createelement("script") script.type = "text/javascript"; if (script.readystate){ //IE script.onreadystatechange = function(){ if (script.readystate == "loaded" script.readystate == "complete"){ script.onreadystatechange = null; callback(); } }; 8 Chapter 1: Loading and Execution
16 } } else { //Others script.onload = function(){ callback(); }; } script.src = url; document.getelementsbytagname("head")[0].appendchild(script); This function accepts two arguments: the URL of the JavaScript file to retrieve and a callback function to execute when the JavaScript has been fully loaded. Feature detection is used to determine which event handler should monitor the script s progress. The last step is to assign the src property and add the <script> element to the page. The loadscript() function is used as follows: loadscript("file1.js", function(){ alert("file is loaded!"); You can dynamically load as many JavaScript files as necessary on a page, but make sure you consider the order in which files must be loaded. Of all the major browsers, only Firefox and Opera guarantee that the order of script execution will remain the same as you specify. Other browsers will download and execute the various code files in the order in which they are returned from the server. You can guarantee the order by chaining the downloads together, such as: loadscript("file1.js", function(){ loadscript("file2.js", function(){ loadscript("file3.js", function(){ alert("all files are loaded!"); This code waits to begin loading file2.js until file1.js is available and also waits to download file3.js until file2.js is available. Though possible, this approach can get a little bit difficult to manage if there are multiple files to download and execute. If the order of multiple files is important, the preferred approach is to concatenate the files into a single file where each part is in the correct order. That single file can then be downloaded to retrieve all of the code at once (since this is happening asynchronously, there s no penalty for having a larger file). Dynamic script loading is the most frequently used pattern for nonblocking JavaScript downloads due to its cross-browser compatibility and ease of use. XMLHttpRequest Script Injection Another approach to nonblocking scripts is to retrieve the JavaScript code using an XMLHttpRequest (XHR) object and then inject the script into the page. This technique Nonblocking Scripts 9
17 involves creating an XHR object, downloading the JavaScript file, then injecting the JavaScript code into the page using a dynamic <script> element. Here s a simple example: var xhr = new XMLHttpRequest(); xhr.open("get", "file1.js", true); xhr.onreadystatechange = function(){ if (xhr.readystate == 4){ if (xhr.status >= 200 && xhr.status < 300 xhr.status == 304){ var script = document.createelement("script"); script.type = "text/javascript"; script.text = xhr.responsetext; document.body.appendchild(script); } } }; xhr.send(null); This code sends a GET request for the file file1.js. The onreadystatechange event handler checks for a readystate of 4 and then verifies that the HTTP status code is valid (anything in the 200 range means a valid response, and 304 means a cached response). If a valid response has been received, then a new <script> element is created and its text property is assigned to the responsetext received from the server. Doing so essentially creates a <script> element with inline code. Once the new <script> element is added to the document, the code is executed and is ready to use. The primary advantage of this approach is that you can download the JavaScript code without executing it immediately. Since the code is being returned outside of a <script> tag, it won t automatically be executed upon download, allowing you to defer its execution until you re ready. Another advantage is that the same code works in all modern browsers without exception cases. The primary limitation of this approach is that the JavaScript file must be located on the same domain as the page requesting it, which makes downloading from CDNs impossible. For this reason, XHR script injection typically isn t used on large-scale web applications. Recommended Nonblocking Pattern The recommend approach to loading a significant amount of JavaScript onto a page is a two-step process: first, include the code necessary to dynamically load JavaScript, and then load the rest of the JavaScript code needed for page initialization. Since the first part of the code is as small as possible, potentially containing just the load Script() function, it downloads and executes quickly, and so shouldn t cause much interference with the page. Once the initial code is in place, use it to load the remaining JavaScript. For example: 10 Chapter 1: Loading and Execution
18 <script type="text/javascript" src="loader.js"></script> <script type="text/javascript"> loadscript("the-rest.js", function(){ Application.init(); </script> Place this loading code just before the closing </body> tag. Doing so has several benefits. First, as discussed earlier, this ensures that JavaScript execution won t prevent the rest of the page from being displayed. Second, when the second JavaScript file has finished downloading, all of the DOM necessary for the application has been created and is ready to be interacted with, avoiding the need to check for another event (such as window.onload) to know when the page is ready for initialization. Another option is to embed the loadscript() function directly into the page, thus avoiding another HTTP request. For example: <script type="text/javascript"> function loadscript(url, callback){ var script = document.createelement("script") script.type = "text/javascript"; if (script.readystate){ //IE script.onreadystatechange = function(){ if (script.readystate == "loaded" script.readystate == "complete"){ script.onreadystatechange = null; callback(); } }; } else { //Others script.onload = function(){ callback(); }; } } script.src = url; document.getelementsbytagname("head")[0].appendchild(script); loadscript("the-rest.js", function(){ Application.init(); </script> If you decide to take the latter approach, it s recommended to minify the initial script using a tool such as YUI Compressor (see Chapter 9) for the smallest byte-size impact on your page. Once the code for page initialization has been completely downloaded, you are free to continue using loadscript() to load additional functionality onto the page as needed. Nonblocking Scripts 11
19 The YUI 3 approach The concept of a small initial amount of code on the page followed by downloading additional functionality is at the core of the YUI 3 design. To use YUI 3 on your page, begin by including the YUI seed file: <script type="text/javascript" src=" The seed file is around 10 KB (6 KB gzipped) and includes enough functionality to download any other YUI components from the Yahoo! CDN. For example, if you d like to use the DOM utility, you specify its name ("dom") with the YUI use() method and then provide a callback that will be executed when the code is ready: YUI().use("dom", function(y){ Y.DOM.addClass(docment.body, "loaded"); This example creates a new instance of the YUI object and then calls the use() method. The seed file has all of the information about filenames and dependencies, so specifying "dom" actually builds up a combo-handler URL with all of the correct dependency files and creates a dynamic script element to download and execute those files. When all of the code is available, the callback method is called and the YUI instance is passed in as the argument, allowing you to immediately start using the newly downloaded functionality. The LazyLoad library For a more general-purpose tool, Ryan Grove of Yahoo! Search created the LazyLoad library (available at LazyLoad is a more powerful version of the loadscript() function. When minified, the LazyLoad file is around 1.5 KB (minified, not gzipped). Example usage: <script type="text/javascript" src="lazyload-min.js"></script> <script type="text/javascript"> LazyLoad.js("the-rest.js", function(){ Application.init(); </script> LazyLoad is also capable of downloading multiple JavaScript files and ensuring that they are executed in the correct order in all browsers. To load multiple JavaScript files, just pass an array of URLs to the LazyLoad.js() method: <script type="text/javascript" src="lazyload-min.js"></script> <script type="text/javascript"> LazyLoad.js(["first-file.js", "the-rest.js"], function(){ Application.init(); </script> 12 Chapter 1: Loading and Execution
20 Even though the files are downloaded in a nonblocking fashion using dynamic script loading, it s recommended to have as few files as possible. Each download is still a separate HTTP request, and the callback function won t execute until all of the files have been downloaded and executed. LazyLoad is also capable of loading CSS files dynamically. This is typically less of an issue because CSS file downloads are always done in parallel and don t block other page activities. The LABjs library Another take on nonblocking JavaScript loading is LABjs ( an open source library written by Kyle Simpson with input from Steve Souders. This library provides more fine-grained control over the loading process and tries to download as much code in parallel as possible. LABjs is also quite small, 4.5 KB (minified, not gzipped), and so has a minimal page footprint. Example usage: <script type="text/javascript" src="lab.js"></script> <script type="text/javascript"> $LAB.script("the-rest.js").wait(function(){ Application.init(); </script> The $LAB.script() method is used to define a JavaScript file to download, whereas $LAB.wait() is used to indicate that execution should wait until the file is downloaded and executed before running the given function. LABjs encourages chaining, so every method returns a reference to the $LAB object. To download multiple JavaScript files, just chain another $LAB.script() call: <script type="text/javascript" src="lab.js"></script> <script type="text/javascript"> $LAB.script("first-file.js").script("the-rest.js").wait(function(){ Application.init(); </script> What sets LABjs apart is its ability to manage dependencies. Normal inclusion with <script> tags means that each file is downloaded (either sequentially or in parallel, as mentioned previously) and then executed sequentially. In some cases this is truly necessary, but in others it is not. LABjs allows you to specify which files should wait for others by using wait(). In the previous example, the code in first-file.js is not guaranteed to execute before the code in the-rest.js. To guarantee this, you must add a wait() call after the first script(): Nonblocking Scripts 13
21 <script type="text/javascript" src="lab.js"></script> <script type="text/javascript"> $LAB.script("first-file.js").wait().script("the-rest.js").wait(function(){ Application.init(); </script> Now the code in first-file.js is guaranteed to execute before the code in the-rest.js, although the contents of the files are downloaded in parallel. Summary Managing JavaScript in the browser is tricky because code execution blocks other browser processes such as UI painting. Every time a <script> tag is encountered, the page must stop and wait for the code to download (if external) and execute before continuing to process the rest of the page. There are, however, several ways to minimize the performance impact of JavaScript: Put all <script> tags at the bottom of the page, just inside of the closing </body> tag. This ensures that the page can be almost completely rendered before script execution begins. Group scripts together. The fewer <script> tags on the page, the faster the page can be loaded and become interactive. This holds true both for <script> tags loading external JavaScript files and those with inline code. There are several ways to download JavaScript in a nonblocking fashion: Use the defer attribute of the <script> tag (Internet Explorer and Firefox 3.5+ only) Dynamically create <script> elements to download and execute the code Download the JavaScript code using an XHR object, and then inject the code into the page By using these strategies, you can greatly improve the perceived performance of a web application that requires a large amount of JavaScript code. 14 Chapter 1: Loading and Execution
22 Want to read more? You can find this book at oreilly.com in print or ebook format. It s also available at your favorite book retailer, including itunes, the Android Market, Amazon, and Barnes & Noble. Spreading the knowledge of innovators oreilly.com
High Performance JavaScript. www.it-ebooks.info
High Performance JavaScript www.it-ebooks.info High Performance JavaScript Nicholas C. Zakas Beijing Cambridge Farnham Köln Sebastopol Taipei Tokyo High Performance JavaScript by Nicholas C. Zakas Copyright
Website Performance: Kyle Simpson
Website Performance: Kyle Simpson (Video: 0_Introduction.mp4): Introduction 00:00:0000:07:50: An introduction and a discussion about how developers need to change their mindset to think about web performance
Front-End Performance Testing and Optimization
Front-End Performance Testing and Optimization Abstract Today, web user turnaround starts from more than 3 seconds of response time. This demands performance optimization on all application levels. Client
O Reilly Ebooks Your bookshelf on your devices!
O Reilly Ebooks Your bookshelf on your devices! When you buy an ebook through oreilly.com, you get lifetime access to the book, and whenever possible we provide it to you in four, DRM-free file formats
Improving Magento Front-End Performance
Improving Magento Front-End Performance If your Magento website consistently loads in less than two seconds, congratulations! You already have a high-performing site. But if your site is like the vast
Web Performance. Lab. Bases de Dados e Aplicações Web MIEIC, FEUP 2014/15. Sérgio Nunes
Web Performance Lab. Bases de Dados e Aplicações Web MIEIC, FEUP 2014/15 Sérgio Nunes Web Performance Web optimization techniques are designed to improve the overall response time of a web application
Update logo and logo link on A Master. Update Date and Product on B Master
Cover Be sure to: Update META data Update logo and logo link on A Master Update Date and Product on B Master Web Performance Metrics 101 Contents Preface...3 Response Time...4 DNS Resolution Time... 4
JavaScript Patterns. Stoyan Stefanov. O'REILLY' Beijing Cambridge Farnham Koln Sebastopol Tokyo
JavaScript Patterns Stoyan Stefanov O'REILLY' Beijing Cambridge Farnham Koln Sebastopol Tokyo Table of Contents Preface xi 1. Introduction 1 Patterns 1 JavaScript: Concepts 3 Object-Oriented 3 No Classes
MASTERTAG DEVELOPER GUIDE
MASTERTAG DEVELOPER GUIDE TABLE OF CONTENTS 1 Introduction... 4 1.1 What is the zanox MasterTag?... 4 1.2 What is the zanox page type?... 4 2 Create a MasterTag application in the zanox Application Store...
AJAX and JSON Lessons Learned. Jim Riecken, Senior Software Engineer, Blackboard Inc.
AJAX and JSON Lessons Learned Jim Riecken, Senior Software Engineer, Blackboard Inc. About Me Jim Riecken Senior Software Engineer At Blackboard for 4 years. Work out of the Vancouver office. Working a
An introduction to creating Web 2.0 applications in Rational Application Developer Version 8.0
An introduction to creating Web 2.0 applications in Rational Application Developer Version 8.0 September 2010 Copyright IBM Corporation 2010. 1 Overview Rational Application Developer, Version 8.0, contains
Performance Report for: http://singaporestockstrading.com/ Report generated: Friday, April 24, 2015, 7:29 AM -0700 (via API)
The web should be fast. Executive Summary Performance Report for: http://singaporestockstrading.com/ Report generated: Friday, April, 5, : AM - (via API) Test Region: Vancouver, Canada Using: Firefox (Desktop)
WompMobile Technical FAQ
WompMobile Technical FAQ What are the technical benefits of WompMobile? The mobile site has the same exact URL as the desktop website. The mobile site automatically and instantly syncs with the desktop
HP LoadRunner. Software Version: 11.00. Ajax TruClient Tips & Tricks
HP LoadRunner Software Version: 11.00 Ajax TruClient Tips & Tricks Document Release Date: October 2010 Software Release Date: October 2010 Legal Notices Warranty The only warranties for HP products and
Mobile Application Performance Report
Mobile Application Performance Report Optimization Recommendations and Performance Analysis Report Prepared for - http://www.google.com VS http://www.yahoo.com Emulated Device Type: ipad OVERALL PERFORMANCE
Website Optimization Tips for Speed
Website Optimization Tips for Speed Sothern California WordPress Meetup Microsoft HQ, Los Angeles - 3/20/2012 Belsien Thomas [email protected] S Overview Of Website Optimization Content Optimizations
FIVE WAYS TO OPTIMIZE MOBILE WEBSITE PERFORMANCE WITH PAGE SPEED
WHITE PAPER: MOBILE WEBSITE PERFORMANCE FIVE WAYS TO OPTIMIZE MOBILE WEBSITE PERFORMANCE WITH PAGE SPEED SNOOZE, YOU LOSE. TODAY S MOBILE USERS EXPECT PERFORMANCE DELIVERED FAST. For those of us who depend
Apple Applications > Safari 2008-10-15
Safari User Guide for Web Developers Apple Applications > Safari 2008-10-15 Apple Inc. 2008 Apple Inc. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system,
1. Minimize HTTP Requests. 2. Put Stylesheets at the Top
This document provides a set of recommendations that can help to increase the loading speed of your website as well as potentially decrease your bandwidth usage. Not all of the recommendations may be applicable
Web Performance. Sergey Chernyshev. March '09 New York Web Standards Meetup. New York, NY. March 19 th, 2009
Web Performance Sergey Chernyshev March '09 New York Web Standards Meetup New York, NY March 19 th, 2009 About presenter Doing web stuff since 1995 Director, Web Systems and Applications at trutv Personal
Browser Performance Tests We put the latest web browsers head-to-head to try to find out which one is best!
Browser Performance Tests We put the latest web browsers head-to-head to try to find out which one is best! Browsers Tested Google Chrome 23 Mozilla Firefox 16 Internet Explorer 10 Internet Explorer 9
Browser Performance Tests We put the latest web browsers head-to-head to try to find out which one is best!
Browser Performance Tests We put the latest web browsers head-to-head to try to find out which one is best! Browsers Tested Google Chrome 31 Mozilla Firefox 25 Internet Explorer 11 Opera 17 Apple Safari
Performance Testing Web 2.0
Performance Testing Web 2.0 David Chadwick Rational Testing Evangelist [email protected] Dawn Peters Systems Engineer, IBM Rational [email protected] 2009 IBM Corporation WEB 2.0 What is it? 2 Web
Performance Testing for Ajax Applications
Radview Software How to Performance Testing for Ajax Applications Rich internet applications are growing rapidly and AJAX technologies serve as the building blocks for such applications. These new technologies
Team Members: Christopher Copper Philip Eittreim Jeremiah Jekich Andrew Reisdorph. Client: Brian Krzys
Team Members: Christopher Copper Philip Eittreim Jeremiah Jekich Andrew Reisdorph Client: Brian Krzys June 17, 2014 Introduction Newmont Mining is a resource extraction company with a research and development
White Paper. How To Deliver Fast, Engaging Responsive Web Design Sites
White Paper How To Deliver Fast, Engaging Responsive Web Design Sites Table of Contents MOBILE IMPACTS THE BOTTOM LINE...1 RESPONSIVE WEB DESIGN ADOPTION GROWING FAST...2 FAST, QUALITY WEB EXPERIENCES
Core Ideas CHAPTER 1 PART. CHAPTER 2 Pre-Ajax JavaScript Communications Techniques CHAPTER 3 XMLHttpRequest Object CHAPTER 4 Data Formats
Core Ideas CHAPTER 1 Introduction to Ajax I PART CHAPTER 2 Pre-Ajax JavaScript Communications Techniques CHAPTER 3 XMLHttpRequest Object CHAPTER 4 Data Formats ch01.indd 1 12/5/07 4:59:45 PM blind folio
Ajax Performance Tuning and Best Practice
Ajax Performance Tuning and Best Practice Greg Murray Doris Chen Ph.D. Netflix Sun Microsystems, lnc. Senior UI Engineer Staff Engineer Agenda > Optimization Strategies and Process > General Coding Best
Web Development Recipes
Extracted from: Web Development Recipes This PDF file contains pages extracted from Web Development Recipes, published by the Pragmatic Bookshelf. For more information or to purchase a paperback or PDF
Client-side Development using HTML, Javascript and CSS
Lab 1 Client-side Development using HTML, Javascript and CSS Authors: Sahand Sdjadee Alexander Kazen Gustav Bylund Per Jonsson Tobias Jansson Spring 2015 TDDD97 Web Programming http://www.ida.liu.se/~tddd97/
Addressing Mobile Load Testing Challenges. A Neotys White Paper
Addressing Mobile Load Testing Challenges A Neotys White Paper Contents Introduction... 3 Mobile load testing basics... 3 Recording mobile load testing scenarios... 4 Recording tests for native apps...
making drupal run fast
making drupal run fast 2 Objectives Improve drupal performance Provide Simple tips on Increasing Drupal performance We have some data from load testing a site in these different configs: ++ plain drupal
Mobile Performance Management Tools Prasanna Gawade, Infosys April 2014
Mobile Performance Management Tools Prasanna Gawade, Infosys April 2014 Computer Measurement Group, India 1 Contents Introduction Mobile Performance Optimization Developer Tools Purpose and Overview Mobile
Introducing Apache Pivot. Greg Brown, Todd Volkert 6/10/2010
Introducing Apache Pivot Greg Brown, Todd Volkert 6/10/2010 Speaker Bios Greg Brown Senior Software Architect 15 years experience developing client and server applications in both services and R&D Apache
Ajax Development with ASP.NET 2.0
Ajax Development with ASP.NET 2.0 Course No. ISI-1071 3 Days Instructor-led, Hands-on Introduction This three-day intensive course introduces a fast-track path to understanding the ASP.NET implementation
Google Maps Hacks by Rich Gibson and Schuyler Erle
Google Maps Hacks by Rich Gibson and Schuyler Erle Copyright 2006 O Reilly Media, Inc. All rights reserved. Printed in the United States of America. Published by O Reilly Media, Inc., 1005 Gravenstein
Magento Performance Optimization Whitepaper
Websites Decay Fast Even one year is a long time on the web, as Magento platform is changing, evolving as it takes on new e-commerce challenges one at a time in steady, ongoing iteration. When you created
Adding Panoramas to Google Maps Using Ajax
Adding Panoramas to Google Maps Using Ajax Derek Bradley Department of Computer Science University of British Columbia Abstract This project is an implementation of an Ajax web application. AJAX is a new
Term Paper. P r o f. D r. E d u a r d H e i n d l. H o c h s c h u l e F u r t w a n g e n U n i v e r s i t y. P r e s e n t e d T o :
Version: 0.1 Date: 20.07.2009 Author(s): Doddy Satyasree AJAX Person responsable: Doddy Satyasree Language: English Term Paper History Version Status Date 0.1 Draft Version created 20.07.2009 0.2 Final
Web application Architecture
2014 Cesare Pautasso 1 / 29 Very Thin Client 6 / 29 AJAX Input/ Output Prof. Cesare Pautasso http://www.pautasso.info [email protected] Client/Server 7 / 29 @pautasso 5 / 29 Web application Architecture
SizmekFeatures. HTML5JSSyncFeature
Features HTML5JSSyncFeature Table of Contents Overview... 2 Supported Platforms... 2 Demos/Downloads... 3 Note... 3 For Tags Served in iframes... 3 Features... 3 Use Case... 3 Included Files... 4 Implementing
Debugging JavaScript and CSS Using Firebug. Harman Goei CSCI 571 1/27/13
Debugging JavaScript and CSS Using Firebug Harman Goei CSCI 571 1/27/13 Notice for Copying JavaScript Code from these Slides When copying any JavaScript code from these slides, the console might return
A BASELINE FOR WEB PERFORMANCE WITH PHANTOMJS
2 WebSocket 3 Polling A BASELINE FOR WEB PERFORMANCE WITH PHANTOMJS @WESLEYHALES DO YOU AUTOMATE BROWSER PERF? You might occasionally test your sites using Firebug, Chrome DevTools, PageSpeed, YSlow, etc..
DOSarrest External MULTI-SENSOR ARRAY FOR ANALYSIS OF YOUR CDN'S PERFORMANCE IMMEDIATE DETECTION AND REPORTING OF OUTAGES AND / OR ISSUES
.com DOSarrest External Monitoring S ystem (DEMS) User s Guide REAL BROWSER MONITORING OF YOUR WEBSITE MULTI-SENSOR ARRAY FOR ANALYSIS OF YOUR CDN'S PERFORMANCE IMMEDIATE DETECTION AND REPORTING OF OUTAGES
Some Issues on Ajax Invocation
Some Issues on Ajax Invocation I. Introduction AJAX is a set of technologies that together a website to be -or appear to be- highly responsive. This is achievable due to the following natures of AJAX[1]:
Operational Decision Manager Worklight Integration
Copyright IBM Corporation 2013 All rights reserved IBM Operational Decision Manager V8.5 Lab exercise Operational Decision Manager Worklight Integration Integrate dynamic business rules into a Worklight
Speed up your web site. Alan Seiden Consulting alanseiden.com
alanseiden.com Alan s PHP on IBM i focus Consultant to innovative IBM i and PHP users PHP project leader, Zend/IBM Toolkit Contributor, Zend Framework DB2 enhancements Award-winning developer Authority,
Meeting the challenges of modern website performance Developments in monitoring strategies
Meeting the challenges of modern website performance Developments in monitoring strategies Is your website monitoring realistic enough to meet today s challenges? Is your web testing strategy holistic
Using Steelhead Appliances and Stingray Aptimizer to Accelerate Microsoft SharePoint WHITE PAPER
Using Steelhead Appliances and Stingray Aptimizer to Accelerate Microsoft SharePoint WHITE PAPER Introduction to Faster Loading Web Sites A faster loading web site or intranet provides users with a more
Portals and Hosted Files
12 Portals and Hosted Files This chapter introduces Progress Rollbase Portals, portal pages, portal visitors setup and management, portal access control and login/authentication and recommended guidelines
Performance testing Web 2.0
Performance testing Web 2.0 Stuart Moncrieff, Performance Test Consultant JDS 2009 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice What is
Introduction to web development and JavaScript
Objectives Chapter 1 Introduction to web development and JavaScript Applied Load a web page from the Internet or an intranet into a web browser. View the source code for a web page in a web browser. Knowledge
English. Asema.com Portlets Programmers' Manual
English Asema.com Portlets Programmers' Manual Asema.com Portlets : Programmers' Manual Asema Electronics Ltd Copyright 2011-2013 No part of this publication may be reproduced, published, stored in an
Efficient database auditing
Topicus Fincare Efficient database auditing And entity reversion Dennis Windhouwer Supervised by: Pim van den Broek, Jasper Laagland and Johan te Winkel 9 April 2014 SUMMARY Topicus wants their current
Simple Tips to Improve Drupal Performance: No Coding Required. By Erik Webb, Senior Technical Consultant, Acquia
Simple Tips to Improve Drupal Performance: No Coding Required By Erik Webb, Senior Technical Consultant, Acquia Table of Contents Introduction................................................ 3 Types of
Ready, Set, Go Getting started with Tuscany
Ready, Set, Go Getting started with Tuscany Install the Tuscany Distribution The first thing you do is to create a folder on you disk into which you will download the TUSCANY distribution. Next you download
Drupal Performance Tuning
Drupal Performance Tuning By Jeremy Zerr Website: http://www.jeremyzerr.com @jrzerr http://www.linkedin.com/in/jrzerr Overview Basics of Web App Systems Architecture General Web
AJAX. Gregorio López López [email protected] Juan Francisco López Panea [email protected]
AJAX Gregorio López López [email protected] Juan Francisco López Panea [email protected] Departamento de Ingeniería Telemática Universidad Carlos III de Madrid Contents 1. Introduction 2. Overview
Protecting Data with a Unified Platform
Protecting Data with a Unified Platform The Essentials Series sponsored by Introduction to Realtime Publishers by Don Jones, Series Editor For several years now, Realtime has produced dozens and dozens
Enterprise Mobile Web Development. Robert Altland Principal Consultant, Mobility Neudesic, LLC [email protected]
Enterprise Mobile Web Development Robert Altland Principal Consultant, Mobility Neudesic, LLC [email protected] Setting the Stage Making the right technology choice for your mobile presence What
Example. Represent this as XML
Example INF 221 program class INF 133 quiz Assignment Represent this as XML JSON There is not an absolutely correct answer to how to interpret this tree in the respective languages. There are multiple
Tutorial: Building a Dojo Application using IBM Rational Application Developer Loan Payment Calculator
Tutorial: Building a Dojo Application using IBM Rational Application Developer Loan Payment Calculator Written by: Chris Jaun ([email protected]) Sudha Piddaparti ([email protected]) Objective In this
Advantage of Jquery: T his file is downloaded from
What is JQuery JQuery is lightweight, client side JavaScript library file that supports all browsers. JQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling,
Art of Code Front-end Web Development Training Program
Art of Code Front-end Web Development Training Program Pre-work (5 weeks) Codecademy HTML5/CSS3 and JavaScript tracks HTML/CSS (7 hours): http://www.codecademy.com/en/tracks/web JavaScript (10 hours):
Datasheet - Sitekit CMS Performance Tips
Datasheet - Sitekit CMS Performance Tips Document Control Address Document Title Version Number 3.1 Document Status Approved Version 3.0 Approved By Author Sitekit Team Operations Centre Bloxham Mill Barford
Pay with Amazon Integration Guide
2 2 Contents... 4 Introduction to Pay with Amazon... 5 Before you start - Important Information... 5 Important Advanced Payment APIs prerequisites... 5 How does Pay with Amazon work?...6 Key concepts in
Data Visualization in Ext Js 3.4
White Paper Data Visualization in Ext Js 3.4 Ext JS is a client-side javascript framework for rapid development of cross-browser interactive Web applications using techniques such as Ajax, DHTML and DOM
OPENTABLE GROUP SEARCH MODULE GETTING STARTED ADD RESERVATIONS TO YOUR WEBSITE
ADD RESERVATIONS TO YOUR WEBSITE OPENTABLE GROUP SEARCH MODULE The group search module allows users to select a specific restaurant location from a list and search tables at that location. The code below
Mobile Web Design with HTML5, CSS3, JavaScript and JQuery Mobile Training BSP-2256 Length: 5 days Price: $ 2,895.00
Course Page - Page 1 of 12 Mobile Web Design with HTML5, CSS3, JavaScript and JQuery Mobile Training BSP-2256 Length: 5 days Price: $ 2,895.00 Course Description Responsive Mobile Web Development is more
Smartphone Enterprise Application Integration
WHITE PAPER MARCH 2011 Smartphone Enterprise Application Integration Rhomobile - Mobilize Your Enterprise Overview For more information on optimal smartphone development please see the Rhomobile White
Beginning Smartphone Web Development
Beginning Smartphone Web Development I3. jl!c;llirici JavaScript C;SS, f HTML and A-, p p I i с at i о n s f о r«p ri о n e,, А л ei ro i ci, P a! ei P re, Eli ас к I Windows Мкаане, and inotaa S60 Gail
GUI and Web Programming
GUI and Web Programming CSE 403 (based on a lecture by James Fogarty) Event-based programming Sequential Programs Interacting with the user 1. Program takes control 2. Program does something 3. Program
JavaScript Testing. Beginner's Guide. Liang Yuxian Eugene. Test and debug JavaScript the easy way PUBLISHING MUMBAI BIRMINGHAM. k I I.
JavaScript Testing Beginner's Guide Test and debug JavaScript the easy way Liang Yuxian Eugene [ rwtmm k I I PUBLISHING I BIRMINGHAM MUMBAI loading loading runtime Preface 1 Chapter 1: What is JavaScript
Using the Online ebooks Library. Moray Council Libraries & Information Services. For more information log on to http://moray.libraryebooks.co.
Using the Online ebooks Library Moray Council Libraries & Information Services For more information log on to http://moray.libraryebooks.co.uk How does the ebooks Service work? Log in to ebooks website
Responsive Web Design Creative License
Responsive Web Design Creative License Level: Introduction - Advanced Duration: 16 Days Time: 9:30 AM - 4:30 PM Cost: 2197 Overview Web design today is no longer just about cross-browser compatibility.
Drupal CMS for marketing sites
Drupal CMS for marketing sites Intro Sample sites: End to End flow Folder Structure Project setup Content Folder Data Store (Drupal CMS) Importing/Exporting Content Database Migrations Backend Config Unit
Developer Tutorial Version 1. 0 February 2015
Developer Tutorial Version 1. 0 Contents Introduction... 3 What is the Mapzania SDK?... 3 Features of Mapzania SDK... 4 Mapzania Applications... 5 Architecture... 6 Front-end application components...
Developing a Web Server Platform with SAPI Support for AJAX RPC using JSON
Revista Informatica Economică, nr. 4 (44)/2007 45 Developing a Web Server Platform with SAPI Support for AJAX RPC using JSON Iulian ILIE-NEMEDI, Bucharest, Romania, [email protected] Writing a custom web
Config Guide. Gimmal Smart Tiles (SharePoint-Hosted) Software Release 4.4.0
Config Guide Gimmal Smart Tiles (SharePoint-Hosted) Software Release 4.4.0 November 2014 Title: Gimmal Smart Tiles (SharePoint-Hosted) Configuration Guide Copyright 2014 Gimmal, All Rights Reserved. Gimmal
Custom Javascript In Planning
A Hyperion White Paper Custom Javascript In Planning Creative ways to provide custom Web forms This paper describes several of the methods that can be used to tailor Hyperion Planning Web forms. Hyperion
White Paper. Java versus Ruby Frameworks in Practice STATE OF THE ART SOFTWARE DEVELOPMENT 1
White Paper Java versus Ruby Frameworks in Practice STATE OF THE ART SOFTWARE DEVELOPMENT 1 INTRODUCTION...3 FRAMEWORKS AND LANGUAGES...3 SECURITY AND UPGRADES...4 Major Upgrades...4 Minor Upgrades...5
Distance Examination using Ajax to Reduce Web Server Load and Student s Data Transfer
Distance Examination using Ajax to Reduce Web Server Load and Student s Data Transfer Distance Examination using Ajax to Reduce Web Server Load and Student s Data Transfer Ridwan Sanjaya Soegijapranata
Learning Web App Development
Learning Web App Development Semmy Purewal Beijing Cambridge Farnham Kbln Sebastopol Tokyo O'REILLY Table of Contents Preface xi 1. The Workflow 1 Text Editors 1 Installing Sublime Text 2 Sublime Text
Ajax Design and Usability
Ajax Design and Usability William Hudson [email protected] www.syntagm.co.uk/design Ajax Design and Usability About Ajax Ajax in context How Ajax works How Ajax is different How Ajax is similar
JAVA. EXAMPLES IN A NUTSHELL. O'REILLY 4 Beijing Cambridge Farnham Koln Paris Sebastopol Taipei Tokyo. Third Edition.
"( JAVA. EXAMPLES IN A NUTSHELL Third Edition David Flanagan O'REILLY 4 Beijing Cambridge Farnham Koln Paris Sebastopol Taipei Tokyo Table of Contents Preface xi Parti. Learning Java 1. Java Basics 3 Hello
Client-side Web Engineering From HTML to AJAX
Client-side Web Engineering From HTML to AJAX SWE 642, Spring 2008 Nick Duan 1 What is Client-side Engineering? The concepts, tools and techniques for creating standard web browser and browser extensions
Introducing DocumentDB
David Chappell Introducing DocumentDB A NoSQL Database for Microsoft Azure Sponsored by Microsoft Corporation Copyright 2014 Chappell & Associates Contents Why DocumentDB?... 3 The DocumentDB Data Model...
Improved Speed on Intelligent Web Sites
Improved Speed on Intelligent Web Sites ZSOLT NAGY Institute of Mathematics and Computer Science College of Nyiregyhaza Nyiregyhaza, Sostoi u. 31/B HUNGARY [email protected] Abstract: - Intelligent web
The Essential Guide to HTML Email Design
The Essential Guide to HTML Email Design Emailmovers Limited, Pindar House, Thornburgh Road Scarborough, North Yorkshire, YO11 3UY Tel: 0845 226 7181 Fax: 0845 226 7183 Email: [email protected]
