Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 10d69ea

Browse files
khattakdevLauraBeatris
authored andcommitted
Next.js prefetching should use requestIdleCallback (vercel#14580)
1 parent 49f2e7f commit 10d69ea

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

packages/next/client/page-loader.js

+18-11
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ const relPrefetch =
3131

3232
const hasNoModule = 'noModule' in document.createElement('script')
3333

34+
const requestIdleCallback =
35+
window.requestIdleCallback ||
36+
function (cb) {
37+
return setTimeout(cb, 1)
38+
}
39+
3440
/** @param {string} route */
3541
function normalizeRoute(route) {
3642
if (route[0] !== '/') {
@@ -184,19 +190,20 @@ export default class PageLoader {
184190
prefetchData(href, asPath) {
185191
const { pathname: hrefPathname } = parseRelativeUrl(href)
186192
const route = normalizeRoute(hrefPathname)
187-
return this.promisedSsgManifest.then(
188-
(s, _dataHref) =>
193+
return this.promisedSsgManifest.then((s, _dataHref) => {
194+
requestIdleCallback(() => {
189195
// Check if the route requires a data file
190196
s.has(route) &&
191-
// Try to generate data href, noop when falsy
192-
(_dataHref = this.getDataHref(href, asPath, true)) &&
193-
// noop when data has already been prefetched (dedupe)
194-
!document.querySelector(
195-
`link[rel="${relPrefetch}"][href^="${_dataHref}"]`
196-
) &&
197-
// Inject the `<link rel=prefetch>` tag for above computed `href`.
198-
appendLink(_dataHref, relPrefetch, 'fetch')
199-
)
197+
// Try to generate data href, noop when falsy
198+
(_dataHref = this.getDataHref(href, asPath, true)) &&
199+
// noop when data has already been prefetched (dedupe)
200+
!document.querySelector(
201+
`link[rel="${relPrefetch}"][href^="${_dataHref}"]`
202+
) &&
203+
// Inject the `<link rel=prefetch>` tag for above computed `href`.
204+
appendLink(_dataHref, relPrefetch, 'fetch')
205+
})
206+
})
200207
}
201208

202209
loadPage(route) {

0 commit comments

Comments
 (0)