early_hint_asset.sjs (1784B)
1 "use strict"; 2 3 function handleRequest(request, response) { 4 let hinted = 5 request.hasHeader("X-Moz") && request.getHeader("X-Moz") === "early hint"; 6 let count = JSON.parse(getSharedState("earlyHintCount")); 7 if (hinted) { 8 count.hinted += 1; 9 } else { 10 count.normal += 1; 11 } 12 setSharedState("earlyHintCount", JSON.stringify(count)); 13 14 let content = ""; 15 let qs = new URLSearchParams(request.queryString); 16 let asset = qs.get("as"); 17 18 if (qs.get("cached") === "1") { 19 response.setHeader("Cache-Control", "max-age=604800", false); 20 } else { 21 response.setHeader("Cache-Control", "no-cache", false); 22 } 23 24 if (asset === "image") { 25 response.setHeader("Content-Type", "image/png", false); 26 // set to green/black horizontal stripes (71 bytes) 27 content = atob( 28 hinted 29 ? "iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAADklEQVQIW2OU+i/FAAcADoABNV8XGBMAAAAASUVORK5CYII=" 30 : "iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAE0lEQVQIW2P4//+/N8MkBiAGsgA1bAe1SzDY8gAAAABJRU5ErkJggg==" 31 ); 32 } else if (asset === "style") { 33 response.setHeader("Content-Type", "text/css", false); 34 // green background on hint response, purple response otherwise 35 content = `#square { background: ${hinted ? "#1aff1a" : "#4b0092"}`; 36 } else if (asset === "script") { 37 response.setHeader("Content-Type", "application/javascript", false); 38 // green background on hint response, purple response otherwise 39 content = `window.onload = function() { 40 document.getElementById('square').style.background = "${ 41 hinted ? "#1aff1a" : "#4b0092" 42 }"; 43 }`; 44 } else if (asset === "fetch") { 45 response.setHeader("Content-Type", "text/plain", false); 46 content = hinted ? "hinted" : "normal"; 47 } 48 49 response.write(content); 50 }