├── .gitignore ├── LICENSE ├── README.md ├── docs ├── filmstrip.png ├── priorities.png ├── stand-alone-epic-fail.png ├── stand-alone-fail.png ├── stand-alone-options.png ├── stand-alone-priorities.png ├── stand-alone-waterfall.png ├── waterfall_bad.png └── waterfall_good.png ├── favicon.ico ├── index.html ├── index.php ├── resources ├── background.png ├── bottom.js ├── faster-one-v9-latin-regular.eot ├── faster-one-v9-latin-regular.svg ├── faster-one-v9-latin-regular.ttf ├── faster-one-v9-latin-regular.woff ├── faster-one-v9-latin-regular.woff2 ├── hidden.jpg ├── top.js └── visible.jpg ├── stand-alone ├── README.md └── http2priorities.html ├── style.css └── wordpress └── http2priorities.zip /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | firebase-debug.log* 8 | public/ 9 | 10 | # Firebase cache 11 | .firebase/ 12 | 13 | # Firebase config 14 | 15 | # Uncomment this if you'd like others to create their own Firebase project. 16 | # For a team working on the same Firebase project(s), it is recommended to leave 17 | # it commented so all members can deploy to the same project(s) in .firebaserc. 18 | .firebaserc 19 | firebase.json 20 | 21 | # Runtime data 22 | pids 23 | *.pid 24 | *.seed 25 | *.pid.lock 26 | 27 | # Directory for instrumented libs generated by jscoverage/JSCover 28 | lib-cov 29 | 30 | # Coverage directory used by tools like istanbul 31 | coverage 32 | 33 | # nyc test coverage 34 | .nyc_output 35 | 36 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 37 | .grunt 38 | 39 | # Bower dependency directory (https://bower.io/) 40 | bower_components 41 | 42 | # node-waf configuration 43 | .lock-wscript 44 | 45 | # Compiled binary addons (http://nodejs.org/api/addons.html) 46 | build/Release 47 | 48 | # Dependency directories 49 | node_modules/ 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional REPL history 58 | .node_repl_history 59 | 60 | # Output of 'npm pack' 61 | *.tgz 62 | 63 | # Yarn Integrity file 64 | .yarn-integrity 65 | 66 | # dotenv environment variables file 67 | .env 68 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Patrick Meenan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # http2priorities 2 | Test Page for HTTP/2 prioritization (server and browser). For the current status of prioritization support across CDN's, cloud and hostring providers please see Andy Davies' [status page](https://github.com/andydavies/http2-prioritization-issues) (and submit results to have them added). 3 | 4 | Server support for HTTP/2 prioritization requires getting a lot of things right (more details in the [Cloudflare blog post](https://blog.cloudflare.com/http-2-prioritization-with-nginx/)). 5 | 6 | It is HIGHLY recommended you use the newer [stand-alone test](stand-alone) if possible which does not require being able to upload content to the system being tested. 7 | 8 | ## Legacy Test 9 | 10 | This is a test page (also as a [WordPress plugin](wordpress)) for exercising HTTP/2 prioritization (particularly for Chrome). It is structured in such a way that the preload scanner will discover low-priority images that are displayed below the viewport and start loading them before 4 high-priority resources are discovered: 11 | 12 | 1. The custom font used for the page (not discovered until layout). 13 | 1. The background "pebble" image used for the page background (not discovered until layout). 14 | 1. The image of the car visible in the viewport (injected by javascript at the top of the page). 15 | 1. A blocking script at the end of the document (injected by document.write). 16 | 17 | The text near the top of the page will also change after the last blocking script is loaded to indicate that DOMContentLoaded has fired. 18 | 19 | The test should work well on all modern browsers but it depends on browsers doing something intelligent with priorities. It was crafted specifically to exercise Chrome's prioritization and expose server prioritization issues. 20 | 21 | To test, I HIGHLY recommend running the testing with a slow network connection (1.6 Mbps "3G Fast" should be fine). That will make any issues glaringly obvious. In case it wasn't obvious, you will need to deploy this test page on your server to use it as a test target and make sure it is HTTPS (otherwise HTTP/2 will not be used). DO NOT use Chrome Dev Tools' built-in connection profiles. The traffic shaping for those are done internal to the browser and introduce different buffers that lead to incorrect results. There are [good network-level options available on most platforms](https://calendar.perfplanet.com/2016/testing-with-realistic-networking-conditions/). 22 | 23 | When it is working well you will see the important resources at the end of the waterfall completing quickly. 24 | 25 | **IMPORTANT:** All Four high-priority requests need to complete early. It is not uncommon for one or two of them to complete early but bottom.js and visible.jpg get delayed. That is a symptom of a server that supports prioritization but with too much output buffering (it saw the font request before it had sent enough data to fill the buffers). 26 | 27 | ![Waterfall with important resources completing late.](docs/waterfall_good.png) 28 | 29 | When it is not working well you will see them delayed significantly: 30 | 31 | ![Waterfall with important resources completing late.](docs/waterfall_bad.png) 32 | 33 | The visual experience is also significantly faster when working correctly: 34 | 35 | ![Filmstrip](docs/filmstrip.png) 36 | 37 | As of Chrome 70, the HTTP/2 dependency/priority tree for the page looks like this (all requests are marked as "exclusive"): 38 | 39 | ![Priority tree](docs/priorities.png) 40 | -------------------------------------------------------------------------------- /docs/filmstrip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/docs/filmstrip.png -------------------------------------------------------------------------------- /docs/priorities.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/docs/priorities.png -------------------------------------------------------------------------------- /docs/stand-alone-epic-fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/docs/stand-alone-epic-fail.png -------------------------------------------------------------------------------- /docs/stand-alone-fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/docs/stand-alone-fail.png -------------------------------------------------------------------------------- /docs/stand-alone-options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/docs/stand-alone-options.png -------------------------------------------------------------------------------- /docs/stand-alone-priorities.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/docs/stand-alone-priorities.png -------------------------------------------------------------------------------- /docs/stand-alone-waterfall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/docs/stand-alone-waterfall.png -------------------------------------------------------------------------------- /docs/waterfall_bad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/docs/waterfall_bad.png -------------------------------------------------------------------------------- /docs/waterfall_good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/docs/waterfall_good.png -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/favicon.ico -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 41 | 42 | 43 |
44 |

HTTP/2 priorities test page

45 | Waiting for DOM Content Loaded... 46 |

Visible Image:

47 | 48 |
49 | 50 | 58 |
59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 92 | 93 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 13 | 15 | 17 | 20 | 23 | 26 | 29 | 30 | 32 | 34 | 37 | 38 | 39 | 40 | 41 | 43 | 46 | 48 | 50 | 52 | 54 | 57 | 60 | 62 | 66 | 69 | 71 | 73 | 74 | 75 | 76 | 79 | 82 | 84 | 87 | 90 | 92 | 94 | 96 | 99 | 101 | 103 | 105 | 107 | 109 | 111 | 113 | 116 | 118 | 121 | 123 | 126 | 128 | 130 | 132 | 134 | 136 | 138 | 140 | 142 | 143 | 145 | 146 | 147 | 148 | 150 | 152 | 154 | 156 | 158 | 160 | 162 | 164 | 166 | 168 | 170 | 172 | 174 | 176 | 179 | 181 | 184 | 186 | 189 | 191 | 193 | 195 | 197 | 199 | 201 | 203 | 206 | 208 | 211 | 212 | 213 | 215 | 218 | 220 | 222 | 223 | 226 | 228 | 231 | 234 | 236 | 237 | 240 | 241 | 243 | 244 | 246 | 248 | 249 | 251 | 254 | 255 | 256 | 257 | 260 | 262 | 264 | 266 | 269 | 272 | 275 | 278 | 281 | 284 | 287 | 290 | 292 | 295 | 298 | 301 | 304 | 307 | 310 | 312 | 314 | 317 | 320 | 323 | 326 | 329 | 332 | 336 | 340 | 341 | 344 | 347 | 350 | 353 | 356 | 359 | 361 | 364 | 367 | 370 | 372 | 375 | 378 | 381 | 383 | 386 | 389 | 392 | 394 | 397 | 399 | 401 | 403 | 406 | 408 | 411 | 414 | 417 | 420 | 423 | 427 | 429 | 432 | 435 | 438 | 441 | 444 | 446 | 448 | 451 | 452 | 453 | 455 | 457 | 459 | 461 | 463 | 465 | 467 | 469 | 471 | 472 | 473 | 474 | -------------------------------------------------------------------------------- /resources/faster-one-v9-latin-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/resources/faster-one-v9-latin-regular.ttf -------------------------------------------------------------------------------- /resources/faster-one-v9-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/resources/faster-one-v9-latin-regular.woff -------------------------------------------------------------------------------- /resources/faster-one-v9-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/resources/faster-one-v9-latin-regular.woff2 -------------------------------------------------------------------------------- /resources/hidden.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/resources/hidden.jpg -------------------------------------------------------------------------------- /resources/top.js: -------------------------------------------------------------------------------- 1 | // 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 2 | console.log("top.js loaded"); 3 | -------------------------------------------------------------------------------- /resources/visible.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/resources/visible.jpg -------------------------------------------------------------------------------- /stand-alone/README.md: -------------------------------------------------------------------------------- 1 | # Stand-alone HTTP/2 prioritization test 2 | 3 | An online version of this page is hosted at [https://www.webpagetest.org/http2priorities.html](https://www.webpagetest.org/http2priorities.html) for use when testing. 4 | 5 | This is a test page for testing the support for HTTP/2 prioritization on arbitrary hosts. All you need is a single image hosted on the server or service you are trying to test (preferably somewhere close to 100KB in size). 6 | 7 | ## Recommended test conditions 8 | 9 | THe test is designed to work in Chrome and leverages prioritization logic that is specific to Chrome in the testing. It also works best when tested on a low-bandwidth, high-latency connection. 10 | 11 | DO NOT use the connection emulation built into Chrome's dev tools. It will not work correctly for testing for network-level prioritization issues. 12 | 13 | Using WebPageTest, the recommended configuration is: 14 | 15 | * **Location** - Any location with Chrome available (Dulles, VA generally recommended). 16 | * **Browser** - Chrome. 17 | * **Connection** - "3G Fast" (1.6 Mbps/768 Kbps, 150ms RTT). 18 | * **Runs** - 3 (or more) to make sure the results are consistent. 19 | 20 | ![Test Options](../docs/stand-alone-options.png) 21 | 22 | ## Generating the test URL 23 | 24 | You provide the URL for the image to test as an ```image=``` query parameter to the page (make sure to [url-encode](https://meyerweb.com/eric/tools/dencoder/) the URL or the test will not run). The image MUST be hosted over HTTP/2 (or QUIC) otherwise the results of the test will be invalid. The test appends random query strings to the end of the image URL and will only work if the server still returns the image (most do but some like Twitter's image CDN do not). 25 | 26 | i.e. Assuming you want to test the system hosting the image: 27 | 28 | ```text 29 | https://www.perftests.com/http2priorities/resources/visible.jpg 30 | ``` 31 | 32 | You would [url-encode](https://meyerweb.com/eric/tools/dencoder/) the URL to get the encoded version: 33 | 34 | ```text 35 | https%3A%2F%2Fwww.perftests.com%2Fhttp2priorities%2Fresources%2Fvisible.jpg 36 | ``` 37 | 38 | Then add the query parameter to the test page to get the URL for the [page to test](https://www.webpagetest.org/http2priorities.html?image=https%3A%2F%2Fwww.perftests.com%2Fhttp2priorities%2Fresources%2Fvisible.jpg): 39 | 40 | ```text 41 | https://www.webpagetest.org/http2priorities.html?image=https%3A%2F%2Fwww.perftests.com%2Fhttp2priorities%2Fresources%2Fvisible.jpg 42 | ``` 43 | 44 | ## Interpreting Results 45 | 46 | The test will: 47 | 48 | * Load the HTML Page (request #1). 49 | * Load the image twice, one at a time (Requests #2 and #3). 50 | * Establishes a connection to the server and warm up the TCP connection. 51 | * Each image gets a unique hash appended to the image URL to make sure they are all fetched over the network and not served from cache. 52 | * Request the image 30 times concurrently at a low priority (Requests #4-33). 53 | * Wait for two of the low-priority images to finish loading. 54 | * This gives the server a chance to fill any output buffers with the image data. 55 | * Request the image at a high priority and wait for it to complete (Request #34) 56 | * Request the image at a high priority (Request #35) 57 | 58 | The goal is for the two high-priority requests to complete as soon as possible and as close to the reference time of request #3 as possible. 59 | 60 | A passing server will complete both high-priority requests well before the rest of the images complete: 61 | 62 | ![Optimal Waterfall](../docs/stand-alone-waterfall.png) 63 | 64 | A failing server will take much longer for each of the requests (even if the individual requests don't take the full test time): 65 | 66 | ![Fail Waterfall](../docs/stand-alone-fail.png) 67 | 68 | The worst-case is when the first high-priority request (Request #34) doesn't return until after all of the low-priority requests have completed: 69 | 70 | ![Epic Fail Waterfall](../docs/stand-alone-epic-fail.png) 71 | -------------------------------------------------------------------------------- /stand-alone/http2priorities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 14 | 112 | 113 | 114 |
115 |
116 |
117 | 118 | 123 | -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | /* 2 | Theme Name: HTTP/2 Priorities Test 3 | Author: Patrick Meenan 4 | Description: WordPress theme for testing HTTP/2 priorities 5 | Version: 0.0.1 6 | */ 7 | -------------------------------------------------------------------------------- /wordpress/http2priorities.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmeenan/http2priorities/6b1a81c086654132dffedd50a738675306c7cf19/wordpress/http2priorities.zip --------------------------------------------------------------------------------