Open midzer opened 1 year ago
I noticed this today too, did earlier versions of the API only support one script
element, perhaps?
test/test-prerender-only.html can be used to reproduce the issue. Note how in the screenshot below, only 1.html
will be prerendered:
did earlier versions of the API only support one script element, perhaps?
Yes that's correct. It's a relatively recent change (Chrome 107 I think) that allowed multiple prerenders.
I've had a look around the repo and made a few changes locally. I think there are a few things we will need to do:
isSpecRulesExists()
function definition and usageprerenderLimit
const definitionif (toPrerender.size < prerenderLimit) {
checktoPrerender.clear();
to the 'reset' function returned from listen()
(toPrefetch.clear();
is there already)toPrerender.clear();
after adding the Speculation Rules script
elements to prevent a build up of the same URLs being included as new links are found on scroll (see example below), maybe add a mechanism to avoid adding a URL twice if a script
element is created for it once, then again when the user scrolls back to that part of the page?Example of not clearing out the toPrerender
set:
<script type="speculationrules">
{ "prerender": [{ "source": "list", "urls": ["http://localhost:8080/work"] }] }
</script>
<script type="speculationrules">
{ "prerender": [{ "source": "list", "urls": ["http://localhost:8080/work", "http://localhost:8080/contact"] }] }
</script>
<script type="speculationrules">
{ "prerender": [{ "source": "list", "urls": ["http://localhost:8080/work", "http://localhost:8080/contact", "http://localhost:8080/github-stars"] }] }
</script>
<script type="speculationrules">
{ "prerender": [{ "source": "list", "urls": ["http://localhost:8080/work", "http://localhost:8080/contact", "http://localhost:8080/github-stars", "http://localhost:8080/github-stars?no-js"] }] }
</script>
All that said, I did quite quickly start seeing Max number of prerendering exceeded
/MaxNumOfRunningPrerendersExceeded
messages in the experimental Prerender2
dev tools panel, so I'm thinking that Quicklink's approach of prerendering anything in the viewport might be a bit too resource intensive compared to only prerendering links that are being hovered over or touchstart
'ed on.
Yeah there's current a limit of 10 prerenders. IMHO that is more than enough, and prerendering even that many (which I could easily see happening if prerendering all in-viewport links) seems like a lot to me.
quicklink
export prerender
API, currently, if call prerender
multiple times, still throw this error. If user use prerender
API manual, I think we should not limit prerender urls size.
Maybe should mv isSpecRulesExists
check function into listen
. 🤔
Is your feature request related to a problem? Please describe. According to https://developer.chrome.com/blog/prerender-pages/#multiple-speculation-rules the Speculation API allows multiple Speculation Rules. Right now
prerender: true
can only prerender a single URL in viewport.Describe the solution you'd like Remove https://github.com/GoogleChromeLabs/quicklink/blob/e6565ed12b4872b67a862b9fe2198fe0d73cb485/src/index.mjs#L247
Additional context Would be happy to open a PR for this.
Have a nice weekend midzer