DIY Synthetic:
Private WebPagetest Magic
Velocity NY 2013
Jonathan Klein
@jonathanklein
Wednesday, October 16, 13
Slides, Links
jkle.in/wpt

Wednesday, October 16, 13
About Me

Wednesday, October 16, 13
About Me
• Performance Engineer At Etsy

Wednesday, October 16, 13
About Me
• Performance Engineer At Etsy
• I write the Etsy Site Performance Reports

Wednesday, October 16, 13
About Me
• Performance Engineer At Etsy
• I write the Etsy Site Performance Reports
• Organize Boston Web Perf Meetup Grou...
Etsy Stats

Wednesday, October 16, 13
Etsy Stats
• World’s largest handmade marketplace

Wednesday, October 16, 13
Etsy Stats
• World’s largest handmade marketplace
• 1.5 billion page views/month

Wednesday, October 16, 13
Etsy Stats
• World’s largest handmade marketplace
• 1.5 billion page views/month
• Almost $1B in sales last year

Wednesda...
+160k to a page =
+12% bounce rate
on mobile
Wednesday, October 16, 13
Synthetic Monitoring

Wednesday, October 16, 13
Wednesday, October 16, 13
Synthetic Monitoring
Browser Instrumentation

Navigation Timing API

Consistent trending
over time

Highly variable

Large...
Synthetic Monitoring
Browser Instrumentation

Navigation Timing API

Consistent trending
over time

Highly variable

Large...
Synthetic Monitoring
Browser Instrumentation

Navigation Timing API

Consistent trending
over time

Highly variable

Large...
Synthetic Monitoring
Browser Instrumentation

Navigation Timing API

Consistent trending
over time

Highly variable

Large...
Synthetic Monitoring
Browser Instrumentation

Navigation Timing API

Consistent trending
over time

Highly variable

Large...
Synthetic Monitoring
Browser Instrumentation

Navigation Timing API

Consistent trending
over time

Highly variable

Large...
Wednesday, October 16, 13
$$$$

Wednesday, October 16, 13
Wednesday, October 16, 13
Background

Wednesday, October 16, 13
Wednesday, October 16, 13
Wednesday, October 16, 13
Wednesday, October 16, 13
EC2 Test Agents

Wednesday, October 16, 13
Wednesday, October 16, 13
No Built-in Automation

Wednesday, October 16, 13
Wednesday, October 16, 13
Wednesday, October 16, 13
wpt-script

Wednesday, October 16, 13
Wednesday, October 16, 13
Motivation

Wednesday, October 16, 13
Why We Use It

Wednesday, October 16, 13
Why We Use It
• Wanted long term synthetic trending

Wednesday, October 16, 13
Why We Use It
• Wanted long term synthetic trending
• Automated tests

Wednesday, October 16, 13
Why We Use It
• Wanted long term synthetic trending
• Automated tests
• More control

Wednesday, October 16, 13
Why We Use It
• Wanted long term synthetic trending
• Automated tests
• More control
• Low cost

Wednesday, October 16, 13
Easy Configuration

Wednesday, October 16, 13
{
    "server": "http://www.yourwptinstall.com",
    "pending_dir": "private",
    "locations": ["US_East_wptdriver:Firefo...
{
    "server": "http://www.yourwptinstall.com",
    "pending_dir": "private",
    "locations": ["US_East_wptdriver:Firefo...
{
    "server": "http://www.yourwptinstall.com",
    "pending_dir": "private",
    "locations": ["US_East_wptdriver:Firefo...
{
    "server": "http://www.yourwptinstall.com",
    "pending_dir": "private",
    "locations": ["US_East_wptdriver:Firefo...
{
    "server": "http://www.yourwptinstall.com",
    "pending_dir": "private",
    "locations": ["US_East_wptdriver:Firefo...
# Run Test
*/25 * * * * php run.php

Wednesday, October 16, 13
# Run Test
*/25 * * * * php run.php -c foo.conf

Wednesday, October 16, 13
# Run Test
*/25 * * * * php run.php -c foo.conf
# Get Results
* * * * * php get_results.php

Wednesday, October 16, 13
Advanced Features

Wednesday, October 16, 13
{
    "server": "http://example.com",
    "pending_dir": "private",
    "locations": ["US_East_wptdriver:Firefox", "US_Eas...
{
    "server": "http://example.com",
    "pending_dir": "private",
    "locations": ["US_East_wptdriver:Firefox", "US_Eas...
foreach ($prepends as $prepend) {
if (file_exists($scripts_dir . $prepend)) {
$script .= file_get_contents($scripts_dir . ...
bypass_cdn.txt
setDns
setDns
setDns
setDns
setDns
setDns
setDns
setDns
setDns

Wednesday, October 16, 13

site.etsystatic....
Gathering Results

Wednesday, October 16, 13
<?php
// Splunk
$splunkLogger = new SplunkLogger($config['splunkLog'], $logging_ns);
foreach ($results as $result) {
$splu...
Wednesday, October 16, 13
Wednesday, October 16, 13
Wednesday, October 16, 13
https://sites.google.com/a/webpagetest.org/docs/using-webpagetest/metrics
Wednesday, October 16, 13
Wednesday, October 16, 13
Wednesday, October 16, 13
Wednesday, October 16, 13
Disadvantages vs. Paid Tools

Wednesday, October 16, 13
Disadvantages vs. Paid Tools
• Harder to set up/maintain

Wednesday, October 16, 13
Disadvantages vs. Paid Tools
• Harder to set up/maintain
• Functionality

Wednesday, October 16, 13
Disadvantages vs. Paid Tools
• Harder to set up/maintain
• Functionality
• Regions

Wednesday, October 16, 13
Disadvantages vs. Paid Tools
• Harder to set up/maintain
• Functionality
• Regions
• Full page oriented

Wednesday, Octobe...
Disadvantages vs. Paid Tools
• Harder to set up/maintain
• Functionality
• Regions
• Full page oriented
• Less consistent
...
Advantages vs. Paid Tools

Wednesday, October 16, 13
Advantages vs. Paid Tools
• Cost

Wednesday, October 16, 13
Advantages vs. Paid Tools
• Cost
• Flexibility

Wednesday, October 16, 13
Advantages vs. Paid Tools
• Cost
• Flexibility
• People know the tool

Wednesday, October 16, 13
Advantages vs. Paid Tools
• Cost
• Flexibility
• People know the tool
• Multi-page flows

Wednesday, October 16, 13
Advantages vs. Paid Tools
• Cost
• Flexibility
• People know the tool
• Multi-page flows
• Scripting

Wednesday, October 1...
Our Use Cases

Wednesday, October 16, 13
WebPagetest

Wednesday, October 16, 13

Catchpoint
WebPagetest
• Multi-page flows

Wednesday, October 16, 13

Catchpoint
WebPagetest
• Multi-page flows
• Scripted tests

Wednesday, October 16, 13

Catchpoint
WebPagetest
• Multi-page flows
• Scripted tests
• High volume testing

Wednesday, October 16, 13

Catchpoint
WebPagetest
• Multi-page flows
• Scripted tests
• High volume testing
• Ad-hoc tests

Wednesday, October 16, 13

Catchpoin...
WebPagetest

Catchpoint

• Multi-page flows

• DNS

• Scripted tests
• High volume testing
• Ad-hoc tests

Wednesday, Octo...
WebPagetest

Catchpoint

• Multi-page flows

• DNS

• Scripted tests

• API

• High volume testing
• Ad-hoc tests

Wednesd...
WebPagetest

Catchpoint

• Multi-page flows

• DNS

• Scripted tests

• API

• High volume testing

• Single Object Tests
...
WebPagetest

Catchpoint

• Multi-page flows

• DNS

• Scripted tests

• API

• High volume testing

• Single Object Tests
...
WebPagetest

Catchpoint

• Multi-page flows

• DNS

• Scripted tests

• API

• High volume testing

• Single Object Tests
...
Future Work

Wednesday, October 16, 13
Improving the Process

Wednesday, October 16, 13
Improving the Process
• Manage disk space

Wednesday, October 16, 13
Improving the Process
• Manage disk space
• Multiple regions

Wednesday, October 16, 13
Improving the Process
• Manage disk space
• Multiple regions
• More canned scripts

Wednesday, October 16, 13
Improving the Process
• Manage disk space
• Multiple regions
• More canned scripts
• Automate upgrades

Wednesday, October...
Leveraging WebPagetest

Wednesday, October 16, 13
Leveraging WebPagetest
• Front-end SPOF

Wednesday, October 16, 13
Leveraging WebPagetest
• Front-end SPOF
• User Timings (AFT)

Wednesday, October 16, 13
Leveraging WebPagetest
• Front-end SPOF
• User Timings (AFT)
• Speed Index

Wednesday, October 16, 13
Wednesday, October 16, 13
Improving
WebPagetest

Wednesday, October 16, 13
WebPagetest + Vagrant

Wednesday, October 16, 13
WebPagetest + Vagrant
• Install VirtualBox

Wednesday, October 16, 13
WebPagetest + Vagrant
• Install VirtualBox
• Install Vagrant

Wednesday, October 16, 13
WebPagetest + Vagrant
• Install VirtualBox
• Install Vagrant
• https://gist.github.com/jklein/6992296

Wednesday, October ...
WebPagetest + Vagrant
• Install VirtualBox
• Install Vagrant
• https://gist.github.com/jklein/6992296
•vagrant up

Wednesd...
WebPagetest + Vagrant
• Install VirtualBox
• Install Vagrant
• https://gist.github.com/jklein/6992296
•vagrant up
• http:/...
Wednesday, October 16, 13
800MB

Wednesday, October 16, 13
webpagetest-api

Wednesday, October 16, 13
Wednesday, October 16, 13
Both Are Good Options

Wednesday, October 16, 13
Results > Tools

Wednesday, October 16, 13
Thanks!

Wednesday, October 16, 13
Get in Touch
@jonathanklein
jonathan@etsy.com
www.etsy.com/careers
Wednesday, October 16, 13
Upcoming SlideShare
Loading in...5
×

DIY Synthetic: Private WebPagetest Magic

2,025
-1

Published on

I gave this talk at Velocity NY 2013, and it covers the installation and use of a private WebPagetest instance, as well as the open source tool wpt-script which Etsy built.

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,025
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
28
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

DIY Synthetic: Private WebPagetest Magic

  1. 1. DIY Synthetic: Private WebPagetest Magic Velocity NY 2013 Jonathan Klein @jonathanklein Wednesday, October 16, 13
  2. 2. Slides, Links jkle.in/wpt Wednesday, October 16, 13
  3. 3. About Me Wednesday, October 16, 13
  4. 4. About Me • Performance Engineer At Etsy Wednesday, October 16, 13
  5. 5. About Me • Performance Engineer At Etsy • I write the Etsy Site Performance Reports Wednesday, October 16, 13
  6. 6. About Me • Performance Engineer At Etsy • I write the Etsy Site Performance Reports • Organize Boston Web Perf Meetup Group Wednesday, October 16, 13
  7. 7. Etsy Stats Wednesday, October 16, 13
  8. 8. Etsy Stats • World’s largest handmade marketplace Wednesday, October 16, 13
  9. 9. Etsy Stats • World’s largest handmade marketplace • 1.5 billion page views/month Wednesday, October 16, 13
  10. 10. Etsy Stats • World’s largest handmade marketplace • 1.5 billion page views/month • Almost $1B in sales last year Wednesday, October 16, 13
  11. 11. +160k to a page = +12% bounce rate on mobile Wednesday, October 16, 13
  12. 12. Synthetic Monitoring Wednesday, October 16, 13
  13. 13. Wednesday, October 16, 13
  14. 14. Synthetic Monitoring Browser Instrumentation Navigation Timing API Consistent trending over time Highly variable Largely in your control Last mile difficulties Great for identifying regressions Great for comparing across geographies/browsers Not super realistic Wednesday, October 16, 13 Real User Monitoring “Real User Monitoring”
  15. 15. Synthetic Monitoring Browser Instrumentation Navigation Timing API Consistent trending over time Highly variable Largely in your control Last mile difficulties Great for identifying regressions Great for comparing across geographies/browsers Not super realistic Wednesday, October 16, 13 Real User Monitoring “Real User Monitoring”
  16. 16. Synthetic Monitoring Browser Instrumentation Navigation Timing API Consistent trending over time Highly variable Largely in your control Last mile difficulties Great for identifying regressions Great for comparing across geographies/browsers Not super realistic Wednesday, October 16, 13 Real User Monitoring “Real User Monitoring”
  17. 17. Synthetic Monitoring Browser Instrumentation Navigation Timing API Consistent trending over time Highly variable Largely in your control Last mile difficulties Great for identifying regressions Great for comparing across geographies/browsers Not super realistic Wednesday, October 16, 13 Real User Monitoring “Real User Monitoring”
  18. 18. Synthetic Monitoring Browser Instrumentation Navigation Timing API Consistent trending over time Highly variable Largely in your control Last mile difficulties Great for identifying regressions Great for comparing across geographies/browsers Not super realistic Wednesday, October 16, 13 Real User Monitoring “Real User Monitoring”
  19. 19. Synthetic Monitoring Browser Instrumentation Navigation Timing API Consistent trending over time Highly variable Largely in your control Last mile difficulties Great for identifying regressions Great for comparing across geographies/browsers Not super realistic Wednesday, October 16, 13 Real User Monitoring “Real User Monitoring”
  20. 20. Wednesday, October 16, 13
  21. 21. $$$$ Wednesday, October 16, 13
  22. 22. Wednesday, October 16, 13
  23. 23. Background Wednesday, October 16, 13
  24. 24. Wednesday, October 16, 13
  25. 25. Wednesday, October 16, 13
  26. 26. Wednesday, October 16, 13
  27. 27. EC2 Test Agents Wednesday, October 16, 13
  28. 28. Wednesday, October 16, 13
  29. 29. No Built-in Automation Wednesday, October 16, 13
  30. 30. Wednesday, October 16, 13
  31. 31. Wednesday, October 16, 13
  32. 32. wpt-script Wednesday, October 16, 13
  33. 33. Wednesday, October 16, 13
  34. 34. Motivation Wednesday, October 16, 13
  35. 35. Why We Use It Wednesday, October 16, 13
  36. 36. Why We Use It • Wanted long term synthetic trending Wednesday, October 16, 13
  37. 37. Why We Use It • Wanted long term synthetic trending • Automated tests Wednesday, October 16, 13
  38. 38. Why We Use It • Wanted long term synthetic trending • Automated tests • More control Wednesday, October 16, 13
  39. 39. Why We Use It • Wanted long term synthetic trending • Automated tests • More control • Low cost Wednesday, October 16, 13
  40. 40. Easy Configuration Wednesday, October 16, 13
  41. 41. {     "server": "http://www.yourwptinstall.com",     "pending_dir": "private",     "locations": ["US_East_wptdriver:Firefox", "US_East_wptdriver:Chrome"],     "urls": {         "label": "http://www.example.com",         "other_label": "http://www.anotherexample.com"     },     "graphite": "graphite.example.com",     "logging_ns": "webpagetest.private",     "splunkLog": "/var/log/webpagetest/results.log" } Wednesday, October 16, 13
  42. 42. {     "server": "http://www.yourwptinstall.com",     "pending_dir": "private",     "locations": ["US_East_wptdriver:Firefox", "US_East_wptdriver:Chrome"],     "urls": {         "label": "http://www.example.com",         "other_label": "http://www.anotherexample.com"     },     "graphite": "graphite.example.com",     "logging_ns": "webpagetest.private",     "splunkLog": "/var/log/webpagetest/results.log" } Wednesday, October 16, 13
  43. 43. {     "server": "http://www.yourwptinstall.com",     "pending_dir": "private",     "locations": ["US_East_wptdriver:Firefox", "US_East_wptdriver:Chrome"],     "urls": {         "label": "http://www.example.com",         "other_label": "http://www.anotherexample.com"     },     "graphite": "graphite.example.com",     "logging_ns": "webpagetest.private",     "splunkLog": "/var/log/webpagetest/results.log" } Wednesday, October 16, 13
  44. 44. {     "server": "http://www.yourwptinstall.com",     "pending_dir": "private",     "locations": ["US_East_wptdriver:Firefox", "US_East_wptdriver:Chrome"],     "urls": {         "label": "http://www.example.com",         "other_label": "http://www.anotherexample.com"     },     "graphite": "graphite.example.com",     "logging_ns": "webpagetest.private",     "splunkLog": "/var/log/webpagetest/results.log" } Wednesday, October 16, 13
  45. 45. {     "server": "http://www.yourwptinstall.com",     "pending_dir": "private",     "locations": ["US_East_wptdriver:Firefox", "US_East_wptdriver:Chrome"],     "urls": {         "label": "http://www.example.com",         "other_label": "http://www.anotherexample.com"     },     "graphite": "graphite.example.com",     "logging_ns": "webpagetest.private",     "splunkLog": "/var/log/webpagetest/results.log" } Wednesday, October 16, 13
  46. 46. # Run Test */25 * * * * php run.php Wednesday, October 16, 13
  47. 47. # Run Test */25 * * * * php run.php -c foo.conf Wednesday, October 16, 13
  48. 48. # Run Test */25 * * * * php run.php -c foo.conf # Get Results * * * * * php get_results.php Wednesday, October 16, 13
  49. 49. Advanced Features Wednesday, October 16, 13
  50. 50. {     "server": "http://example.com",     "pending_dir": "private",     "locations": ["US_East_wptdriver:Firefox", "US_East_wptdriver:Chrome"],     "urls": {         "label": "http://www.example.com",         "other_label": "http://www.webpagetest.org"     },     "graphite": "graphite.example.com",     "logging_ns": "webpagetest.private",     "splunkLog": "/var/log/webpagetest/results.log",     "prepend": "Login",     "username": "someuser",     "password": "somepassword",     "run_options": {         "video": 0     } } Wednesday, October 16, 13
  51. 51. {     "server": "http://example.com",     "pending_dir": "private",     "locations": ["US_East_wptdriver:Firefox", "US_East_wptdriver:Chrome"],     "urls": {         "label": "http://www.example.com",         "other_label": "http://www.webpagetest.org"     },     "graphite": "graphite.example.com",     "logging_ns": "webpagetest.private",     "splunkLog": "/var/log/webpagetest/results.log", "prepend": ["BlockThirdParty", "bypass_cdn.txt"],     "run_options": {         "video": 0     } } Wednesday, October 16, 13
  52. 52. foreach ($prepends as $prepend) { if (file_exists($scripts_dir . $prepend)) { $script .= file_get_contents($scripts_dir . $prepend); } elseif (method_exists($this, $prepend)) { $script .= $this->$prepend(); } } Wednesday, October 16, 13
  53. 53. bypass_cdn.txt setDns setDns setDns setDns setDns setDns setDns setDns setDns Wednesday, October 16, 13 site.etsystatic.com 38.106.64.123 img0.etsystatic.com 38.106.64.125 img1.etsystatic.com 38.106.64.125 img2.etsystatic.com 38.106.64.125 img3.etsystatic.com 38.106.64.125 ny-image0.etsy.com 38.106.64.125 ny-image1.etsy.com 38.106.64.125 ny-image2.etsy.com 38.106.64.125 ny-image3.etsy.com 38.106.64.125
  54. 54. Gathering Results Wednesday, October 16, 13
  55. 55. <?php // Splunk $splunkLogger = new SplunkLogger($config['splunkLog'], $logging_ns); foreach ($results as $result) { $splunkLogger->log($result); } // Graphite $grapher = new Grapher($config['graphite'], $logging_ns); $grapher->graphResults($results); Wednesday, October 16, 13
  56. 56. Wednesday, October 16, 13
  57. 57. Wednesday, October 16, 13
  58. 58. Wednesday, October 16, 13
  59. 59. https://sites.google.com/a/webpagetest.org/docs/using-webpagetest/metrics Wednesday, October 16, 13
  60. 60. Wednesday, October 16, 13
  61. 61. Wednesday, October 16, 13
  62. 62. Wednesday, October 16, 13
  63. 63. Disadvantages vs. Paid Tools Wednesday, October 16, 13
  64. 64. Disadvantages vs. Paid Tools • Harder to set up/maintain Wednesday, October 16, 13
  65. 65. Disadvantages vs. Paid Tools • Harder to set up/maintain • Functionality Wednesday, October 16, 13
  66. 66. Disadvantages vs. Paid Tools • Harder to set up/maintain • Functionality • Regions Wednesday, October 16, 13
  67. 67. Disadvantages vs. Paid Tools • Harder to set up/maintain • Functionality • Regions • Full page oriented Wednesday, October 16, 13
  68. 68. Disadvantages vs. Paid Tools • Harder to set up/maintain • Functionality • Regions • Full page oriented • Less consistent Wednesday, October 16, 13
  69. 69. Advantages vs. Paid Tools Wednesday, October 16, 13
  70. 70. Advantages vs. Paid Tools • Cost Wednesday, October 16, 13
  71. 71. Advantages vs. Paid Tools • Cost • Flexibility Wednesday, October 16, 13
  72. 72. Advantages vs. Paid Tools • Cost • Flexibility • People know the tool Wednesday, October 16, 13
  73. 73. Advantages vs. Paid Tools • Cost • Flexibility • People know the tool • Multi-page flows Wednesday, October 16, 13
  74. 74. Advantages vs. Paid Tools • Cost • Flexibility • People know the tool • Multi-page flows • Scripting Wednesday, October 16, 13
  75. 75. Our Use Cases Wednesday, October 16, 13
  76. 76. WebPagetest Wednesday, October 16, 13 Catchpoint
  77. 77. WebPagetest • Multi-page flows Wednesday, October 16, 13 Catchpoint
  78. 78. WebPagetest • Multi-page flows • Scripted tests Wednesday, October 16, 13 Catchpoint
  79. 79. WebPagetest • Multi-page flows • Scripted tests • High volume testing Wednesday, October 16, 13 Catchpoint
  80. 80. WebPagetest • Multi-page flows • Scripted tests • High volume testing • Ad-hoc tests Wednesday, October 16, 13 Catchpoint
  81. 81. WebPagetest Catchpoint • Multi-page flows • DNS • Scripted tests • High volume testing • Ad-hoc tests Wednesday, October 16, 13
  82. 82. WebPagetest Catchpoint • Multi-page flows • DNS • Scripted tests • API • High volume testing • Ad-hoc tests Wednesday, October 16, 13
  83. 83. WebPagetest Catchpoint • Multi-page flows • DNS • Scripted tests • API • High volume testing • Single Object Tests • Ad-hoc tests Wednesday, October 16, 13
  84. 84. WebPagetest Catchpoint • Multi-page flows • DNS • Scripted tests • API • High volume testing • Single Object Tests • Ad-hoc tests • Multiple locations Wednesday, October 16, 13
  85. 85. WebPagetest Catchpoint • Multi-page flows • DNS • Scripted tests • API • High volume testing • Single Object Tests • Ad-hoc tests • Multiple locations • Comparisons Wednesday, October 16, 13
  86. 86. Future Work Wednesday, October 16, 13
  87. 87. Improving the Process Wednesday, October 16, 13
  88. 88. Improving the Process • Manage disk space Wednesday, October 16, 13
  89. 89. Improving the Process • Manage disk space • Multiple regions Wednesday, October 16, 13
  90. 90. Improving the Process • Manage disk space • Multiple regions • More canned scripts Wednesday, October 16, 13
  91. 91. Improving the Process • Manage disk space • Multiple regions • More canned scripts • Automate upgrades Wednesday, October 16, 13
  92. 92. Leveraging WebPagetest Wednesday, October 16, 13
  93. 93. Leveraging WebPagetest • Front-end SPOF Wednesday, October 16, 13
  94. 94. Leveraging WebPagetest • Front-end SPOF • User Timings (AFT) Wednesday, October 16, 13
  95. 95. Leveraging WebPagetest • Front-end SPOF • User Timings (AFT) • Speed Index Wednesday, October 16, 13
  96. 96. Wednesday, October 16, 13
  97. 97. Improving WebPagetest Wednesday, October 16, 13
  98. 98. WebPagetest + Vagrant Wednesday, October 16, 13
  99. 99. WebPagetest + Vagrant • Install VirtualBox Wednesday, October 16, 13
  100. 100. WebPagetest + Vagrant • Install VirtualBox • Install Vagrant Wednesday, October 16, 13
  101. 101. WebPagetest + Vagrant • Install VirtualBox • Install Vagrant • https://gist.github.com/jklein/6992296 Wednesday, October 16, 13
  102. 102. WebPagetest + Vagrant • Install VirtualBox • Install Vagrant • https://gist.github.com/jklein/6992296 •vagrant up Wednesday, October 16, 13
  103. 103. WebPagetest + Vagrant • Install VirtualBox • Install Vagrant • https://gist.github.com/jklein/6992296 •vagrant up • http://localhost:8080 Wednesday, October 16, 13
  104. 104. Wednesday, October 16, 13
  105. 105. 800MB Wednesday, October 16, 13
  106. 106. webpagetest-api Wednesday, October 16, 13
  107. 107. Wednesday, October 16, 13
  108. 108. Both Are Good Options Wednesday, October 16, 13
  109. 109. Results > Tools Wednesday, October 16, 13
  110. 110. Thanks! Wednesday, October 16, 13
  111. 111. Get in Touch @jonathanklein jonathan@etsy.com www.etsy.com/careers Wednesday, October 16, 13
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×