50

Sanjeev ghai 12

Embed Size (px)

DESCRIPTION

Sanjeev ghai, Sanjeev ghei, Sanjeev ghai income tax, Sanjeev ghai irs

Citation preview

Page 1: Sanjeev ghai 12
Page 2: Sanjeev ghai 12

17%

83%

iGoogle, primed cache

the importance of frontend performance

9% 91%

iGoogle, empty cache

Page 3: Sanjeev ghai 12
Page 4: Sanjeev ghai 12
Page 5: Sanjeev ghai 12
Page 6: Sanjeev ghai 12

Sept 2007

Page 7: Sanjeev ghai 12

14 RULES

1. MAKE FEWER HTTP REQUESTS

2. USE A CDN3. ADD AN EXPIRES HEADER4. GZIP COMPONENTS5. PUT STYLESHEETS AT THE

TOP6. PUT SCRIPTS AT THE

BOTTOM7. AVOID CSS EXPRESSIONS8. MAKE JS AND CSS

EXTERNAL9. REDUCE DNS LOOKUPS10.MINIFY JS11.AVOID REDIRECTS12.REMOVE DUPLICATE

SCRIPTS13.CONFIGURE ETAGS14.MAKE AJAX CACHEABLE

Page 8: Sanjeev ghai 12

June 2009

Page 9: Sanjeev ghai 12

Even Faster Web SitesSplitting the initial payloadLoading scripts without blockingCoupling asynchronous scriptsPositioning inline scriptsSharding dominant domainsFlushing the document earlyUsing iframes sparinglySimplifying CSS Selectors

Understanding Ajax performance..........Doug CrockfordCreating responsive web apps............Ben Galbraith, Dion

AlmaerWriting efficient JavaScript.............Nicholas ZakasScaling with Comet.....................Dylan SchiemannGoing beyond gzipping...............Tony GentilcoreOptimizing images...................Stoyan Stefanov, Nicole

Sullivan

Page 10: Sanjeev ghai 12

AOLeBayFacebookMySpaceWikipediaYahoo!

Why focus on JavaScript?

YouTube

Page 11: Sanjeev ghai 12

scripts block

<script src="A.js"> blocks parallel downloads and rendering

7 secs: IE 8, FF 3.5(?), Chr 2, Saf 4

9 secs: IE 6-7, FF 3.0, Chr 1, Op 9-10, Saf 3

Page 12: Sanjeev ghai 12

MSNScripts and other resources downloaded in parallel! How? Secret sauce?!var p= g.getElementsByTagName("HEAD")[0];var c=g.createElement("script");c.type="text/javascript";c.onreadystatechange=n;c.onerror=c.onload=k;c.src=e;p.appendChild(c)

MSN.com: parallel scripts

Page 13: Sanjeev ghai 12

Loading Scripts Without Blocking

XHR Eval

XHR Injection

Script in Iframe

Script DOM Element

Script Defer

document.write Script Tag

Page 14: Sanjeev ghai 12

XHR Eval

script must have same domain as main page

must refactor script

var xhrObj = getXHRObject();xhrObj.onreadystatechange = function() { if ( xhrObj.readyState != 4 ) return; eval(xhrObj.responseText); };xhrObj.open('GET', 'A.js', true);xhrObj.send('');

Page 15: Sanjeev ghai 12

XHR Injectionvar xhrObj = getXHRObject();xhrObj.onreadystatechange = function() { if ( xhrObj.readyState != 4 ) return; var se=document.createElement('script'); document.getElementsByTagName('head') [0].appendChild(se); se.text = xhrObj.responseText; };xhrObj.open('GET', 'A.js', true);xhrObj.send('');

script must have same domain as main page

Page 16: Sanjeev ghai 12

Script in Iframe<iframe src='A.html' width=0 height=0 frameborder=0 id=frame1></iframe>

iframe must have same domain as main page

must refactor script:// access iframe from main pagewindow.frames[0].createNewDiv();

// access main page from iframeparent.document.createElement('div');

Page 17: Sanjeev ghai 12

Script DOM Elementvar se = document.createElement('script');se.src = 'http://anydomain.com/A.js';document.getElementsByTagName('head')[0].appendChild(se);

script and main page domains can differ

no need to refactor JavaScript

Page 18: Sanjeev ghai 12

<script defer src='A.js'></script>

only supported in IE (just landed in FF 3.1)

script and main page domains can differ

no need to refactor JavaScript

Script Defer

Page 19: Sanjeev ghai 12

document.write("<script type='text/javascript' src='A.js'> <\/script>");

parallelization only works in IE

parallel downloads for scripts, nothing else

all document.writes must be in same script block

document.write Script Tag

Page 20: Sanjeev ghai 12

*Only other document.write scripts are downloaded in parallel (in the same script block).

Load Scripts Without Blocking

Page 21: Sanjeev ghai 12

XHR EvalXHR InjectionScript in iframeScript DOM ElementScript Defer

Script DOM ElementScript Defer

Script DOM Element

Script DOM Element (FF)Script Defer (IE)

XHR EvalXHR InjectionScript in iframeScript DOM Element (IE)

XHR InjectionXHR EvalScript DOM Element (IE)

Managed XHR InjectionManaged XHR EvalScript DOM Element

Managed XHR InjectionManaged XHR Eval

Script DOM Element (FF)Script Defer (IE)Managed XHR EvalManaged XHR Injection

Script DOM Element (FF)Script Defer (IE)Managed XHR EvalManaged XHR Injection

different domains same domains

no order

preserve order

no order

no busyshow busy

show busyno busy

preserve order

and the winner is...

Page 22: Sanjeev ghai 12
Page 23: Sanjeev ghai 12

asynchronous JS example: menu.js

<script type="text/javascript">var domscript = document.createElement('script');domscript.src = "menu.js"; document.getElementsByTagName('head')

[0].appendChild(domscript);

var aExamples = [ ['couple-normal.php', 'Normal Script Src'], ['couple-xhr-eval.php', 'XHR Eval'], ... ['managed-xhr.php', 'Managed XHR'] ];

function init() { EFWS.Menu.createMenu('examplesbtn', aExamples);}

init();</script>

script DOM element approach

Page 24: Sanjeev ghai 12

before

after

Page 25: Sanjeev ghai 12

*Only other document.write scripts are downloaded in parallel (in the same script block).

!IE

Loading Scripts Without Blocking

Page 26: Sanjeev ghai 12

what about

inlined code that depends on the script?

Page 27: Sanjeev ghai 12

coupling techniques

hardcoded callback

window onload

timer

degrading script tags

script onload

Page 28: Sanjeev ghai 12

technique 5: script onload<script type="text/javascript">var aExamples = [['couple-normal.php', 'Normal Script Src'], ...];

function init() { EFWS.Menu.createMenu('examplesbtn', aExamples);}

var domscript = document.createElement('script');domscript.src = "menu.js";

domscript.onloadDone = false;domscript.onload = function() { if ( ! domscript.onloadDone ) { init(); } domscript.onloadDone = true; };domscript.onreadystatechange = function() { if ( "loaded" === domscript.readyState ) { if ( ! domscript.onloadDone ) { init(); } domscript.onloadDone = true; }}

document.getElementsByTagName('head')[0].appendChild(domscript);</script>

pretty nice, medium complexity

Page 29: Sanjeev ghai 12

going beyond gzipping

Tony Gentilcore, Chapter 9, Even Faster Web Sites

Rule 4: Gzip Components from HPWSHTTP/1.1

request: Accept-Encoding: gzip,deflateresponse: Content-Encoding: gzip

Apache 2.x:AddOutputFilterByType DEFLATE text/html text/css application/x-javascript

Page 30: Sanjeev ghai 12

benefits of gzipping

70% reduction in transfer sizenot just for HTML!!

all text: JavaScript, CSS, XML, JSONnot binary: images, PDF, Flash

Page 31: Sanjeev ghai 12

so what's the issue?

15% of your users get uncompressed responses

surprize! why?

old browsers? noNetscape Navigator 3 – 0.0%Netscape Communicator 4 – 0.1%Opera 3.5 – 0.0%IE <3 – 0.01%

clue: most prevalent in the Middle East

Page 32: Sanjeev ghai 12

who's stripping?proxy, A-V software Accept-Encoding header

Ad Muncher stripped

CA Internet Security Suite Accept-EncodXng: gzip, deflate

CEQURUX stripped

Citrix Application Firewall stripped

ISA 2006 stripped

McAfee Internet Security 6.0

XXXXXXXXXXXXXXX: +++++++++++++

Norton Internet Security 6.0

---------------: -------------

Novell iChain 2.3 stripped

Novell Client Firewall stripped

WebWasher stripped

ZoneAlarm Pro 5.5 XXXXXXXXXXXXXXX: XXXXXXXXXXXXXproxies and anti-virus software disable compression for easier response filtering

Page 33: Sanjeev ghai 12

what to do

don't assume compressiongo the extra mile to reduce response

size• event delegation (-5%)• relative URLs (-3%)• minify HTML, JavaScript, and CSS (-4%)• use CSS rules over inline styles (-1%)• alias long JavaScript symbol names (??)

Thanks, Tony!see Tony's chapter in Even Faster Web Sites

Page 34: Sanjeev ghai 12

homage to Open Source

UA Profiler

Cuzillion

Episodes

Hammerhead

SpriteMe

Page 35: Sanjeev ghai 12
Page 36: Sanjeev ghai 12

UA Profiler

tracks browser performance traits

http://stevesouders.com/ua/

go to the test page

your browser automatically walks through the tests (requires JS)

results recorded and shared publicly

currently 20K test results, 13K unique testers, 70 browsers

help out by running the test!

Page 37: Sanjeev ghai 12
Page 38: Sanjeev ghai 12

a tool for quickly constructing web pages to see how components interact

http://stevesouders.com/cuzillion/

Cuzillion'cuz there are a zillion pages to check

Page 39: Sanjeev ghai 12
Page 40: Sanjeev ghai 12

Episodes

framework for timing web sites• based on JavaScript timers• works on Ajax web apps• uses window.postMessage (multiple

listeners)• potential industry standard

http://stevesouders.com/episodes/

Page 41: Sanjeev ghai 12

Measuring Performance

Episodes

dev box synthetic testing

bucket testing

real user data

Hammerhead

Page 42: Sanjeev ghai 12
Page 43: Sanjeev ghai 12

Hammerheadmoving performance testing upstream

http://stevesouders.com/hammerhead/

Firebug extension

load M URLs N times, empty & primed cache

record average & median time

add'l features: export dataload time measurementmodal cache clearing

combine with bandwidth throttler

Page 44: Sanjeev ghai 12
Page 45: Sanjeev ghai 12

SpriteMedon't say "bite me!#*", say "SpriteMe!"

create sprites with ease

http://spriteme.org/

bookmarklet

sprite generator:

coolRunnings by Jared Hirschhttp://jaredhirsch.com/coolrunnings/about/

http://bitbucket.org/jared/coolrunnings/

Page 46: Sanjeev ghai 12

focus on the frontend

run YSlow (http://developer.yahoo.com/yslow)

and Page Speed! (http://code.google.com/speed/page-speed/)

speed matters

takeaways

Page 47: Sanjeev ghai 12

Bing:

Yahoo:

Google:

AOL:

Shopzilla:

1 http://en.oreilly.com/velocity2009/public/schedule/detail/8523 2 http://www.slideshare.net/stoyan/yslow-20-presentation3 http://en.oreilly.com/velocity2009/public/schedule/detail/75794 http://en.oreilly.com/velocity2009/public/schedule/detail/7709

+2000 ms -4.3% revenue/user1

+400 ms -5-9% full-page traffic2

+400 ms -0.59% searches/user1

fastest users +50% page views3

-5000 ms +7-12% revenue4

impact on revenue

Page 48: Sanjeev ghai 12

hardware – reduced loadShopzilla – 50% fewer servers

bandwidth – reduced response size

http://billwscott.com/share/presentations/2008/stanford/HPWP-RealWorld.pdf

cost savings

Page 49: Sanjeev ghai 12

if you want better user experience more revenue reduced operating costs

the strategy is clear

Even Faster Web Sites

Page 50: Sanjeev ghai 12

Steve [email protected]

http://stevesouders.com/docs/oscon-20090722.ppt

1:00 – book signing at Barnes & Noble

3:20 – free consulting at Google booth