High-Performance JavaScript: Why Everything Youve Been Taught is Wrong Joseph Smarr Plaxo, Inc.

Slides:



Advertisements
Similar presentations
Easy Wi-Fi for the iPhone Created by Devicescape Presentation by Dylan Harris.
Advertisements

CS193H: High Performance Web Sites Lecture 4: Class Projects Steve Souders Google
Performance Challenges for the Open Web Stanford CS193H 29 September 2008.
CS193H: High Performance Web Sites Lecture 17: Rule 14 – Make Ajax Cacheable Steve Souders Google
Widget Summit: Advanced JavaScript Joseph Smarr Plaxo, Inc. October 16, 2007.
GT Release Manuals Cristina Williams, ISI/USC plus all GT committers
1 C. Kumar May 2010 Web for Everyone Data enabling Mass Market Phones.
1 ©Compendium Developments 2005 “It Depends...” Context Driven Testing - What does it mean to have no “best practices”? Alan Richardson.
National Alliance for Medical Image Computing Testing with CTest and CDash Julien Jomier Kitware Inc.
ECEU300 Ethics in the Workplace Why talk about Ethics? Everyone is ethical, everyone knows how to behave at work. Everyone gets it about not stealing stuff.
HiveMind Distributed File Storage Using JavaScript Botnets Copyright 2013 Sean T. Malone.
Beyond apps Stephen Pinches Group Product Manager – Emerging Platforms.
HTML5 That’s What You Need to Know Today Ingo Rammer | thinktecture |
Chief Technology Officer (CTO) Council
1 Introduction to Silverlight 1.1 Mark Smith
HTML5 That’s what you need to know today Ingo Rammer, thinktecture
1 Cleaning up the Internet Using AJAX, SOAP and Comet CS526 Mike Gerschefske Justin Gray James Yoo 02 May 2006.
5/3/2006 Mike/Justin/JYoo AJAX/SOAP/Comet 1 Cleaning up the Internet Using AJAX, SOAP and Comet CS526 Mike Gerschefske Justin Gray James Yoo 02 May 2006.
U-Mail System Design Specification Joseph Woo, Chris Hacking, Alex Benson, Elliott Conant, Alex Meng, Michael Ratanapintha April 28,
JavaScript & Metaperformance Douglas Crockford Yahoo! Inc.
Estimation Wrap-up CSE 403, Spring 2008, Alverson Spolsky.
Sparky + The Next Generation College Mobile Solution Ruoyang Zhang ENG 302 Class Project All rights reserved 08/06/2014.
For more notes and topics visit:
What a Student with Learning Difficulties Might Say Things to look for in your conversations with students. You can learn a lot about a student from the.
Questions in your Head - Who am I? - What’s Gerger anyway? - Who is this for? - What is the solution? - What are the benefits? - What is.
Copyright © Meebo, Inc. All rights reserved presents... Scaling Synchronous Web Apps Web 2.0 Expo, New York 9/18/2008.
JavaScript & jQuery the missing manual Chapter 11
Lecture 18 Page 1 CS 111 Online Design Principles for Secure Systems Economy Complete mediation Open design Separation of privileges Least privilege Least.
Microsoft Windows Vista “Longhorn” Client Operating System
Smarten Up Your Address Book with a Plaxo Mashup Presentation to Mashup University Joseph Smarr Plaxo, Inc. July 11, 2006.
Project “Astoria” first announced in Mix 2007 Shared early prototypes, got tons of feedback Now we’re talking about the real deal Production quality bits,
IT253: Computer Organization
FIXEDGROWTH Avoid or fear challenges Give up when things are tough Make excuses Don’t try so you won’t fail Refuse to learn from mistakes Judge your.
Page Speed Bryan McQuade Richard Rabbat. Outline  What is Page Speed?  Inception of Page Speed  Cool features  Identify unused JavaScript and CSS.
OCR GCSE Computing © Hodder Education 2013 Slide 1 OCR GCSE Computing Chapter 2: Memory.
What’s New from Macromedia Simon Horwith CTO Etrilogy, Ltd.
Science Andrea’s Student Led Conference. Cover Letter This year in science I have learned about many things. We learned a ton of important information.
Model View Controller A Pattern that Many People Think They Understand, But Has A Couple Meanings.
1 Google Case Monday 12 th April 2010 Stephen Spring
Putting Performance Best Practices Together to Create the Perfect SPA Chris Love2Dev.com.
DO NOW (while you're waiting!) ‏ If you don't have a QR code reader on your phone, go to your apps store and search for a free one (try just “qr”). Download.
An answer to your common XACML dilemmas Asela Pathberiya Senior Software Engineer.
Joseph Smarr A Practical Vision for Friends-List Portability Joseph Smarr IIW 2007b, 12/5/2007.
Mobile: Today and Beyond Stuart Parmenter, Director of Mobile
Lecture 4 Page 1 CS 111 Online Modularity and Virtualization CS 111 On-Line MS Program Operating Systems Peter Reiher.
Rich Internet Applications: Better Practices for Financial Services Stephen Turbek, Avenue A | Razorfish.
Continuous improvement.
Web Technology (NCS-504) Prepared By Mr. Abhishek Kesharwani Assistant Professor,UCER Naini,Allahabad.
WebScan: Implementing QueryServer 2.0 Karl Geiger, Amgen Inc. BRS NA UG August 1999.
WHAT'S THE DIFFERENCE BETWEEN A WEB APPLICATION STREAMING NETWORK AND A CDN? INSTART LOGIC.
MICROSOFT AJAX CDN (CONTENT DELIVERY NETWORK) Make Your ASP.NET site faster to retrieve.
SuccessFactors - Frequently Asked Questions FAQs Question: I don't have easy access to a computer at work. What other options do I have? Answer: SuccessFactors.
Stable and reliable Web Automation
Yii Framework – The Major Pros and Cons
Mobile Application Test Case Automation
FYE 1101 Freshmen Success Strategies
Chapter: 2 Diving into Mobile: App or Website?
Top 5 Javascript Frameworks
Myth Busting: Hosted Web Apps
Order Management For Shippers.
X in [Integration, Delivery, Deployment]
Get Your Sage ACT! Contacts & Calendar in the Cloud
Geo 318 – Introduction to GIS Programming
Next-Gen GUI for Web Services John D
What’s Coming for EMS Campus
How AngularJS Development Services different from other Framework - Kunsh Technologies.
OSU Professional Development
Bootstrap Direct quote from source: bootstrap/
Elizabeth Liner Lab of Things.
Presentation transcript:

High-Performance JavaScript: Why Everything Youve Been Taught is Wrong Joseph Smarr Plaxo, Inc.

Joseph Smarr, Plaxo, Inc. About me Chief Platform Architect at Plaxo First employee (March 2002) Architect and lead developer for Plaxo Online Abusing web browsers since 1993 (Mosaic) Plaxo Online 2.0 (AJAX via iframes in 2004) JavaScript Wormhole (OSCON 06)

Joseph Smarr, Plaxo, Inc. About Plaxo Smart Address Book Syncs address book and calendar with lots of places User updates their contact info you get it automatically Founded in 2002, ~50 employees, 15M+ users Backed by Sequoia, Ram Shriram, Tim Koogle, et al

Joseph Smarr, Plaxo, Inc. Plaxo Online AJAX Desktop beta.plaxo.com Flexible desktop Contacts Calendar Tasks Notes Sync dashboard Pulse Profile / settings

Joseph Smarr, Plaxo, Inc. Plaxo Online AJAX Desktop beta.plaxo.com Flexible desktop Contacts Calendar Tasks Notes Sync dashboard Pulse Profile / settings

Joseph Smarr, Plaxo, Inc. Plaxo Online AJAX Desktop beta.plaxo.com Flexible desktop Contacts Calendar Tasks Notes Sync dashboard Pulse Profile / settings

Joseph Smarr, Plaxo, Inc. Looks great…but it almost didnt ship! Spring 06: Lets really push the envelope for Plaxo 3.0 Summer 06: Wow, these are great UI ideas, keep em coming Fall 06: Lets put 7 great web devs full time on this Winter 06: Ok, we built a ton…now lets optimize it, no problem March 07: Uh oh, making it fast is way harder than we thought April 07: We cant ship this as isdo we need to start over?!? June 07: After a heroic effort, its just barely fast enough (phew!)

Joseph Smarr, Plaxo, Inc. Where did we go wrong?? Didnt take performance seriously from day one Didnt think the browsers limitations were significant Didnt use the app daily as we were developing it Didnt push back on feature requests for performance Didnt value perceived performance / responsiveness …overcoming these challenges required unlearning a lot of standard assumptions about building software…

Joseph Smarr, Plaxo, Inc. Why Everything Youve Been Taught is Wrong AJAX euphoria Web browsers can be made to do anything now! Use desktop / OOP programming style Why its wrong Browsers are being pushed beyond their comfort zone JavaScript code is parsed & interpreted every time cost per line of source code

Joseph Smarr, Plaxo, Inc. Why High-Performance JavaScript Matters Everyone is amazed by fast apps It hardly matters what else they do! Everyone hates slow apps It hardly matters what else they do… AJAX was supposed to be all about responsiveness!! Having tried and almost failed, we now have a mantra:

Joseph Smarr, Plaxo, Inc. The High-Performance JS Mantra Be Lazy Be Responsive Be Pragmatic Be Vigilant

Joseph Smarr, Plaxo, Inc. The High-Performance JS Mantra Be Lazy: Nothing is faster than doing nothing Be Responsive Be Pragmatic Be Vigilant

Joseph Smarr, Plaxo, Inc. Write less code Initial parsing of JavaScript is often a major bottleneck No JIT, no cached object code, interpreted every time Parse time is non-linear in the size of total JavaScript? Cant rely on browser caching to excuse large code size Yahoo study: surprising number of hits with empty cache Frequent code releases frequently need to re-download More code = more to download, execute, maintain, etc. Ideal for large AJAX apps is <500K JS uncompressed Be Lazy: Nothing is faster than doing nothing

Joseph Smarr, Plaxo, Inc. Total code size of some AJAX apps

Joseph Smarr, Plaxo, Inc. Write less code Minimize the JavaScript code you send down Minify = good, obfuscate = not much better Strip debug / logging lines (dont just set log-level = 0) Remove unnecessary OOP boilerplate Get/Set functions dont actually protect member vars! etc. Minimize dependency on third-party library code Lots of extra code comes along that you dont need Libraries solve more general problems use like scaffolding Be Lazy: Nothing is faster than doing nothing

Joseph Smarr, Plaxo, Inc. Load JavaScript on-demand Once youve written less code, load it only as-needed Break into classes / modules; use require / provide (ala dojo) Bundle classes into packages to minimize server round-trips Packages should ignore pre-loaded dependencies Tradeoff of downloading shared code twice vs. multiple round trips (e.g. for common widgets) Build packages with error-handler hook for development Will re-build from source every time if you dont write Be Lazy: Nothing is faster than doing nothing I work hard at being lazy Ryan Roger Moore

Joseph Smarr, Plaxo, Inc. Draw UI as late as possible Draw less DOM = faster to draw, browser less saturated Never pre-draw hidden UI if you can avoid it Cache previously drawn HTML when appropriate But have to know when to invalidate the cache Dont keep hidden UI up-to-date behind the scenes Just re-draw next time you show it (simpler, one-time cost) Consider re-drawing vs. partial dynamic UI updates Redraw is often faster / easier / less code Be Lazy: Nothing is faster than doing nothing

Joseph Smarr, Plaxo, Inc. Never pre-draw hidden UI

Joseph Smarr, Plaxo, Inc. Never pre-draw hidden UI

Joseph Smarr, Plaxo, Inc. Never pre-draw hidden UI

Joseph Smarr, Plaxo, Inc. Never pre-draw hidden UI

Joseph Smarr, Plaxo, Inc. Never pre-draw hidden UI

Joseph Smarr, Plaxo, Inc. How to Be Lazy Write less code! Load JS on-demand Draw UI as late as possible Be Lazy: Nothing is faster than doing nothing

Joseph Smarr, Plaxo, Inc. The High-Performance JS Mantra Be Lazy Be Responsive: Jump when the user says jump Be Pragmatic Be Vigilant

Joseph Smarr, Plaxo, Inc. Minimize initial perceived load time Put CSS at the top of your page and JS at the bottom Draw major placeholder UI with loading… first Load / draw your app in stages (lazy, on-demand) Be Responsive: Jump when the user says jump

Joseph Smarr, Plaxo, Inc. Load your app in stages

Joseph Smarr, Plaxo, Inc. Load your app in stages

Joseph Smarr, Plaxo, Inc. Load your app in stages

Joseph Smarr, Plaxo, Inc. Load your app in stages

Joseph Smarr, Plaxo, Inc. Load your app in stages

Joseph Smarr, Plaxo, Inc. Load your app in stages

Joseph Smarr, Plaxo, Inc. Load your app in stages

Joseph Smarr, Plaxo, Inc. Yield early and often Always want to show a quick response acknowledgement But browser often doesnt update UI until your code returns! Solution: do minimum work, use setTimeout(0) to yield Use closures to chain state together with periodic pauses Draw UI progressively, with loading messages as needed Use onmousedown instead of onclick (~100msec faster!) Demo: Be Responsive: Jump when the user says jump

Joseph Smarr, Plaxo, Inc. Cache backend responses All data requests should go through data-manager code Request as needed and cache results for subsequent asks Requesting code always assumes async response Use range caches only fill in missing pieces Ideal for partial views into long lists of data Balance local updates vs. re-fetching from APIs Do the easy cases, but beware of too much update code Worst case = trash cache and re-fetch = first-time case Be Responsive: Jump when the user says jump Data structures and AJAXtogether at last! Data structures and AJAXtogether at last! Glenn Fiddich Dixon

Joseph Smarr, Plaxo, Inc. How to Be Responsive Minimize initial perceived loading time Yield early and often for responsive UI Cache API responses with data-manager layer Be Responsive: Jump when the user says jump

Joseph Smarr, Plaxo, Inc. The High-Performance JS Mantra Be Lazy Be Responsive Be Pragmatic: Dont make things even harder Be Vigilant

Joseph Smarr, Plaxo, Inc. Play to the browsers strengths Avoid DOM manipulation; use innerHTML and array.join() Avoid dynamic CSS-class definitions & CSS math Avoid reflow when possible (esp. manually on browser resize) Avoid memory allocation (e.g. string-splitting) Do DOM manipulation off-DOM, then re-insert at the end Be Pragmatic: Dont make things even harder

Joseph Smarr, Plaxo, Inc. Cheat when you can / should Use global functions or IDs when reasonable Finding by class / attaching event handlers is slow Protect modularity only when needed (e.g. widgets) Directly attach onclick, etc. handlers instead of using event listeners where appropriate Use fastest find-elems available when you need to scan the DOM (dont rely on general-purpose code) Be Pragmatic: Dont make things even harder

Joseph Smarr, Plaxo, Inc. Inline initial API calls & HTML Tempting to load blank page and do everything in JavaScript Have to redraw UI dynamically; dont want two copies of UI code Problem: initial load is usually too slow Too many round-trips to the server; too long before initial UI shows up Solution: if you have to do it every time, do it statically Save out initial API responses in web page Use data-manager to hide pre-fetching (can change your mind later) Download initial HTML in web page Be Pragmatic: Dont make things even harder

Joseph Smarr, Plaxo, Inc. How to Be Pragmatic Play to the browsers strengths Cheat when you can / should Inline initial API calls / HTML for faster load time Be Pragmatic: Dont make things even harder

Joseph Smarr, Plaxo, Inc. The High-Performance JS Mantra Be Lazy Be Responsive Be Pragmatic Be Vigilant: Only you can prevent slow web apps

Joseph Smarr, Plaxo, Inc. Profile like crazy Bottlenecks abound and are usually not obvious Use firebugs profiler (Joe Hewitt, you rule! ) Use timestamp diffs and alerts Comment-out blocks of code Measure with a consistent environment Browsers bog down always restart first Try multiple runs and average (and dont forget the cache) Be Vigilant: Only you can prevent slow web apps

Joseph Smarr, Plaxo, Inc. Firebug is your friend

Joseph Smarr, Plaxo, Inc. Consider performance from day one Apps get slow when you make them do many / slow things! Consider how much code / work is needed for each feature Is it making the browser work against the grain? What else is suffering for this feature? Is it worth it? Make sure everyone remembers how important speed is Be Vigilant: Only you can prevent slow web apps

Joseph Smarr, Plaxo, Inc. Building high-performance apps requires the right attitude Must consider and prioritize speed in every decision Ask what features can I add within this size / speed? vs. how small / fast can I get this set of features? I had to learn this the hard way (Plaxo 3.0 almost didnt ship!) Get your priorities straight Be Vigilant: Only you can prevent slow web apps Performance first, features second! Todd & Cam

Joseph Smarr, Plaxo, Inc. How to Be Vigilant Profile like crazy Consider performance from day one Get your priorities straight Be Vigilant: Only you can prevent slow web apps

Joseph Smarr, Plaxo, Inc. Conclusion: Avoid making the same mistakes we did Make the browser happy … and it will make you happy Web browsers are more like mobile phones than desktops Limited, flimsy, temperamental platform being stretched beyond its initial design goals But everyones got one, so its still the best place to be Dont push the limits unless you have to Often, small quick-loading pages with AJAX interactions is best Sometimes you really do need rich, interactive controls

Joseph Smarr, Plaxo, Inc. Just Remember: Everything Youve Been Taught is Wrong Think about performance early and often Write as little code as you need each line has a cost Do what the browser wants (whenever possible) Remember the high-performance JavaScript mantra: Be lazy Be responsive Be pragmatic Be vigilant