Skip to content

Commit a31eb1b

Browse files
committed
Golf page-loader (#8190)
1 parent 85db928 commit a31eb1b

File tree

1 file changed

+22
-33
lines changed

1 file changed

+22
-33
lines changed

packages/next/client/page-loader.js

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,24 @@
22
import mitt from 'next-server/dist/lib/mitt'
33
import unfetch from 'unfetch'
44

5-
// smaller version of https://gist.github.com/igrigorik/a02f2359f3bc50ca7a9c
6-
function supportsPreload (list) {
7-
if (!list || !list.supports) {
8-
return false
9-
}
5+
function supportsPreload (el) {
106
try {
11-
return list.supports('preload')
12-
} catch (e) {
7+
return el.relList.supports('preload')
8+
} catch {
139
return false
1410
}
1511
}
1612

17-
const hasPreload = supportsPreload(document.createElement('link').relList)
13+
const hasPreload = supportsPreload(document.createElement('link'))
14+
15+
function preloadScript (url) {
16+
const link = document.createElement('link')
17+
link.rel = 'preload'
18+
link.crossOrigin = process.crossOrigin
19+
link.href = url
20+
link.as = 'script'
21+
document.head.appendChild(link)
22+
}
1823

1924
export default class PageLoader {
2025
constructor (buildId, assetPrefix) {
@@ -189,12 +194,10 @@ export default class PageLoader {
189194
this.prefetchCache.add(scriptRoute)
190195

191196
// Inspired by quicklink, license: https://github.com/GoogleChromeLabs/quicklink/blob/master/LICENSE
192-
// Don't prefetch if the user is on 2G / Don't prefetch if Save-Data is enabled
193-
if ('connection' in navigator) {
194-
if (
195-
(navigator.connection.effectiveType || '').indexOf('2g') !== -1 ||
196-
navigator.connection.saveData
197-
) {
197+
let cn
198+
if ((cn = navigator.connection)) {
199+
// Don't prefetch if the user is on 2G or if Save-Data is enabled.
200+
if ((cn.effectiveType || '').indexOf('2g') !== -1 || cn.saveData) {
198201
return
199202
}
200203
}
@@ -205,14 +208,11 @@ export default class PageLoader {
205208
if (hasPreload) {
206209
await this.promisedBuildId
207210

208-
const link = document.createElement('link')
209-
link.rel = 'preload'
210-
link.crossOrigin = process.crossOrigin
211-
link.href = `${this.assetPrefix}/_next/static/${encodeURIComponent(
212-
this.buildId
213-
)}/pages${scriptRoute}`
214-
link.as = 'script'
215-
document.head.appendChild(link)
211+
preloadScript(
212+
`${this.assetPrefix}/_next/static/${encodeURIComponent(
213+
this.buildId
214+
)}/pages${scriptRoute}`
215+
)
216216
return
217217
}
218218

@@ -226,15 +226,4 @@ export default class PageLoader {
226226
})
227227
}
228228
}
229-
230-
clearCache (route) {
231-
route = this.normalizeRoute(route)
232-
delete this.pageCache[route]
233-
delete this.loadingRoutes[route]
234-
235-
const script = document.getElementById(`__NEXT_PAGE__${route}`)
236-
if (script) {
237-
script.parentNode.removeChild(script)
238-
}
239-
}
240229
}

0 commit comments

Comments
 (0)