SlideShare ist ein Scribd-Unternehmen logo
1 von 50
the importance of frontend 
performance 
9% 91% 
17% 83% 
iGoogle, primed cache 
iGoogle, empty cache
Sept 2007
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. PUT SCRIPTS AT 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
June 2009
Even Faster Web Sites 
Splitting the initial payload 
Loading scripts without blocking 
Coupling asynchronous scripts 
Positioning inline scripts 
Sharding dominant domains 
Flushing the document early 
Using iframes sparingly 
Simplifying CSS Selectors 
Understanding Ajax performance..........Doug Crockford 
Creating responsive web apps............Ben Galbraith, Dion Almaer 
Writing efficient JavaScript.............Nicholas Zakas 
Scaling with Comet.....................Dylan Schiemann 
Going beyond gzipping...............Tony Gentilcore 
Optimizing images...................Stoyan Stefanov, Nicole Sullivan
Why focus on JavaScript? 
WFMaikcyYieSapbepheABoaodOocaoieakyL! 
YouTube
scripts block 
<script src="A.js"> blocks parallel 
downloads and rendering 
9 secs: IE 6-7, FF 3.0, Chr 1, Op 9-10, Saf 3 
7 secs: IE 8, FF 3.5(?), Chr 2, Saf 4
MSN 
MSN.com: parallel scripts 
Scripts 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)
Loading Scripts Without Blocking 
XHR Eval 
XHR Injection 
Script in Iframe 
Script DOM Element 
Script Defer 
document.write Script Tag
XHR Eval 
var xhrObj = getXHRObject(); 
xhrObj.onreadystatechange = 
function() { 
if ( xhrObj.readyState != 4 ) return; 
eval(xhrObj.responseText); 
}; 
xhrObj.open('GET', 'A.js', true); 
xhrObj.send(''); 
script must have same domain as main page 
must refactor script
XHR Injection 
var 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
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 page 
window.frames[0].createNewDiv(); 
// access main page from iframe 
parent.document.createElement('div');
Script DOM Element 
var 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
Script Defer 
<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
document.write Script Tag 
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
Load Scripts Without Blocking 
*Only other document.write scripts are downloaded in parallel (in the same script block).
and the winner is... 
XHR Eval 
XHR Injection 
Script in iframe 
Script DOM 
Element 
Script Defer 
Script DOM 
Element 
Script Defer 
Script DOM Element 
Script DOM Element (FF) 
Script Defer (IE) 
XHR Eval 
XHR Injection 
Script in iframe 
Script DOM Element (IE) 
XHR Injection 
XHR Eval 
Script DOM Element (IE) 
Script DOM Element (FF) 
Script Defer (IE) 
Managed XHR Eval 
Managed XHR Injection 
Managed XHR Injection 
Managed XHR Eval 
Managed XHR Injection 
Managed XHR Eval 
Script DOM Element 
Script DOM Element (FF) 
Script Defer (IE) 
Managed XHR Eval 
Managed XHR Injection 
different domains same domains 
no order 
preserve 
order 
no order 
no busy 
show busy 
no busy show busy 
preserve 
order
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
before 
after
Loading Scripts Without Blocking 
*Only other document.write scripts are downloaded in parallel (in the same script block). 
!IE
what about 
inlined code 
that depends on the script?
coupling techniques 
hardcoded callback 
window onload 
timer 
degrading script tags 
script onload
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
going beyond gzipping 
Tony Gentilcore, Chapter 9, Even Faster 
Web Sites 
Rule 4: Gzip Components from HPWS 
HTTP/1.1 
request: Accept-Encoding: gzip,deflate 
response: Content-Encoding: gzip 
Apache 2.x: 
AddOutputFilterByType DEFLATE 
text/html text/css application/x-javascript
benefits of gzipping 
70% reduction in transfer size 
not just for HTML!! 
all text: JavaScript, CSS, XML, JSON 
not binary: images, PDF, Flash
so what's the issue? 
15% of your users get uncompressed responses 
surprize! why? 
old browsers? no 
Netscape 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
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: XXXXXXXXXXXXX 
proxies and anti-virus software disable 
compression for easier response filtering
what to do 
don't assume compression 
go 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
homage to Open Source 
UA Profiler 
Cuzillion 
Episodes 
Hammerhead 
SpriteMe
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!
Cuzillion 
'cuz there are a zillion pages to check 
a tool for quickly constructing web pages to 
see how components interact 
http://stevesouders.com/cuzillion/
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/
Measuring Performance 
Episodes 
dev box synthetic 
testing 
bucket 
testing 
real user 
data 
Hammerhead
Hammerhead 
moving 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 data 
load time measurement 
modal cache clearing 
combine with bandwidth throttler
SpriteMe 
don't say "bite me!#*", say "SpriteMe!" 
create sprites with ease 
http://spriteme.org/ 
bookmarklet 
sprite generator: 
coolRunnings by Jared Hirsch 
http://jaredhirsch.com/coolrunnings/about/ 
http://bitbucket.org/jared/coolrunnings/
takeaways 
focus on the frontend 
run YSlow 
(http://developer.yahoo.com/yslow) 
and Page Speed! 
(http://code.google.com/speed/page-speed/) 
speed matters
Bing: 
Yahoo: 
Google: 
AOL: 
Shopzilla: 
impact on revenue 
+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 
1 http://en.oreilly.com/velocity2009/public/schedule/detail/8523 
2 http://www.slideshare.net/stoyan/yslow-20-presentation 
3 http://en.oreilly.com/velocity2009/public/schedule/detail/7579 
4 http://en.oreilly.com/velocity2009/public/schedule/detail/7709
cost savings 
hardware – reduced load 
Shopzilla – 50% fewer servers 
bandwidth – reduced response size 
http://billwscott.com/share/presentations/2008/stanford/HPWP-RealWorld.pdf
if you want 
better user experience 
more revenue 
reduced operating costs 
the strategy is clear 
Even Faster Web Sites
1:00 – book signing at Barnes & Noble 
3:20 – free consulting at Google booth 
Steve Souders 
souders@google.com 
http://stevesouders.com/docs/oscon-20090722.ppt

Weitere ähnliche Inhalte

Was ist angesagt?

Node Security: The Good, Bad & Ugly
Node Security: The Good, Bad & UglyNode Security: The Good, Bad & Ugly
Node Security: The Good, Bad & Ugly
Bishan Singh
 
Deploying
DeployingDeploying
Deploying
soon
 
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
Jeongkyu Shin
 

Was ist angesagt? (20)

Node Security: The Good, Bad & Ugly
Node Security: The Good, Bad & UglyNode Security: The Good, Bad & Ugly
Node Security: The Good, Bad & Ugly
 
HTML5 JavaScript APIs
HTML5 JavaScript APIsHTML5 JavaScript APIs
HTML5 JavaScript APIs
 
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
 
Ruby MVC from scratch with Rack
Ruby MVC from scratch with RackRuby MVC from scratch with Rack
Ruby MVC from scratch with Rack
 
Understanding the Node.js Platform
Understanding the Node.js PlatformUnderstanding the Node.js Platform
Understanding the Node.js Platform
 
EWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode ObjectEWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode Object
 
High Performance Ajax Applications
High Performance Ajax ApplicationsHigh Performance Ajax Applications
High Performance Ajax Applications
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4
 
Front end performance tip
Front end performance tipFront end performance tip
Front end performance tip
 
Front End Performance
Front End PerformanceFront End Performance
Front End Performance
 
Front end performance optimization
Front end performance optimizationFront end performance optimization
Front end performance optimization
 
Building an HTML5 Video Player
Building an HTML5 Video PlayerBuilding an HTML5 Video Player
Building an HTML5 Video Player
 
Vue 淺談前端建置工具
Vue 淺談前端建置工具Vue 淺談前端建置工具
Vue 淺談前端建置工具
 
Deploying
DeployingDeploying
Deploying
 
JavaScript Performance Patterns
JavaScript Performance PatternsJavaScript Performance Patterns
JavaScript Performance Patterns
 
Rails Girls: Programming, Web Applications and Ruby on Rails
Rails Girls: Programming, Web Applications and Ruby on RailsRails Girls: Programming, Web Applications and Ruby on Rails
Rails Girls: Programming, Web Applications and Ruby on Rails
 
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC
 
Client-side JavaScript Vulnerabilities
Client-side JavaScript VulnerabilitiesClient-side JavaScript Vulnerabilities
Client-side JavaScript Vulnerabilities
 

Andere mochten auch (9)

Olumide adeola pidan c
Olumide adeola pidan cOlumide adeola pidan c
Olumide adeola pidan c
 
Sanjeev ghei, sanjeev ghai income tax,
Sanjeev ghei, sanjeev ghai income tax,Sanjeev ghei, sanjeev ghai income tax,
Sanjeev ghei, sanjeev ghai income tax,
 
Olumide pidan
Olumide pidanOlumide pidan
Olumide pidan
 
Sanjeev ghai, sanjeev ghai irs, sanjeev ghei, sanjeev ghai income tax
Sanjeev ghai, sanjeev ghai irs, sanjeev ghei, sanjeev ghai income taxSanjeev ghai, sanjeev ghai irs, sanjeev ghei, sanjeev ghai income tax
Sanjeev ghai, sanjeev ghai irs, sanjeev ghei, sanjeev ghai income tax
 
Purva Reviews
Purva ReviewsPurva Reviews
Purva Reviews
 
olumide adeola pidan
olumide adeola pidanolumide adeola pidan
olumide adeola pidan
 
Sanjeev ghai 1
Sanjeev ghai 1Sanjeev ghai 1
Sanjeev ghai 1
 
Sanjeev ghei 3
Sanjeev ghei 3Sanjeev ghei 3
Sanjeev ghei 3
 
Sanjeev ghai income tax 12
Sanjeev ghai income tax 12Sanjeev ghai income tax 12
Sanjeev ghai income tax 12
 

Ähnlich wie Sanjeev ghai 12

Web 2.0 Expo: Even Faster Web Sites
Web 2.0 Expo: Even Faster Web SitesWeb 2.0 Expo: Even Faster Web Sites
Web 2.0 Expo: Even Faster Web Sites
Steve Souders
 
Build Your Own CMS with Apache Sling
Build Your Own CMS with Apache SlingBuild Your Own CMS with Apache Sling
Build Your Own CMS with Apache Sling
Bob Paulin
 
Javascript frameworks: Backbone.js
Javascript frameworks: Backbone.jsJavascript frameworks: Backbone.js
Javascript frameworks: Backbone.js
Soós Gábor
 
HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?
Remy Sharp
 

Ähnlich wie Sanjeev ghai 12 (20)

Web 2.0 Expo: Even Faster Web Sites
Web 2.0 Expo: Even Faster Web SitesWeb 2.0 Expo: Even Faster Web Sites
Web 2.0 Expo: Even Faster Web Sites
 
Web20expo 20080425
Web20expo 20080425Web20expo 20080425
Web20expo 20080425
 
Developing High Performance Web Apps - CodeMash 2011
Developing High Performance Web Apps - CodeMash 2011Developing High Performance Web Apps - CodeMash 2011
Developing High Performance Web Apps - CodeMash 2011
 
Developing High Performance Web Apps
Developing High Performance Web AppsDeveloping High Performance Web Apps
Developing High Performance Web Apps
 
Even Faster Web Sites at The Ajax Experience
Even Faster Web Sites at The Ajax ExperienceEven Faster Web Sites at The Ajax Experience
Even Faster Web Sites at The Ajax Experience
 
Oscon 20080724
Oscon 20080724Oscon 20080724
Oscon 20080724
 
Presentation Tier optimizations
Presentation Tier optimizationsPresentation Tier optimizations
Presentation Tier optimizations
 
Build Your Own CMS with Apache Sling
Build Your Own CMS with Apache SlingBuild Your Own CMS with Apache Sling
Build Your Own CMS with Apache Sling
 
JavaScript front end performance optimizations
JavaScript front end performance optimizationsJavaScript front end performance optimizations
JavaScript front end performance optimizations
 
Even Faster Web Sites at jQuery Conference '09
Even Faster Web Sites at jQuery Conference '09Even Faster Web Sites at jQuery Conference '09
Even Faster Web Sites at jQuery Conference '09
 
Web Performance Part 4 "Client-side performance"
Web Performance Part 4  "Client-side performance"Web Performance Part 4  "Client-side performance"
Web Performance Part 4 "Client-side performance"
 
W3 conf hill-html5-security-realities
W3 conf hill-html5-security-realitiesW3 conf hill-html5-security-realities
W3 conf hill-html5-security-realities
 
JavaScript performance patterns
JavaScript performance patternsJavaScript performance patterns
JavaScript performance patterns
 
Javascript frameworks: Backbone.js
Javascript frameworks: Backbone.jsJavascript frameworks: Backbone.js
Javascript frameworks: Backbone.js
 
Webpack
Webpack Webpack
Webpack
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
5.node js
5.node js5.node js
5.node js
 
HTML 5 - Overview
HTML 5 - OverviewHTML 5 - Overview
HTML 5 - Overview
 
HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?
 
Cape Cod Web Technology Meetup - 2
Cape Cod Web Technology Meetup - 2Cape Cod Web Technology Meetup - 2
Cape Cod Web Technology Meetup - 2
 

Mehr von Praveen kumar (10)

Olumide adeola pidan d
Olumide adeola pidan dOlumide adeola pidan d
Olumide adeola pidan d
 
Olumide adeola pidan b
Olumide adeola pidan bOlumide adeola pidan b
Olumide adeola pidan b
 
Olumide adeola pidan a
Olumide adeola pidan aOlumide adeola pidan a
Olumide adeola pidan a
 
Eschol Tech Solutions
Eschol Tech SolutionsEschol Tech Solutions
Eschol Tech Solutions
 
olumide adeola pidan
olumide adeola pidanolumide adeola pidan
olumide adeola pidan
 
Sanjeev ghai income tax
Sanjeev ghai income taxSanjeev ghai income tax
Sanjeev ghai income tax
 
Sanjeev ghei
Sanjeev gheiSanjeev ghei
Sanjeev ghei
 
Sanjeev ghei
Sanjeev gheiSanjeev ghei
Sanjeev ghei
 
Sanjeev ghai income tax
Sanjeev ghai income taxSanjeev ghai income tax
Sanjeev ghai income tax
 
Purva Reviews
Purva ReviewsPurva Reviews
Purva Reviews
 

Kürzlich hochgeladen

Top profile Call Girls In Meerut [ 7014168258 ] Call Me For Genuine Models We...
Top profile Call Girls In Meerut [ 7014168258 ] Call Me For Genuine Models We...Top profile Call Girls In Meerut [ 7014168258 ] Call Me For Genuine Models We...
Top profile Call Girls In Meerut [ 7014168258 ] Call Me For Genuine Models We...
gajnagarg
 
怎样办理伯明翰城市大学毕业证(BCU毕业证书)成绩单留信认证
怎样办理伯明翰城市大学毕业证(BCU毕业证书)成绩单留信认证怎样办理伯明翰城市大学毕业证(BCU毕业证书)成绩单留信认证
怎样办理伯明翰城市大学毕业证(BCU毕业证书)成绩单留信认证
eeanqy
 
How to Build a Simple Shopify Website
How to Build a Simple Shopify WebsiteHow to Build a Simple Shopify Website
How to Build a Simple Shopify Website
mark11275
 
poliovirus-190801072449. pptx
poliovirus-190801072449.            pptxpoliovirus-190801072449.            pptx
poliovirus-190801072449. pptx
ssuser0ad194
 
ab-initio-training basics and architecture
ab-initio-training basics and architectureab-initio-training basics and architecture
ab-initio-training basics and architecture
saipriyacoool
 
Minimalist Orange Portfolio by Slidesgo.pptx
Minimalist Orange Portfolio by Slidesgo.pptxMinimalist Orange Portfolio by Slidesgo.pptx
Minimalist Orange Portfolio by Slidesgo.pptx
balqisyamutia
 
Abortion Pills in Oman (+918133066128) Cytotec clinic buy Oman Muscat
Abortion Pills in Oman (+918133066128) Cytotec clinic buy Oman MuscatAbortion Pills in Oman (+918133066128) Cytotec clinic buy Oman Muscat
Abortion Pills in Oman (+918133066128) Cytotec clinic buy Oman Muscat
Abortion pills in Kuwait Cytotec pills in Kuwait
 
怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证
怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证
怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证
eeanqy
 
Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...
Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...
Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...
nirzagarg
 

Kürzlich hochgeladen (20)

Top profile Call Girls In Meerut [ 7014168258 ] Call Me For Genuine Models We...
Top profile Call Girls In Meerut [ 7014168258 ] Call Me For Genuine Models We...Top profile Call Girls In Meerut [ 7014168258 ] Call Me For Genuine Models We...
Top profile Call Girls In Meerut [ 7014168258 ] Call Me For Genuine Models We...
 
How to Turn a Picture Into a Line Drawing in Photoshop
How to Turn a Picture Into a Line Drawing in PhotoshopHow to Turn a Picture Into a Line Drawing in Photoshop
How to Turn a Picture Into a Line Drawing in Photoshop
 
Eye-Catching Web Design Crafting User Interfaces .docx
Eye-Catching Web Design Crafting User Interfaces .docxEye-Catching Web Design Crafting User Interfaces .docx
Eye-Catching Web Design Crafting User Interfaces .docx
 
怎样办理伯明翰城市大学毕业证(BCU毕业证书)成绩单留信认证
怎样办理伯明翰城市大学毕业证(BCU毕业证书)成绩单留信认证怎样办理伯明翰城市大学毕业证(BCU毕业证书)成绩单留信认证
怎样办理伯明翰城市大学毕业证(BCU毕业证书)成绩单留信认证
 
UI:UX Design and Empowerment Strategies for Underprivileged Transgender Indiv...
UI:UX Design and Empowerment Strategies for Underprivileged Transgender Indiv...UI:UX Design and Empowerment Strategies for Underprivileged Transgender Indiv...
UI:UX Design and Empowerment Strategies for Underprivileged Transgender Indiv...
 
How to Build a Simple Shopify Website
How to Build a Simple Shopify WebsiteHow to Build a Simple Shopify Website
How to Build a Simple Shopify Website
 
The hottest UI and UX Design Trends 2024
The hottest UI and UX Design Trends 2024The hottest UI and UX Design Trends 2024
The hottest UI and UX Design Trends 2024
 
poliovirus-190801072449. pptx
poliovirus-190801072449.            pptxpoliovirus-190801072449.            pptx
poliovirus-190801072449. pptx
 
Lecture 01 Introduction To Multimedia.pptx
Lecture 01 Introduction To Multimedia.pptxLecture 01 Introduction To Multimedia.pptx
Lecture 01 Introduction To Multimedia.pptx
 
ab-initio-training basics and architecture
ab-initio-training basics and architectureab-initio-training basics and architecture
ab-initio-training basics and architecture
 
Minimalist Orange Portfolio by Slidesgo.pptx
Minimalist Orange Portfolio by Slidesgo.pptxMinimalist Orange Portfolio by Slidesgo.pptx
Minimalist Orange Portfolio by Slidesgo.pptx
 
Independent Escorts Goregaon WhatsApp +91-9930687706, Best Service
Independent Escorts Goregaon WhatsApp +91-9930687706, Best ServiceIndependent Escorts Goregaon WhatsApp +91-9930687706, Best Service
Independent Escorts Goregaon WhatsApp +91-9930687706, Best Service
 
Abortion Pills in Oman (+918133066128) Cytotec clinic buy Oman Muscat
Abortion Pills in Oman (+918133066128) Cytotec clinic buy Oman MuscatAbortion Pills in Oman (+918133066128) Cytotec clinic buy Oman Muscat
Abortion Pills in Oman (+918133066128) Cytotec clinic buy Oman Muscat
 
Q4-W4-SCIENCE-5 power point presentation
Q4-W4-SCIENCE-5 power point presentationQ4-W4-SCIENCE-5 power point presentation
Q4-W4-SCIENCE-5 power point presentation
 
怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证
怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证
怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证
 
Sweety Planet Packaging Design Process Book.pptx
Sweety Planet Packaging Design Process Book.pptxSweety Planet Packaging Design Process Book.pptx
Sweety Planet Packaging Design Process Book.pptx
 
Furniture & Joinery Details_Designs.pptx
Furniture & Joinery Details_Designs.pptxFurniture & Joinery Details_Designs.pptx
Furniture & Joinery Details_Designs.pptx
 
Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...
Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...
Top profile Call Girls In Mau [ 7014168258 ] Call Me For Genuine Models We ar...
 
Jordan_Amanda_DMBS202404_PB1_2024-04.pdf
Jordan_Amanda_DMBS202404_PB1_2024-04.pdfJordan_Amanda_DMBS202404_PB1_2024-04.pdf
Jordan_Amanda_DMBS202404_PB1_2024-04.pdf
 
Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...
Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...
Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...
 

Sanjeev ghai 12

  • 1.
  • 2. the importance of frontend performance 9% 91% 17% 83% iGoogle, primed cache iGoogle, empty cache
  • 3.
  • 4.
  • 5.
  • 7. 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. PUT SCRIPTS AT 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
  • 9. Even Faster Web Sites Splitting the initial payload Loading scripts without blocking Coupling asynchronous scripts Positioning inline scripts Sharding dominant domains Flushing the document early Using iframes sparingly Simplifying CSS Selectors Understanding Ajax performance..........Doug Crockford Creating responsive web apps............Ben Galbraith, Dion Almaer Writing efficient JavaScript.............Nicholas Zakas Scaling with Comet.....................Dylan Schiemann Going beyond gzipping...............Tony Gentilcore Optimizing images...................Stoyan Stefanov, Nicole Sullivan
  • 10. Why focus on JavaScript? WFMaikcyYieSapbepheABoaodOocaoieakyL! YouTube
  • 11. scripts block <script src="A.js"> blocks parallel downloads and rendering 9 secs: IE 6-7, FF 3.0, Chr 1, Op 9-10, Saf 3 7 secs: IE 8, FF 3.5(?), Chr 2, Saf 4
  • 12. MSN MSN.com: parallel scripts Scripts 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)
  • 13. Loading Scripts Without Blocking XHR Eval XHR Injection Script in Iframe Script DOM Element Script Defer document.write Script Tag
  • 14. XHR Eval var xhrObj = getXHRObject(); xhrObj.onreadystatechange = function() { if ( xhrObj.readyState != 4 ) return; eval(xhrObj.responseText); }; xhrObj.open('GET', 'A.js', true); xhrObj.send(''); script must have same domain as main page must refactor script
  • 15. XHR Injection var 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
  • 16. 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 page window.frames[0].createNewDiv(); // access main page from iframe parent.document.createElement('div');
  • 17. Script DOM Element var 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
  • 18. Script Defer <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
  • 19. document.write Script Tag 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
  • 20. Load Scripts Without Blocking *Only other document.write scripts are downloaded in parallel (in the same script block).
  • 21. and the winner is... XHR Eval XHR Injection Script in iframe Script DOM Element Script Defer Script DOM Element Script Defer Script DOM Element Script DOM Element (FF) Script Defer (IE) XHR Eval XHR Injection Script in iframe Script DOM Element (IE) XHR Injection XHR Eval Script DOM Element (IE) Script DOM Element (FF) Script Defer (IE) Managed XHR Eval Managed XHR Injection Managed XHR Injection Managed XHR Eval Managed XHR Injection Managed XHR Eval Script DOM Element Script DOM Element (FF) Script Defer (IE) Managed XHR Eval Managed XHR Injection different domains same domains no order preserve order no order no busy show busy no busy show busy preserve order
  • 22.
  • 23. 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
  • 25. Loading Scripts Without Blocking *Only other document.write scripts are downloaded in parallel (in the same script block). !IE
  • 26. what about inlined code that depends on the script?
  • 27. coupling techniques hardcoded callback window onload timer degrading script tags script onload
  • 28. 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
  • 29. going beyond gzipping Tony Gentilcore, Chapter 9, Even Faster Web Sites Rule 4: Gzip Components from HPWS HTTP/1.1 request: Accept-Encoding: gzip,deflate response: Content-Encoding: gzip Apache 2.x: AddOutputFilterByType DEFLATE text/html text/css application/x-javascript
  • 30. benefits of gzipping 70% reduction in transfer size not just for HTML!! all text: JavaScript, CSS, XML, JSON not binary: images, PDF, Flash
  • 31. so what's the issue? 15% of your users get uncompressed responses surprize! why? old browsers? no Netscape 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
  • 32. 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: XXXXXXXXXXXXX proxies and anti-virus software disable compression for easier response filtering
  • 33. what to do don't assume compression go 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
  • 34. homage to Open Source UA Profiler Cuzillion Episodes Hammerhead SpriteMe
  • 35.
  • 36. 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!
  • 37.
  • 38. Cuzillion 'cuz there are a zillion pages to check a tool for quickly constructing web pages to see how components interact http://stevesouders.com/cuzillion/
  • 39.
  • 40. 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/
  • 41. Measuring Performance Episodes dev box synthetic testing bucket testing real user data Hammerhead
  • 42.
  • 43. Hammerhead moving 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 data load time measurement modal cache clearing combine with bandwidth throttler
  • 44.
  • 45. SpriteMe don't say "bite me!#*", say "SpriteMe!" create sprites with ease http://spriteme.org/ bookmarklet sprite generator: coolRunnings by Jared Hirsch http://jaredhirsch.com/coolrunnings/about/ http://bitbucket.org/jared/coolrunnings/
  • 46. takeaways focus on the frontend run YSlow (http://developer.yahoo.com/yslow) and Page Speed! (http://code.google.com/speed/page-speed/) speed matters
  • 47. Bing: Yahoo: Google: AOL: Shopzilla: impact on revenue +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 1 http://en.oreilly.com/velocity2009/public/schedule/detail/8523 2 http://www.slideshare.net/stoyan/yslow-20-presentation 3 http://en.oreilly.com/velocity2009/public/schedule/detail/7579 4 http://en.oreilly.com/velocity2009/public/schedule/detail/7709
  • 48. cost savings hardware – reduced load Shopzilla – 50% fewer servers bandwidth – reduced response size http://billwscott.com/share/presentations/2008/stanford/HPWP-RealWorld.pdf
  • 49. if you want better user experience more revenue reduced operating costs the strategy is clear Even Faster Web Sites
  • 50. 1:00 – book signing at Barnes & Noble 3:20 – free consulting at Google booth Steve Souders souders@google.com http://stevesouders.com/docs/oscon-20090722.ppt

Hinweis der Redaktion

  1. cc: http://www.flickr.com/photos/rollerfan/2868949733/
  2. Data source: Steve Souders Tested on IE6 on Comcast cable modem (~5 mbps) medium powered PC, April 2008.
  3. Ten top sites according to Alexa.com. Data source: Steve Souders Tested on IE6 on Comcast cable modem (~5 mbps) medium powered PC, April 2008. http://www.aol.com/ http://www.ebay.com/ http://www.facebook.com/ http://www.google.com/search?hl=en&amp;q=flowers http://www.myspace.com/ http://www.msn.com/ http://search.live.com/results.aspx?q=flowers&amp;mkt=en-us&amp;scope=&amp;FORM=LIVSOP http://en.wikipedia.org/wiki/Flowers http://www.yahoo.com/ http://www.youtube.com/ For Google and Live Search there are so few components (2-4) and they&amp;apos;re mostly cacheable so the HTML document is a bigger percentage.
  4. If you could cut performance in half, FE changes would be 40-45%, while BE would be only 5-10%. BE changes are typically more complex: rearchitecture, optimize code, add/modify hw, distribute databases, etc. FE is simpler: change web server config, place scripts and stylesheets differently in the page, combine requests, etc. I’ve worked with dev teams to cut response times on 50 properties, often by 25% or more. And feedback from other companies is similar. Permission to use photo given by Technicolor: http://flickr.com/photos/technicolor/44988148/
  5. photo courtesy of Vicki &amp; Chuck Rogers: http://www.flickr.com/photos/two-wrongs/205467442/
  6. Data Source: Steve Souders aol76% ebay45% facebook41% google42% live search9% msn37% myspace37% yahoo45% youtube60% wikipedia26% average42%
  7. Of the ten top sites, MSN.com (Script DOM Element), Live Search (Script in Iframe), and Yahoo (Script DOM Element) use advanced script loading techniques.
  8. All of these allow for parallel downloads, but none of them allow for parallel JS execution – that&amp;apos;s not possible (currently, WebKit is doing some stuff on that).
  9. Audio (IE &amp;quot;click&amp;quot;) is another busy indicator. Delayed rendering and delayed onload (&amp;quot;done&amp;quot;) are other busy indicators. Sometimes busy indicators are bad, sometimes good.
  10. Data source: Steve Souders Audio (IE &amp;quot;click&amp;quot;) is another busy indicator. Delayed rendering and delayed onload (&amp;quot;done&amp;quot;) are other busy indicators. Sometimes busy indicators are bad, sometimes good.
  11. Data source: Steve Souders
  12. I&amp;apos;ll do JavaScript and PHP implementations of this logic soon.
  13. Permission to use photo given by Reciprocity: http://flickr.com/photos/alanjaras/76000107/
  14. Data source: Steve Souders
  15. Newer browsers (IE8, Saf4, Chr2) work, but mainstream browsers need a workaround.
  16. putting code in the script block doesn&amp;apos;t work in any browser; you have to add stuff to the external script this doesn&amp;apos;t load asynchronously
  17. Newer browsers (IE8, Saf4, Chr2) work, but mainstream browsers need a workaround.
  18. Newer browsers (IE8, Saf4, Chr2) work, but mainstream browsers need a workaround.
  19. loadInterval is 420 ms
  20. 72 years = 2,270,592,000 seconds = 500ms * 4.4B page views
  21. 72 years = 2,270,592,000 seconds = 500ms * 4.4B page views
  22. 72 years = 2,270,592,000 seconds = 500ms * 4.4B page views
  23. 72 years = 2,270,592,000 seconds = 500ms * 4.4B page views
  24. &amp;quot;thank you&amp;quot; by nj dodge: http://flickr.com/photos/nj_dodge/187190601/