第1页
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
第2页
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
第3页
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
第4页
Site: www.amazon.com
~230-240 resources to get to onload()
...but “only” ~10 javascript files
~10 unique source hosts
~7 Mbyte data
第5页
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
第6页
Test results
第7页
Test results
50-70% reduced load time
-66%
第8页
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%!
第9页
Interesting observations
Relative speed
change is flat
第10页
Dependencies
第11页
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
第12页
Dependency chains
index.html
style.css
script1.js
image1.png
image2.png
image3.png
script2.js
image4.png
image5.png
image6.png
image7.png
第13页
A dependency chain
index.html
script1.js
script2.js
image6.png
1
2
3
4
第14页
Dependency chain load time
Host1/index.html
Host1/script1.js
Host2/script2.js
Host3/image6.png
Conn
Req
Req
Conn
Req
Conn
Req
第15页
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
第16页
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
第17页
Minimum load time
Minimum theoretical load time =
The largest “sum of all latencies” value of all dependency chains
第18页
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
第19页
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
第20页
Test @ http2.loadimpact.com