22import mitt from 'next-server/dist/lib/mitt'
33import 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
1924export 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