Created
January 14, 2021 12:08
-
-
Save andydavies/d41dda3ab8c06be62ad59d8ceca72343 to your computer and use it in GitHub Desktop.
Example Cloudflare Worker that removes script preloads
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* For more detail see https://andydavies.me/blog/2020/09/22/exploring-site-speed-optimisations-with-webpagetest-and-cloudflare-workers/ | |
* Started from Pat's example in https://www.slideshare.net/patrickmeenan/getting-the-most-out-of-webpagetest | |
* | |
* Change site to be site you want to experiment with | |
*/ | |
const site = 'www.example.com'; | |
async function handleRequest(request) { | |
// When overrideHost is used in a script, WPT sets x-host to original host i.e. the one we want to proxy | |
const host = request.headers.get('x-host'); | |
if(host) { | |
const url = new URL(request.url) | |
url.hostname = host; | |
// If it's the original document, rewrite the HTML | |
// TODO use a better check? | |
let accept = request.headers.get('accept'); | |
if (host === site && accept && accept.indexOf('text/html') >= 0) { | |
const response = await fetch(url.toString(), request) | |
return new HTMLRewriter() | |
.on('link[rel="preload"][as="script"]', new removeElement()) | |
.transform(response) | |
} | |
return fetch(url.toString(), request) | |
} | |
// Otherwise, process request as normal | |
return fetch(request) | |
} | |
class removeElement { | |
element(element) { | |
element.remove(); | |
} | |
} | |
addEventListener('fetch', event => { | |
console.log(event.request.url); | |
event.respondWith(handleRequest(event.request)) | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment