Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 22 additions & 33 deletions packages/next/client/page-loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,24 @@
import mitt from 'next-server/dist/lib/mitt'
import unfetch from 'unfetch'

// smaller version of https://gist.github.com/igrigorik/a02f2359f3bc50ca7a9c
function supportsPreload (list) {
if (!list || !list.supports) {
return false
}
function supportsPreload (el) {
try {
return list.supports('preload')
} catch (e) {
return el.relList.supports('preload')
} catch {
return false
}
}

const hasPreload = supportsPreload(document.createElement('link').relList)
const hasPreload = supportsPreload(document.createElement('link'))

function preloadScript (url) {
const link = document.createElement('link')
link.rel = 'preload'
link.crossOrigin = process.crossOrigin
link.href = url
link.as = 'script'
document.head.appendChild(link)
}

export default class PageLoader {
constructor (buildId, assetPrefix) {
Expand Down Expand Up @@ -189,12 +194,10 @@ export default class PageLoader {
this.prefetchCache.add(scriptRoute)

// Inspired by quicklink, license: https://github.com/GoogleChromeLabs/quicklink/blob/master/LICENSE
// Don't prefetch if the user is on 2G / Don't prefetch if Save-Data is enabled
if ('connection' in navigator) {
if (
(navigator.connection.effectiveType || '').indexOf('2g') !== -1 ||
navigator.connection.saveData
) {
let cn
if ((cn = navigator.connection)) {
// Don't prefetch if the user is on 2G or if Save-Data is enabled.
if ((cn.effectiveType || '').indexOf('2g') !== -1 || cn.saveData) {
return
}
}
Expand All @@ -205,14 +208,11 @@ export default class PageLoader {
if (hasPreload) {
await this.promisedBuildId

const link = document.createElement('link')
link.rel = 'preload'
link.crossOrigin = process.crossOrigin
link.href = `${this.assetPrefix}/_next/static/${encodeURIComponent(
this.buildId
)}/pages${scriptRoute}`
link.as = 'script'
document.head.appendChild(link)
preloadScript(
`${this.assetPrefix}/_next/static/${encodeURIComponent(
this.buildId
)}/pages${scriptRoute}`
)
return
}

Expand All @@ -226,15 +226,4 @@ export default class PageLoader {
})
}
}

clearCache (route) {
route = this.normalizeRoute(route)
delete this.pageCache[route]
delete this.loadingRoutes[route]

const script = document.getElementById(`__NEXT_PAGE__${route}`)
if (script) {
script.parentNode.removeChild(script)
}
}
}