HTTP/1.1 vs. HTTP/2: A Performance Analysis

Preview:

Citation preview

HTTP/1.1 vs HTTP/2

Ragnar Lönn, Load Impact

ragnar@loadimpact.com

@ragnarlonn

- a performance analysis

Daniel Stenberg, Mozilla

daniel@haxx.se

@bagder

Part 2: The Experiment

Objective:

Try to get a sense of real-world performance impact of going from HTTP/1.1 to HTTP/2

@loadimpact

Approach

● Choose a well-known site

● Download all resources used by main page

● Host everything locally, in controlled environment

● Measure load times while simulating different network characteristics

Site: www.amazon.com

● ~230-240 resources to get to onload()

● ...but “only” ~10 javascript files

● ~10 unique source hosts

● ~7 Mbyte data

MacOS X 10.10.3 (4 CPU cores, 16G RAM)

VMware Fusion

Linux 3.19.0-25 (Ubuntu)2 CPU cores, 2G RAM

● Nginx 1.9.5/http2

● Shimmer Cat 0.1

● Linux Netem

eth0:1……...eth0:n

Chrome

The Setup

Test results

Test results

50-70% reduced load time

-66%

Remember that:

● HTTP/2 implementations still in their infancy

● Sites are optimized for HTTP/1.1

● Our lab setup is not 100% realistic

So who knows… But still, hey - 60%!

Interesting observations

Relative speed change is flat

Dependencies

The dependency tree

index.html

style.css

script1.js

image1.png

image2.png

image3.png

script2.js

image4.png

image5.png

image6.png

image7.png

Dependency chains

index.html

style.css

script1.js

image1.png

image2.png

image3.png

script2.js

image4.png

image5.png

image6.png

image7.png

A dependency chain

index.html

script1.js

script2.js

image6.png

1

2

3

4

Dependency chain load time

Host1/index.html

Host1/script1.js

Host2/script2.js

Host3/image6.png

Conn Req

Req

Conn Req

Conn Req

The sum of all latencies

Host1/index.html

Host1/script1.js

Host2/script2.js

Host1 RTT Host2 RTT

Conn Req

Conn

Req

Host3 RTT

Host3/image6.png

Req

Conn Req

The largest sum of all latencies

index.html

style.css

script1.js

image1.png

image2.png

image3.png

script2.js

image4.png

image5.png

image6.png

image7.png

Minimum load time

Minimum theoretical load time =

● The largest “sum of all latencies” value of all dependency chains

Dependency chains

● # of resources loaded in one dependency chain step exceeds # of TCP channels that can be used concurrently

HTTP/1.1 is much disadvantaged when:

This happens quite often

Dependency chains

● The client needs to open new connections

HTTP/2 is disadvantaged when:

This happens more often than strictly necessary today, as it often benefits HTTP/1.1 performance

Test @ http2.loadimpact.com

Recommended