Skip to content

Commit

Permalink
fix: client prerender fallback (#10295)
Browse files Browse the repository at this point in the history
* fix: client prerender fallback

* Use Speculation Rules prefetch as prerender fallback instead of link tag, improve changeset

* Update .changeset/warm-spoons-fetch.md

---------

Co-authored-by: Bjorn Lu <bjornlu.dev@gmail.com>
  • Loading branch information
rossrobino and bluwy committed Mar 7, 2024
1 parent d121311 commit fdd5bf2
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 1 deletion.
5 changes: 5 additions & 0 deletions .changeset/warm-spoons-fetch.md
@@ -0,0 +1,5 @@
---
"astro": patch
---

Adds a prefetch fallback when using the `experimental.clientPrerender` option. If prerendering fails, which can happen if [Chrome extensions block prerendering](https://developer.chrome.com/blog/speculation-rules-improvements#chrome-limits), it will fallback to prefetching the URL. This works by adding a `prefetch` field to the `speculationrules` script, but does not create an extra request.
2 changes: 1 addition & 1 deletion packages/astro/src/@types/astro.ts
Expand Up @@ -1653,7 +1653,7 @@ export interface AstroUserConfig {
* @description
* Enables pre-rendering your prefetched pages on the client in supported browsers.
*
* This feature uses the experimental [Speculation Rules Web API](https://developer.mozilla.org/en-US/docs/Web/API/Speculation_Rules_API) and overrides the default `prefetch` behavior globally to prerender links on the client.
* This feature uses the experimental [Speculation Rules Web API](https://developer.mozilla.org/en-US/docs/Web/API/Speculation_Rules_API) and enhances the default `prefetch` behavior globally to prerender links on the client.
* You may wish to review the [possible risks when prerendering on the client](https://developer.mozilla.org/en-US/docs/Web/API/Speculation_Rules_API#unsafe_prefetching) before enabling this feature.
*
* Enable client side prerendering in your `astro.config.mjs` along with any desired `prefetch` configuration options:
Expand Down
9 changes: 9 additions & 0 deletions packages/astro/src/prefetch/index.ts
Expand Up @@ -330,6 +330,15 @@ function appendSpeculationRules(url: string) {
urls: [url],
},
],
// Currently, adding `prefetch` is required to fallback if `prerender` fails.
// Possibly will be automatic in the future, in which case it can be removed.
// https://github.com/WICG/nav-speculation/issues/162#issuecomment-1977818473
prefetch: [
{
source: 'list',
urls: [url],
},
],
});
document.head.append(script);
}

0 comments on commit fdd5bf2

Please sign in to comment.