52
@marcelduran Avoiding Performance Regression Web [email protected]

Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

@marcelduran

Avoiding Performance Regression

Web

[email protected]

Page 2: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

about me

Page 3: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

twitter: web-core

Flight

Page 4: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

web-perf

Page 5: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

not covered today

backend cdn / infra mobile

Page 6: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

life before twitter

Page 7: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

THE PROBLEM

new feature

bugfix

omg!

new release

Page 8: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

easiest solution

new release

2.5s 2.3syay!

#kidding

Page 9: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

typicaldev cycle

build

users

deploy

test

monitor

reactive

Page 10: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

branches * (new features + bugfixes)

Page 11: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

rum

new release

Page 12: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

case: +100ms

previous

diff

new

Page 13: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

HANDS ONcuzillion.com

Page 14: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

yslow

yslow.org

Page 15: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

har

{ "log": { "version": "1.1", "pages": [ { "startedDateTime": "2012-08-16T18:27:29.000+00:00", "id": "page_1_0", "pageTimings": { "onLoad": 13701, . . .

Page 16: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

generating har

Page 17: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

webpagetest.org

Page 18: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

$ npm install yslow -g

Page 19: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

showslow.com

Page 20: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

+ +

Page 21: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

case: Yahoo! Profilecontinuous deployment

acceptanceregression

smokeintegrationunit

ninjachuck norris

Page 22: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

but

performance

Page 23: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

before after

Page 24: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

before after

Page 25: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

phantomjs

var page = require('webpage').create(), url = 'http://www.phantomjs.org/', start = new Date();

page.open(url, function(status) { console.log(new Date() - start); phantom.exit();});

Page 26: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

yslow + phantomjs

$ phantomjs yslow.js http://yslow.org

Page 27: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

new test output formats

-f, --format <format>

( json | xml | plain | tap | junit )

Page 28: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

test specs

-t, --threshold <score>( [0-100] | [A-F] | {json} )

default: 80

Page 29: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

test specs examples

-t B-t 75-t '{"overall": "C", "ycdn": "F"}'-t '{"ycdn": "F", "yexpires": 75}'

Page 30: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

browser impersonation

-u, --ua "<user agent>"

e.g: -u "Mozilla/5.0 (iPhone; ...)"

-vp, --viewport <WxH>

e.g: -vp 320x480

Page 31: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

authentication

-ch, --headers <JSON>

e.g: -ch '{"Cookie": "auth_token=foo"}'

Page 32: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

jenkins

Page 33: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

+wpo build test

deploymonitor users

wpo

proactive

Page 34: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

build test

deploymonitor

users

wpo

proactive

Page 35: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

high performance

A A A A ...

Page 36: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

what's your metric?

page load

domReady

TTFBstart render

TTF

speed indexAFTfoobar

Page 37: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

TTFT

TTFT

Page 38: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

RESTful API

XML

JSON

Page 39: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

marcelduran.com/webpagetest-api

Page 40: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

webpagetest-api wrapper overview

http://webpagetest.org/testStatus.php?test=121119_DJ_J0R

var WebPageTest = require('webpagetest');var wpt = new WebPageTest('webpagetest.org', 'API_key');

wpt.getTestStatus('121119_DJ_J0R', function(err, data) { console.log(err || data);});

$ webpagetest status 121119_DJ_J0R

http://webpagetest.aws.af.cm/status/121119_DJ_J0R

Page 41: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

commands

statusresultslocationstesterstestcancelharpagespeed

utilizationrequesttimelinenetlogconsoletestinfowaterfallscreenshot

Page 42: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

options

serveraftbodiesfirstfullignoresslkeepuanetlognoadsnoheaders

noimagesnooptnoscriptonloadprivatesensitivestandardstimelinevideoauth

typeblockbwdowntcpdumpbwupconnectionsconnectivitydomdurationjpegkey

labellatencylocationloginnotifypasswordpingbackplrrequestrunsspof

Page 43: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

build test

deploy

monitor

wpo

perf

users

proactive

+perf

peregrine

Page 44: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

geococcyx californianus

why peregrine? peregrine falcon

over 200mph

roadrunner

Page 45: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

overview1

2

3

4

5

6

7

8

9

custom deploy

median of n times

script test

Page 46: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

dev? staging? prod? perf?same location

Perf Box

WPT agent(vm)

twitter.com

cdn assets

Page 47: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

screenshots

Page 48: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

opensource

coming soon!

Page 49: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

what's keeping us busy

foo

bar

baz

mastervs

+ ?mspass/no-pass

Page 50: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

questions?

Page 51: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

@JoinTheFlock

Page 52: Velocity Conf 2013 Workshop: Avoiding Web Performance Regression

image creditsJava logo: aha-soft.comGauge: WebIconSet.comNetwork: Everaldo.comIphone: pierocksmysocks.deviantart.comYahoo logo: YOOtheme.comFlower: linux.softpedia.com/developer/Oliver-Scholtz-93.htmlBandaid: nahas-pro.deviantart.comNeedle: business2community.com/social-media/4-tips-for-converting-social-media-leads-0144554Ninja: Iconka.comFalcon1: vt.audubon.org/events/peregrine-falcon-recovery-lectureFalcon2: mendobrew.com/blog/476_the-peregrine-falconFork: fortawesome.github.io/Font-Awesome