High Performance Web Sites 14 rules for faster pages Steve Souders Tenni Theurer

Slides:



Advertisements
Similar presentations
High Performance Web Sites 14 rules for faster pages
Advertisements

Optimizing Websites with YSlow Tom Lianza Co-Founder Wishlisting.com Tom Lianza Co-Founder Wishlisting.com.
CS193H: High Performance Web Sites Lecture 9: Rule 5 – Put Stylesheets at the Top Steve Souders Google
1 Introduction to Web Application Implement JavaScript in HTML.
CS193H: High Performance Web Sites Lecture 7: Add an Expires Header Steve Souders Google
High Performance Web Sites best practices for faster pages Steve Souders
Steve Souders Even Faster Themes Disclaimer: This content does not necessarily reflect.
High Performance Web Sites Essential Knowledge for Frontend Engineers
Steve Souders Even Faster Web Sites best practices for faster pages Disclaimer: This.
Steve Souders Even Faster Web Sites (inside ma.tt) best practices for faster pages.
CS193H: High Performance Web Sites Lecture 16: Rule 13 – Configure ETags Steve Souders Google
CS193H: High Performance Web Sites Lecture 4: Class Projects Steve Souders Google
CS193H: High Performance Web Sites Lecture 13: Rule 10 – Minify JavaScript Steve Souders Google
CS193H: High Performance Web Sites Lecture 22: Vol 2 – Optimize Images, Use Iframes Sparingly, Flush the Document Early Steve Souders Google
Steve Souders Life's too short, write fast code part 1 Disclaimer: This content does.
Steve Souders Even Faster Web Sites best practices for faster pages Disclaimer:
CS193H: High Performance Web Sites Lecture 1: Introduction Steve Souders Google
17% 83% iGoogle, primed cache the importance of frontend performance 9%91% iGoogle, empty cache.
CS193H: High Performance Web Sites Lecture 17: Rule 14 – Make Ajax Cacheable Steve Souders Google
CS193H: High Performance Web Sites Lecture 8: Rule 4 – Gzip Components
High Performance Widgets Steve Souders Chief Performance Yahoo!
CS193H: High Performance Web Sites Lecture 21: Vol 2 – Split Dominant Domains Steve Souders Google
High Performance Web Sites Essential Knowledge for Frontend Engineers
CS193H: High Performance Web Sites Lecture 23: Vol 2 – Make static content cookie- free, Reduce cookie weight, To WWW or not to WWW Steve Souders Google.
Exceptional Performance Evolution at Yahoo! Steve Souders Chief Performance Yahoo!
CS193H: High Performance Web Sites Lecture 3: HTTP and the Web 100 Performance Profile Steve Souders Google
High Performance Web Sites 14 rules for faster-loading pages Steve Souders Tenni Theurer
CS193H: High Performance Web Sites Lecture 6: Use a CDN Steve Souders Google
Steve Souders Even Faster Web Sites best practices for faster pages Disclaimer: This content does not necessarily.
Steve Souders Life's too short, write fast code part 1 Disclaimer: This content does.
Steve Souders Even Faster Web Sites best practices for faster pages Disclaimer: This content does not necessarily.
High Performance Web Sites 14 rules for faster pages Steve Souders Chief Performance Yahoo!
CS193H: High Performance Web Sites Lecture 5: Make Fewer HTTP Requests Steve Souders Google
CS193H: High Performance Web Sites Lecture 12: Rule 8 – Make JavaScript and CSS External Steve Souders Google
CS193H: High Performance Web Sites Lecture 19: Vol 2 – Load Scripts Without Blocking Steve Souders Google
CS193H: High Performance Web Sites Lecture 10: Rule 6 – Put Scripts at the Bottom Steve Souders Google
CS193H: High Performance Web Sites Lecture 2: The Importance of Frontend Performance Steve Souders Google
CS193H: High Performance Web Sites Lecture 18: Vol 2 – Split the Initial Payload Steve Souders Google
Web Performance Meetup 1 Web Performance 101 Jeremy
Web Performance Meetup 1 Web Performance Toolbelt Jeremy
Nick Feamster CS 3251: Computer Networking I Spring 2013
OPTN Modifications to Heart Allocation Policy Implemented July 12, 2006 Changed the allocation order for medically urgent (Status 1A and 1B) patients Policy.
The 5S numbers game..
Stevesouders.com/docs/velocity-wpo pptx Disclaimer: This content does not necessarily reflect the opinions of my employer.
Best Practices for Speeding Up Your Web Site
Moving Edge-Side Includes to the Real Edge – the Clients Zhen Xiao AT&T Labs -- Research Joint work with Misha Rabinovich (AT&T Labs – Research), Fred.
1 Real World Performance Tuning Ask Bjørn Hansen OSCON 2001.
Web Site Performance What makes web sites slow? Back end Front end Tools for measuring performance Firebug / YSlow Visual Studio Test Edition W3.org html.
©2013 AKAMAI | FASTER FORWARD TM It's all about Performance Measured and Perceived Performance on Desktop and Mobile Devices San Mateo Meetup, July 2013.
WorkKeys Internet Version Training
Troubleshooting using HTTP Headers
CHAPTER 15 WEBPAGE OPTIMIZATION. LEARNING OBJECTIVES How to test your web-page performance How browser and server interactions impact performance What.
Schutzvermerk nach DIN 34 beachten 05/04/15 Seite 1 Training EPAM and CANopen Basic Solution: Password * * Level 1 Level 2 * Level 3 Password2 IP-Adr.
Improving Web Site Performance and Scalability While Saving Money Robert Boedigheimer ∙ Web Application
Client side performance in Web based Banking applications Divakar Prabhu Infosys Limited (NASDAQ: INFY)
Analysis and Performance Information Systems 337 Prof. Harry Plantinga.
High Performance Websites (Based on Steve Souder’s lecture) By Bhoomi Patel.
Mark Phillip markphillip.com 200s, 304s, Expires Headers, HTTP Compression, And You.
Performance, SEO, Accessibility Ivan Zhekov Telerik Corporation
Web Performance Optimization Boban Stojanovski (Senior Front End Developer at Solaborate) Think Fast by default.
PERFORMANCE ENHANCEMENT IN ASP.NET By Hassan Tariq Session #1.
Whole Page Performance Leeann Bent and Geoffrey M. Voelker University of California, San Diego.
Enhance Your Page Load Speed And Improve Traffic.
Time is the enemy: Ten Core Lessons for Achieving Peak
Information Systems 337 Prof. Harry Plantinga Assessment.
High Performance Web Sites 14 rules for faster-loading pages
Even Faster Web Sites best practices for faster pages
Tips for Website Speed Optimization
High Performance Mobile
Yale Digital Conference 2019
Presentation transcript:

High Performance Web Sites 14 rules for faster pages Steve Souders Tenni Theurer

Exceptional Performance quantify and improve the performance of all Yahoo! products worldwide center of expertise build tools, analyze data gather, research, and evangelize best practices

Scope performance breaks into two categories –response time –efficiency current focus is response time of web products

The Importance of Frontend Performance Backend = 5% Frontend = 95% Even primed cache, frontend = 88%

Time Spent on the Frontend Empty CachePrimed Cache amazon.com82%86% aol.com94%86% cnn.com81%92% ebay.com98%92% google.com86%64% msn.com97%95% myspace.com96%86% wikipedia.org80%88% yahoo.com95%88% youtube.com97%95%

The Performance Golden Rule 80-90% of the end-user response time is spent on the frontend. Start there. Greater potential for improvement Simpler Proven to work

Agenda Performance Research 14 Rules Case Studies Evangelism Live Analysis

Performance Research

perceived response time what is the end users experience? slow crawl boring snail stagnant unexceptional yawn unresponsive impatient delay moderate blah subdue drag apathetic prolong slack load sluggish sleepy late unexciting reduced lag complex heavy unmemorable obscure why wait performance speed enjoyable urgent instant accelerate perception snap achievement better improve action pleasant pace quick promote swift cool maximum drive prompt advance fast hurry rush satisfying feel exceptional brisk rapid exciting

User Perception Usability and perception are important for performance. The users perception is more relevant than actual unload-to-onload response time. Definition of "user onload" is undefined or varies from one web page to the next.

80/20 Performance Rule Vilfredo Pareto: 80% of consequences come from 20% of causes Focus on the 20% that affects 80% of the end-user response time. Start at the front-end.

Empty vs. Primed Cache user requests with an empty cache

Empty vs. Primed Cache user re-requests with a primed cache Expires header

Empty vs. Primed Cache empty cache 2.4 seconds primed cache 0.9 seconds 83% fewer bytes 90% fewer HTTP requests

How much does this benefit our users? It depends on how many users have components in cache. What percentage of users view a page with an empty cache * ? * Empty cache means the browser has to request the components instead of pulling them from the browser disk cache. What percentage of page views are done with an empty cache * ?

Add a new image to your page with the following response headers: Expires: Thu, 15 Apr :00:00 GMT Last-Modified: Wed, 28 Sep :49:57 GMT } 1 px Browser Cache Experiment

Requests from the browser will have one of these response status codes: 200 – The browser does not have the image in its cache. 304 – The browser has the image in its cache, but needs to verify the last modified date.

Browser Cache Experiment What percentage of users view with an empty cache? # unique users with at least one 200 response total # unique users What percentage of page views are done with an empty cache? total # of 200 responses # of # of 304 responses } 1 px

Surprising Results page views with empty cache 40-60% ~20% users with empty cache

Experiment Takeaways The empty cache user experience is more prevalent than you think! Optimize for both primed cache and empty cache experience.

Impact of Cookies on Response Time 80 ms delay dialup users Cookie SizeTimeDelta 0 bytes78 ms0 ms 500 bytes79 ms+1 ms 1000 bytes94 ms+16 ms 1500 bytes109 ms+31 ms 2000 bytes125 ms+47 ms 2500 bytes141 ms+63 ms 3000 bytes156 ms+78 ms keep sizes low

.yahoo.com cookie sizes

Analysis of Cookie Sizes across the Web Total Cookie Size Amazon60 bytes Google72 bytes Yahoo122 bytes CNN184 bytes YouTube218 bytes MSN268 bytes eBay331 bytes MySpace500 bytes

Experiment Takeaways eliminate unnecessary cookies keep cookie sizes low set cookies at appropriate domain level set Expires date appropriately –earlier date or none removes cookie sooner

Parallel Downloads Two componentsin parallelper hostname GIF HTTP/1.1

Two in parallel Four in parallel Eight in parallel Parallel Downloads

Maximizing Parallel Downloads response time (seconds) aliases

Maximizing Parallel Downloads response time (seconds) aliases

Maximizing Parallel Downloads response time (seconds) aliases

Maximizing Parallel Downloads response time (seconds) rule of thumb: use at least two but no more than four aliases

Experiment Takeaways consider the effects of CPU thrashing DNS lookup times vary across ISPs and geographic locations domain names may not be cached

Summary What the 80/20 Rule Tells Us about Reducing HTTP Requests Browser Cache Usage – Exposed! When the Cookie Crumbles Maximizing Parallel Downloads in the Carpool Lane

14 Rules

1.Make fewer HTTP requests 2.Use a CDN 3.Add an Expires header 4.Gzip components 5.Put stylesheets at the top 6.Move scripts to the bottom 7.Avoid CSS expressions 8.Make JS and CSS external 9.Reduce DNS lookups 10.Minify JS 11.Avoid redirects 12.Remove duplicate scripts 13.Configure ETags 14.Make AJAX cacheable

Rule 1: Make fewer HTTP requests CSS sprites combined scripts, combined stylesheets image maps inline images

CSS Sprites size of combined image is less <span style=" background-image: url('sprites.gif'); background-position: -260px -90px;">

Combined Scripts, Combined Stylesheets ScriptsStylesheets amazon.com31 aol.com181 cnn.com112 ebay.com72 froogle.google.com11 msn.com91 myspace.com22 wikipedia.org31 yahoo.com41 youtube.com73 Average6.51.5

Combined Scripts, Combined Stylesheets combining six scripts into one eliminates five HTTP requests challenges: –develop as separate modules –number of possible combinations vs. loading more than needed –maximize browser cache one solution: –dynamically combine and cache

Image maps server-side client-side – preferred … drawbacks: –must be contiguous –defining area coordinates – tedious, errors

Inline Images data: URL scheme data:[ ][;base64], <IMG ALT=Red Star SRC="data:image/gif;base64,R0lGODlhDAAMALMLAPN8ffBiYvWWlvrKy/FvcPewsO9VVf ajo+w6O/zl5estLv/8/AAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAMAAwAAAQzcElZyryT EHyTUgknHd9xGV+qKsYirKkwDYiKDBiatt2H1KBLQRFIJAIKywRgmhwAIlEEADs="> not supported in IE avoid increasing size of HTML pages: put inline images in cached stylesheets

Rule 2: Use a CDN distribute your static content before distributing your dynamic content amazon.comAkamai aol.comAkamai cnn.com ebay.comAkamai, Mirror Image google.com msn.comSAVVIS myspace.comAkamai, Limelight wikipedia.org yahoo.comAkamai youtube.com

Rule 3: Add an Expires header not just for images ImagesStylesheetsScripts % with Expires Median Age amazon.com0/620/10/30%114 days aol.com23/431/16/1848%217 days cnn.com0/1380/22/111%227 days ebay.com16/200/20/755%140 days froogle.google.com1/230/1 4%454 days msn.com32/351/13/980%34 days myspace.com0/180/2 0%1 day wikipedia.org6/81/12/375%1 day yahoo.com23/231/14/4100%n/a youtube.com0/320/30/70%26 days

Rule 4: Gzip components you can affect users' download times 90%+ of browsers support compression

Gzip: not just for HTML HTMLScriptsStylesheets amazon.comx aol.comxsome cnn.com ebay.comx froogle.google.comxxx msn.comxdeflate myspace.comxxx wikipedia.orgxxx yahoo.comxxx youtube.comxsome gzip scripts, stylesheets, XML, JSON (not images, PDF)

Gzip compresses more Gzip supported in more browsers Gzip vs. Deflate GzipDeflate Size SavingsSizeSavings Script3.3K1.1K67%1.1K66% Script39.7K14.5K64%16.6K58% Stylesheet1.0K0.4K56%0.5K52% Stylesheet14.1K3.7K73%4.7K67%

Gzip Configuration Apache 2.x: mod_deflate AddOutputFilterByType DEFLATE text/html text/css application/x-javascript HTTP request Accept-Encoding: gzip, deflate HTTP response Content-Encoding: gzip Vary: Accept-Encoding needed for proxies

Gzip Edge Cases <1% of browsers have problems with gzip –IE 5.5: –IE 6.0: –Netscape 3.x, 4.x consider adding Cache-Control: Private remove ETags (Rule 13) hard to diagnose; problem getting smaller

Rule 5: Put stylesheets at the top stylesheets block rendering in IE solution: put stylesheets in HEAD (per spec) avoids Flash of Unstyled Content use LINK

Slowest is Fastest CSS at the bottom: resources load faster, but nothing renders CSS at the top: resources take longer, but render at the top: same problems as bottom right choice

Rule 6: Move scripts to the bottom scripts block parallel downloads across all hostnames scripts block rendering of everything below them in the page script defer attribute is not a solution –blocks rendering and downloads in FF –slight blocking in IE

Rule 7: Avoid CSS expressions used to set CSS properties dynamically in IE width: expression( document.body.clientWidth < 600 ? 600px : auto ); problem: expressions execute many times –mouse move, key press, resize, scroll, etc. alternatives: –one-time expressions –event handlers

One-Time Expressions expression overwrites itself P { background-color: expression(altBgcolor(this)); } function altBgcolor(elem) { elem.style.backgroundColor = (new Date()).getHours()%2 ? "#F08A00" : "#B8D4FF"; }

Event Handlers tie behavior to (fewer) specific events window.onresize = setMinWidth; function setMinWidth() { var aElements = document.getElementsByTagName("p"); for ( var i = 0; i < aElements.length; i++ ) { aElements[i].runtimeStyle.width = ( document.body.clientWidth<600 ? "600px" : "auto" ); } }

Rule 8: Make JS and CSS external inline: HTML document is bigger external: more HTTP requests, but cached variables –page views per user (per session) –empty vs. primed cache stats –component re-use external is typically better extra credit: post-onload download, dynamic inlining

Post-Onload Download inline in front page download external files after onload window.onload = downloadComponents; function downloadComponents() { var elem = document.createElement("script"); elem.src = " document.body.appendChild(elem);... } speeds up secondary pages

Dynamic Inlining start with post-onload download set cookie after components downloaded server-side: –if cookie, use external –else, do inline with post-onload download cookie expiration date is key speeds up all pages

Rule 9: Reduce DNS lookups typically ms block parallel downloads OS and browser both have DNS caches

TTL (Time To Live) minute minute minutes hour minutes minutes hour hour minute minutes TTL – how long record can be cached browser settings override TTL

Browser DNS Cache IE –DnsCacheTimeout: 30 minutes –KeepAliveTimeout: 1 minute –ServerInfoTimeout: 2 minutes Firefox –network.dnsCacheExpiration: 1 minute –network.dnsCacheEntries: 20 –network.http.keep-alive.timeout: 5 minutes –Fasterfox: 1 hour, 512 entries, 30 seconds

Reducing DNS Lookups fewer hostnames – 2-4 keep-alive

minify inline scripts, too Rule 10: Minify JavaScript Minify External? Minify Inline? froogle.google.comyes

Minify vs. Obfuscate OriginalJSMin SavingsDojo Savings (15%)48K (24%) (10%) (20%)24K (25%) (27%)24K (28%) (34%)16K (38%) (22%)10K (29%) Average85K17K (21%)21K (25%) minify – it's safer not much difference

Rule 11: Avoid redirects 3xx status codes – mostly 301 and 302 HTTP/ Moved Permanently Location: add Expires headers to cache redirects worst form of blocking

Redirects – secondary page – initial page – secondary page froogle.google.comno – initial page – secondary page – secondary page – secondary page

Avoid Redirects missing trailing slash – –use Alias or DirectorySlash mod_rewrite CNAMEs log referer – track internal links outbound links – harder –beacons – beware of race condition –XHR – bail at readyState 2

Rule 12: Remove duplicate scripts hurts performance –extra HTTP requests (IE only) –extra executions atypical? –2 of 10 top sites contain duplicate scripts team size, # of scripts

Script Insertion Functions <?php function insertScript($jsfile) { if ( alreadyInserted($jsfile) ) { return; } pushInserted($jsfile); if ( hasDependencies($jsfile) ) { $dependencies = getDependencies($jsfile); for ( $i = 0; $i < count($dependencies); $i++ ) { insertScript($dependencies[$i]); } echo '<script type="text/javascript" src="'. getVersion($jsfile). '"> "; } ?>

Rule 13: Configure ETags unique identifier returned in response ETag: "c8897e-aee-4165acf0" Last-Modified: Thu, 07 Oct :54:08 GMT used in conditional GET requests If-None-Match: "c8897e-aee-4165acf0" If-Modified-Since: Thu, 07 Oct :54:08 GMT if ETag doesn't match, can't send 304 ETag format –Apache: inode-size-timestamp –IIS: Filetimestamp:ChangeNumber Use 'em or lose 'em –Apache: FileETag none –IIS:

Rule 14: Make AJAX cacheable XHR, JSON, iframe, dynamic scripts can still be cached (and minified, and gzipped) a personalized response should still be cacheable for that person

AJAX Example: Yahoo! Mail Beta address book XML request GET /yab/[...]&r= HTTP/1.1 Host: us.xxx.mail.yahoo.com HTTP/ OK Date: Thu, 12 Apr :39:09 GMT Cache-Control: private,max-age=0 Last-Modified: Sat, 31 Mar :17:17 GMT Content-Type: text/xml; charset=utf-8 Content-Encoding: gzip address book changes infrequently –cache it; add last-modified-time in URL

Case Studies

Case Study: move JS to onload remove bottom tabs avoid redirects image sprites host JS on CDN combine JS files

Case Study: move JS to onload remove bottom tabs avoid redirects images sprites host JS on CDN combine JS files 40-50%

Evangelism

Book High Performance Web Sites Conferences Yahoo! F2E Summit Web 2.0 Expo Rich Web Experience Blogs YUI Blog: YDN Blog: Open Source YSlow OSCon Ajax Experience Blogher Future of Web Apps

YSlow performance lint tool grades web pages for each rule Firefox add-on integrated with Firebug open source license

Ten Top U.S Web Sites Page Weight Response Time YSlow Grade secD secF secF secC froogle.google.com18K1.7 secA secF secD secC secA secD

Strong Correlation total page weight response time inverse YSlow grade correlation(resp time, page weight) = 0.94 correlation(resp time, inverse YSlow) = 0.76

Live Analysis

IBM Page Detailer packet sniffer Windows only IE, FF, any.exe c:\windows\wd_WS2s.ini Executable=(NETSCAPE.EXE),(NETSCP6.EXE),(firefox.exe) free trial, $300 license

Firebug web development evolved inspect and edit HTML tweak and visualize CSS debug and profile JavaScript monitor network activity (caveat) Firefox extension free

Takeaways focus on the frontend harvest the low-hanging fruit you do control user response times small investment up front keeps on giving LOFNO – be an advocate for your users

Steve Souders Tenni Theurer

CC Images Used "Need for Speed" by Amnemon: "Max speed 15kmh" by xxxtoff: "maybe" by Tal Bright: "takeout" by dotpolka: "how do they do that" by Fort Photo: "Absolutely Nothing is Allowed Here" by Vicki & Chuck Rogers: "Zipper Pocket" by jogales: "new briefcase" by dcJohn: "Told you it was me!" by Pug!: "Robert's Legion" by dancharvey: "thank you" by nj dodge: