20
HTTP/1.1 vs HTTP/2 Ragnar Lönn, Load Impact [email protected] @ragnarlonn - a performance analysis Daniel Stenberg, Mozilla [email protected] @bagder

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

Embed Size (px)

Citation preview

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

HTTP/1.1 vs HTTP/2

Ragnar Lönn, Load Impact

[email protected]

@ragnarlonn

- a performance analysis

Daniel Stenberg, Mozilla

[email protected]

@bagder

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

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

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

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

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

Site: www.amazon.com

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

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

● ~10 unique source hosts

● ~7 Mbyte data

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

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

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

Test results

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

Test results

50-70% reduced load time

-66%

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

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%!

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

Interesting observations

Relative speed change is flat

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

Dependencies

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

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

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

Dependency chains

index.html

style.css

script1.js

image1.png

image2.png

image3.png

script2.js

image4.png

image5.png

image6.png

image7.png

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

A dependency chain

index.html

script1.js

script2.js

image6.png

1

2

3

4

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

Dependency chain load time

Host1/index.html

Host1/script1.js

Host2/script2.js

Host3/image6.png

Conn Req

Req

Conn Req

Conn Req

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

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

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

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

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

Minimum load time

Minimum theoretical load time =

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

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

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

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

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

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

Test @ http2.loadimpact.com