Improving Netflix Performance
Bill Scott
Director, UI Engineering Netflix
June 23, 2008
1
Improving Netflix Performance Bill Scott Director, UI Engineering - - PowerPoint PPT Presentation
Improving Netflix Performance Bill Scott Director, UI Engineering Netflix June 23, 2008 1 The Plan Accurately measure the full user experience performance Prior Page Request Response Page Web App Incrementally improve site
Bill Scott
Director, UI Engineering Netflix
June 23, 2008
1
The Plan
Prior Page
Page
Response
Request
Web App
2
Measuring: User Experience Performance Tracing
Prior Page Page Response Request Web App
3
Measuring: User Experience Performance Tracing
Prior Page Page Response Request Web App
G F A D
3
Measuring: User Experience Performance Tracing
Prior Page Page Response Request Web App
G F A D C B E
3
Measuring: User Experience Performance Tracing
Prior Page Page Response Request Web App
js:unload() js:onload() <HEAD> getTime() getTime() </BODY> service() after customer acquired emits <HEAD> emits </BODY>G F A D C B E
3
Measuring: User Experience Performance Tracing
Prior Page Page Response Request Web App
js:unload() js:onload() <HEAD> getTime() getTime() </BODY> service() after customer acquired emits <HEAD> emits </BODY>G F A D C B E
browser render time css loading, asset loading, javascript loadingServer Response Client Render After HTML body Server to Client Render (G-D) + (C-B) Prior Page till Client Rendered
3
Measuring: User Experience Performance Tracing
Prior Page Page Response Request Web App
js:unload() js:onload() <HEAD> getTime() getTime() </BODY> service() after customer acquired emits <HEAD> emits </BODY>G F A D C B E
HTTP request/ response for HTML page
browser render time css loading, asset loading, javascript loadingServer Response Client Render After HTML body Server to Client Render (G-D) + (C-B) Prior Page till Client Rendered
3
Measuring: User Experience Performance Tracing
Prior Page Page Response Request Web App
js:unload() js:onload() <HEAD> getTime() getTime() </BODY> service() after customer acquired emits <HEAD> emits </BODY>G F A D C B E
HTTP request/ responses for CSS, JS, images, etc. HTTP request/ response for HTML page
browser render time css loading, asset loading, javascript loadingServer Response Client Render After HTML body Server to Client Render (G-D) + (C-B) Prior Page till Client Rendered
3
Measuring: User Experience Performance Tracing
Prior Page Page Response Request Web App
js:unload() js:onload() <HEAD> getTime() getTime() </BODY> service() after customer acquired emits <HEAD> emits </BODY>G F A D C B E
HTTP request/ responses for CSS, JS, images, etc. HTTP request/ response for HTML page
browser render time css loading, asset loading, javascript loadingServer Response Client Render After HTML body Server to Client Render (G-D) + (C-B) Prior Page till Client Rendered
Database
3
Measuring: Firebug Panel
for a given page being measured
4
Improve Performance
5
Improve Performance: Analysis of Queue
Where did the time go (180 item Q) Where did the time go (180 item Q) Images 57.1% 3873 2500 Images 31.7% 3873 Javascript 7.3% 493 300 Star bars 25.4% 1723 CSS 1.3% 91 Javascript 7.3% 493 HTML 23.9% 1624 CSS 1.3% 91 Redirect 5.2% 356 HTML 23.9% 1624 Other 5.1% 346 Redirect 5.2% 356 6783 Other 5.1% 346 6783 Everthing Else 74.6% Star bars 25.4% 1723 Everthing Else 74.6%
58% 7% 1% 24% 5% 5%Images Javascript CSS HTML Redirect Other
6
Improve Performance: Analysis of Queue
Lots of Time for Star Bars 75% 25% Everthing Else Star bars 33% 25% 7% 1% 24% 5% 5% Images Star bars Javascript CSS HTML Redirect Other7
Improve Performance: Incrementally
8
Improve Performance: Incrementally
8
Improving Performance: Gzip
9
Improving Performance: Gzip
9
Improving Performance: Gzip
9
Improving Performance: Gzip
9
Queue Refactor
10
Interesting Browser Stats (from the Queue)
11
Lessons
Yahoo! recommendations are a sure bet (far futures, gzip, etag, etc.)
12
Announcement: Jiffy Firebug Extension
view of your measurement data
13