Skip to content

Instantly share code, notes, and snippets.

@andydavies
Created January 14, 2021 12:08
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andydavies/d41dda3ab8c06be62ad59d8ceca72343 to your computer and use it in GitHub Desktop.
Save andydavies/d41dda3ab8c06be62ad59d8ceca72343 to your computer and use it in GitHub Desktop.
Example Cloudflare Worker that removes script preloads
/*
* 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