Proactive Web Performance Optimization.(Marcel Duran)
Transcript of Proactive Web Performance Optimization.(Marcel Duran)
![Page 1: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/1.jpg)
Proactive WPO@marcelduran
![Page 2: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/2.jpg)
about:me
![Page 3: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/3.jpg)
I'm not here
![Page 4: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/4.jpg)
I'm from here on
![Page 5: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/5.jpg)
V is for Vigilante
http://usa-moscow.blogspot.com/2010/09/more-hot-water.html
![Page 6: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/6.jpg)
Performance Radarhttp://www.flickr.com/photos/benfrantzdale/1056282822/
![Page 7: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/7.jpg)
“if you can’t measure it, you can’t improve it”
— Lord Kelvin
![Page 8: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/8.jpg)
worst case: no instrumentshttp://www.flickr.com/photos/timothyhackworth/753783003/
![Page 9: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/9.jpg)
build test
deploy
users
review
reactive
![Page 10: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/10.jpg)
better case: RUMhttp://www.flickr.com/photos/pj/6116201547/
![Page 11: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/11.jpg)
Real User Measurementshttp://lognormal.com/features/
github.com//boomerang
lognormal
![Page 12: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/12.jpg)
build test
deploy
users
monitor
reactive
![Page 13: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/13.jpg)
much better: RUM + YSlow (CI)http://donq.com/recipes/rum-sour/
+
![Page 14: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/14.jpg)
build test
deploymonitor
users
wpo
proactive
![Page 15: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/15.jpg)
![Page 16: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/16.jpg)
jul/07
+183k users (formerly +210k)+3.3mi downloadsTop 25 2bi add-ons downloaded
![Page 17: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/17.jpg)
YSlow manually
![Page 18: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/18.jpg)
YSlow automationhttp://www.flickr.com/photos/snazzyguy/3381047684/
![Page 19: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/19.jpg)
+
![Page 20: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/20.jpg)
jul/07 mar/11
~160k users (formerly 145k)
![Page 21: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/21.jpg)
jul/07 jun/11mar/11
![Page 22: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/22.jpg)
jul/07 jun/11mar/11 aug/11
~80k users
![Page 23: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/23.jpg)
jul/07 jun/11mar/11 aug/11
oct/11
![Page 24: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/24.jpg)
jul/07 jun/11mar/11 aug/11
oct/11 dec/11
![Page 25: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/25.jpg)
jul/07 jun/11mar/11 aug/11
oct/11 feb/12dec/11
first 24 hours437
37so far
88076
![Page 26: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/26.jpg)
5th anniversaryhttp://www.flickr.com/photos/spool32/5045502202
![Page 27: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/27.jpg)
jul/07 jun/11mar/11 aug/11
oct/11 feb/12dec/11 apr/12
![Page 28: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/28.jpg)
jul/07 jun/11mar/11 aug/11
oct/11 feb/12dec/11 apr/12 jun/12
![Page 29: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/29.jpg)
YSlow Command Line
![Page 30: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/30.jpg)
$ npm install yslow -g
![Page 31: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/31.jpg)
$ yslow --help Usage: yslow [options] [file ...]
Options:
-h, --help output usage information -V, --version output the version number -i, --info <info> specify the information to display/log
(basic|grade|stats|comps|all) [basic] -f, --format <format> specify the output results format
(json|xml|plain) [json] -r, --ruleset <ruleset> specify the YSlow performance ruleset to be used
(ydefault|yslow1|yblog) [ydefault] -b, --beacon <url> specify an URL to log the results -d, --dict include dictionary of results fields -v, --verbose output beacon response information
Examples:
yslow file.har yslow -i grade -f xml -b http://server.com/beacon file1.har file2.har yslow -info all --format plain /tmp/*.har yslow -i basic --rulseset yslow1 -d < file.har curl example.com/file.har | yslow -i grade -b http://server.com/beacon -v
![Page 32: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/32.jpg)
HAR file
{ "log": { "version": "1.1", "pages": [ { "startedDateTime": "2012-08-16T18:27:29.000+00:00", "id": "page_1_0", "pageTimings": { "onLoad": 13701, . . .
![Page 33: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/33.jpg)
$ yslow file.har$ yslow file1.har file2.har file3.har$ yslow my-har-files/*.har$ yslow < file.har$ curl http://foo.com/file.har | yslow
![Page 34: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/34.jpg)
-f, --format <format> (json|xml|plain)
![Page 35: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/35.jpg)
$ yslow foo.com.har{ w: 98725, o: 89, u: 'foo.com', r: 9, i: 'ydefault', lt: 981 }
$ yslow --format plain foo.com.harsize: 96.4K (98725 bytes)overall score: B (89)url: http://www.foo.com/# of requests: 9ruleset: ydefaultpage load time: 981
$ yslow --format xml foo.com.har<?xml version="1.0" encoding="UTF-8"?><results> <w>98725</w> <o>89</o> <u>http://www.foo.com/</u> <r>9</r> <i>ydefault</i> <lt>981</lt></results>
![Page 36: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/36.jpg)
-i, --info <info> (basic|grade|stats|comps|all)
![Page 37: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/37.jpg)
$ yslow foo.com.har{ w: 98725, o: 89, u: 'foo.com', r: 9, i: 'ydefault', lt: 981 }
$ yslow --info grade foo.com.har{ w: 98725, o: 89, u: 'foo.com', r: 9, i: 'ydefault', lt: 981, g: { ynumreq: { score: 92, components: [] }, ycdn: { score: 80, components: ['a.com', 'b.com'] }, ... yfavicon: { score: 100, components: [] } }}
$ yslow --info stats foo.com.har{ w: 98725, o: 89, u: 'foo.com', r: 9, i: 'ydefault', lt: 981, stats: { doc: { r: 1, w: 18419 }, css: { r: 2, w: 20951 }, image: { r: 3, w: 29553 }, js: { r: 2, w: 10852 }, cssimage: { r: 1, w: 18950 } }}
![Page 38: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/38.jpg)
$ yslow --info comps foo.com.har{ w: 98725, o: 89, u: 'foo.com', r: 9, i: 'ydefault', lt: 981, comps: [ {type:'doc', url:'foo.com', size:1841, resp:41, gzip:613}, {type:'css', url:'bar.css', size:3062, resp:98, gzip:989}, ... {type:'js', url:'baz.js', size:2445, resp:86, gzip:834} ]}
$ yslow --info all foo.com.har{ w: 98725, o: 89, u: 'foo.com', r: 9, i: 'ydefault', lt: 981, g: { ynumreq: { score: 92, components: [] }, ... } stats: { doc: { r: 1, w: 18419 }, css: { r: 2, w: 20951 }, ... } comps: [ {type:'doc', url:'foo.com', size:1841, resp:41, gzip:613}, ... ]}
![Page 39: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/39.jpg)
-d, --dict
![Page 40: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/40.jpg)
$ yslow -i basic --dict foo.com.har{ w: 98725, o: 89, u: 'foo.com', r: 9, i: 'ydefault', lt: 981, dictionary: { w: 'size', o: 'overall score', u: 'url', r: 'total number of requests', i: 'id of the ruleset used', lt: 'page load time', grades: '100 >= A >= 90 > B >= 80 > C >= 70 > D >= 60 > E >= 50 > F >= 0 > N/A = -1' }}
![Page 41: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/41.jpg)
-r, --ruleset <ruleset>(ydefault | yslow1 | yblog)
![Page 42: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/42.jpg)
Minimize HTTP RequestsUse a Content Delivery NetworkAvoid empty src or hrefAdd an Expires or a Cache-Control HeaderGzip ComponentsPut StyleSheets at the TopPut Scripts at the BottomAvoid CSS ExpressionsMake JavaScript and CSS ExternalReduce DNS LookupsMinify JavaScript and CSSAvoid RedirectsRemove Duplicate ScriptsConfigure ETagsMake AJAX CacheableUse GET for AJAX RequestsReduce the Number of DOM ElementsNo 404sReduce Cookie SizeUse Cookie-Free Domains for ComponentsAvoid FiltersDo Not Scale Images in HTMLMake favicon.ico Small and Cacheable
ydefault(aka YSlow V2)
23 rules
![Page 43: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/43.jpg)
Minimize HTTP RequestsUse a Content Delivery NetworkAdd an Expires or a Cache-Control HeaderGzip ComponentsPut StyleSheets at the TopPut Scripts at the BottomAvoid CSS ExpressionsMake JavaScript and CSS ExternalReduce DNS LookupsMinify JavaScript and CSSAvoid RedirectsRemove Duplicate ScriptsConfigure ETags
yslow1(aka YSlow V1/classic)
13 rules
![Page 44: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/44.jpg)
Minimize HTTP RequestsAvoid empty src or hrefGzip ComponentsPut StyleSheets at the TopPut Scripts at the BottomAvoid CSS ExpressionsReduce DNS LookupsMinify JavaScript and CSSAvoid RedirectsRemove Duplicate ScriptsReduce the Number of DOM ElementsNo 404sAvoid FiltersDo Not Scale Images in HTMLMake favicon.ico Small and Cacheable
yblog(aka small site/blog)
15 rules
![Page 45: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/45.jpg)
-b, --beacon <url>-v, --verbose
![Page 46: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/46.jpg)
$ yslow --beacon http://server.com/ foo.com.har{ w: 98725, o: 89, u: 'foo.com', r: 9, i: 'ydefault', lt: 981 }
$ yslow -b http://server.com/ --verbose foo.com.har{ w: 98725, o: 89, u: 'foo.com', r: 9, i: 'ydefault', lt: 981, beacon: { status: 200, headers: { "content-type": 'text/html; charset=utf-8', "date": 'Thu, 02 Aug 2012 17:23:33 GMT', "content-length": '3', "connection": 'close' }, body: 'ok\n' }}
![Page 47: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/47.jpg)
before after
Case: Y! Continuous Deployment
![Page 48: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/48.jpg)
before after
No Performance Test Suite
![Page 49: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/49.jpg)
BOO!
YSlow for PhantomJShttp://www.flickr.com/photos/pedroferrer/3615212504
![Page 50: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/50.jpg)
$ phantomjs yslow.js http://yslow.org
![Page 51: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/51.jpg)
-f, --format <format>
( json | xml | plain | tap | junit )
![Page 52: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/52.jpg)
$ phantomjs yslow.js -i basic --format tap http://yslow.org
TAP version 131..1ok 1 B (88) overall score
$ phantomjs yslow.js -i grade --format tap http://yslow.org
TAP version 131..24ok 1 B (88) overall scorenot ok 2 C (72) ynumreq: Make fewer HTTP requests --- message: This page has 7 external Javascript scripts ...ok 3 C (70) ycdn: Use a Content Delivery Network (CDN) --- message: There are 3 static components not on CDN. offenders: - "yslow.org: 1 component, 8.0K (8.0K GZip)" - "fonts.googleapis.com: 1 component, 1.0K (1.0K GZip)" - "widgets.twimg.com: 1 component, 0.8K" ...ok 4 A (100) yemptysrc: Avoid empty src or hrefnot ok 5 F (12) yexpires: Add Expires headers --- message: There are 5 static components without a far-future expiration date. offenders: - "http://yslow.org/stylesheets/styles-min.css"...
![Page 53: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/53.jpg)
$ phantomjs yslow.js -i basic --format junit http://yslow.org
<?xml version="1.0" encoding="UTF-8" ?><testsuites> <testsuite name="YSlow" tests="1" failures="1"> <testcase name="overall score" status="C (79)"> <failure/> </testcase> </testsuite></testsuites>
![Page 54: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/54.jpg)
-t, --threshold <score>( [0-100] | [A-F] | {json} )
default: 80
![Page 55: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/55.jpg)
-t B-t 75-t '{"overall": "C", "ycdn": "F"}'-t '{"ycdn": "F", "yexpires": 75}'
![Page 56: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/56.jpg)
-u, --ua "<user agent>"
e.g: -u "Mozilla/4.0 (compatible; MSIE 6)"
![Page 57: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/57.jpg)
-vp, --viewport <WxH>
e.g: -vp 640x960
![Page 58: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/58.jpg)
-ch, --headers <JSON>
e.g: -ch '{"Cookie": "foo=bar"}'
![Page 59: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/59.jpg)
-c, --console <level>(0: none | 1: msg | 2: msg+line+source)
![Page 60: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/60.jpg)
![Page 61: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/61.jpg)
![Page 62: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/62.jpg)
![Page 63: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/63.jpg)
YSlow + CI = BFF
![Page 64: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/64.jpg)
node.js server
![Page 65: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/65.jpg)
local HAR file uploadcurl http://yslow.nodester.com/ -F '[email protected]'
remote HAR filecurl 'http://yslow.nodester.com/?har=http://server.com/foo.har'
HAR {json} stringcurl http://yslow.nodester.com/ -d 'har={"log":{"version":"1.1", ... }}'
![Page 66: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/66.jpg)
+ +
![Page 67: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/67.jpg)
curl "http://yslow.nodester.com/?har=http%3A%2F%2Fwww.webpagetest.org%2Fexport.php%3Ftest%3D120627_MC_5WD
&i=grade&b=http%3A%2F%2Fwww.showslow.com%2Fbeacon%2Fyslow%2F&v=1"
![Page 68: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/68.jpg)
WPO at Twitter
![Page 69: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/69.jpg)
High Performance
A A A A ...
![Page 70: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/70.jpg)
best: RUM + (YSlow + WPT) CIhttp://donq.com/recipes/rum-sour/
++
![Page 71: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/71.jpg)
build test
deploy
monitor
wpo
perf
users
proactive
![Page 72: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/72.jpg)
performance boxes
branch A branch Bprod
...
![Page 73: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/73.jpg)
branches comp
X+100ms
branch A
X-50ms
branch B
Xms
prodvs
![Page 74: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/74.jpg)
++
+vs
![Page 75: Proactive Web Performance Optimization.(Marcel Duran)](https://reader035.fdocuments.us/reader035/viewer/2022062703/55529a7db4c905e8128b4e9b/html5/thumbnails/75.jpg)
/getyslow
@yslowyslow.org
slides icons: http://www.iconfinder.com/
Cпасибо