Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add experiment for prefetching #9747

Merged
merged 1 commit into from
Dec 14, 2019
Merged

Conversation

timneutkens
Copy link
Member

@timneutkens timneutkens commented Dec 14, 2019

This is purely experimental for benchmark comparisons, highly recommend not using it in applications yet.

@ijjk
Copy link
Member

ijjk commented Dec 14, 2019

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall decrease ✓
zeit/next.js canary timneutkens/next.js prefetch-test Change
buildDuration 13.2s 13.3s ⚠️ +150ms
nodeModulesSize 46.9 MB 46.9 MB -20.7 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
zeit/next.js canary timneutkens/next.js prefetch-test Change
main-HASH.js 18.5 kB 18.5 kB -6 B
main-HASH.js gzip 6.49 kB 6.5 kB ⚠️ +5 B
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..1db6754d3.js 12 kB 12 kB
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js 10.9 kB 10.9 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..7d55a2235.js 38.3 kB 38.3 kB
de003c3a9d30..2235.js gzip 13.9 kB 13.9 kB
framework.HASH.js 126 kB 126 kB
framework.HASH.js gzip 39.5 kB 39.5 kB
Overall change 207 kB 207 kB -6 B
Client Bundles (main, webpack, commons) Modern Overall decrease ✓
zeit/next.js canary timneutkens/next.js prefetch-test Change
main-HASH.module.js 14.5 kB 14.5 kB -6 B
main-HASH.module.js gzip 5.42 kB 5.42 kB ⚠️ +6 B
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..b9.module.js 14.9 kB 14.9 kB
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..a0.module.js 33.1 kB 33.1 kB
de003c3a9d30..dule.js gzip 12.5 kB 12.5 kB
framework.HASH.module.js 126 kB 126 kB
framework.HA..dule.js gzip 39.4 kB 39.4 kB
Overall change 190 kB 190 kB -6 B
Legacy Client Bundles (polyfills)
zeit/next.js canary timneutkens/next.js prefetch-test Change
polyfills-HASH.js 15.3 kB 15.3 kB
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 15.3 kB 15.3 kB
Client Pages
zeit/next.js canary timneutkens/next.js prefetch-test Change
_app.js 2.94 kB 2.94 kB
_app.js gzip 1.33 kB 1.33 kB
_error.js 10.4 kB 10.4 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js 1.44 kB 1.44 kB
hooks.js gzip 779 B 779 B
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 6.77 kB 6.77 kB
link.js gzip 2.89 kB 2.89 kB
routerDirect.js 411 B 411 B
routerDirect.js gzip 283 B 283 B
withRouter.js 421 B 421 B
withRouter.js gzip 282 B 282 B
Overall change 22.7 kB 22.7 kB
Client Pages Modern
zeit/next.js canary timneutkens/next.js prefetch-test Change
_app.module.js 1.54 kB 1.54 kB
_app.module.js gzip 757 B 757 B
_error.module.js 7.35 kB 7.35 kB
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js 651 B 651 B
hooks.module.js gzip 371 B 371 B
index.module.js 276 B 276 B
index.module.js gzip 212 B 212 B
link.module.js 5.45 kB 5.45 kB
link.module.js gzip 2.46 kB 2.46 kB
routerDirect.module.js 383 B 383 B
routerDirect..dule.js gzip 273 B 273 B
withRouter.module.js 394 B 394 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 16 kB 16 kB
Client Build Manifests
zeit/next.js canary timneutkens/next.js prefetch-test Change
_buildManifest.js 81 B 81 B
_buildManifest.js gzip 61 B 61 B
_buildManifest.module.js 81 B 81 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 162 B 162 B
Rendered Page Sizes
zeit/next.js canary timneutkens/next.js prefetch-test Change
index.html 4.06 kB 4.06 kB
index.html gzip 1.04 kB 1.04 kB
link.html 4.11 kB 4.11 kB
link.html gzip 1.05 kB 1.05 kB -1 B
withRouter.html 4.12 kB 4.12 kB
withRouter.html gzip 1.03 kB 1.03 kB ⚠️ +1 B
Overall change 12.3 kB 12.3 kB

Diffs

Diff for main-HASH.js
@@ -437,7 +437,7 @@ if (!window.Promise) {
 
 var data = JSON.parse(document.getElementById('__NEXT_DATA__').textContent);
 window.__NEXT_DATA__ = data;
-var version = "9.1.6-canary.9";
+var version = "9.1.6-canary.7";
 exports.version = version;
 var props = data.props,
     err = data.err,
@@ -1390,9 +1390,11 @@ var _mitt = _interopRequireDefault(__webpack_require__("dZ6Y"));
 /* global document, window */
 
 
+var prefetchOrPreload = undefined ? 'prefetch' : 'preload';
+
 function supportsPreload(el) {
   try {
-    return el.relList.supports('preload');
+    return el.relList.supports(prefetchOrPreload);
   } catch (_unused) {
     return false;
   }
@@ -1402,7 +1404,7 @@ var hasPreload = supportsPreload(document.createElement('link'));
 
 function preloadLink(url, resourceType) {
   var link = document.createElement('link');
-  link.rel = 'preload';
+  link.rel = prefetchOrPreload;
   link.crossOrigin = "anonymous";
   link.href = url;
   link.as = resourceType;
@@ -1649,7 +1651,7 @@ function () {
                 url = _this2.assetPrefix + (isDependency ? route : "/_next/static/" + encodeURIComponent(_this2.buildId) + "/pages" + encodeURI(scriptRoute)); // n.b. If preload is not supported, we fall back to `loadPage` which has
                 // its own deduping mechanism.
 
-                if (!document.querySelector("link[rel=\"preload\"][href^=\"" + url + "\"], script[data-next-page=\"" + route + "\"]")) {
+                if (!document.querySelector("link[rel=\"" + prefetchOrPreload + "\"][href^=\"" + url + "\"], script[data-next-page=\"" + route + "\"]")) {
                   _context2.next = 6;
                   break;
                 }
Diff for main-HASH.module.js
@@ -341,7 +341,7 @@ if (!window.Promise) {
 
 var data = JSON.parse(document.getElementById('__NEXT_DATA__').textContent);
 window.__NEXT_DATA__ = data;
-var version = "9.1.6-canary.9";
+var version = "9.1.6-canary.7";
 exports.version = version;
 var {
   props,
@@ -1081,9 +1081,11 @@ var _mitt = _interopRequireDefault(__webpack_require__("dZ6Y"));
 /* global document, window */
 
 
+var prefetchOrPreload = undefined ? 'prefetch' : 'preload';
+
 function supportsPreload(el) {
   try {
-    return el.relList.supports('preload');
+    return el.relList.supports(prefetchOrPreload);
   } catch (_unused) {
     return false;
   }
@@ -1093,7 +1095,7 @@ var hasPreload = supportsPreload(document.createElement('link'));
 
 function preloadLink(url, resourceType) {
   var link = document.createElement('link');
-  link.rel = 'preload';
+  link.rel = prefetchOrPreload;
   link.crossOrigin = "anonymous";
   link.href = url;
   link.as = resourceType;
@@ -1290,7 +1292,7 @@ class PageLoader {
       var url = _this2.assetPrefix + (isDependency ? route : "/_next/static/" + encodeURIComponent(_this2.buildId) + "/pages" + encodeURI(scriptRoute)); // n.b. If preload is not supported, we fall back to `loadPage` which has
       // its own deduping mechanism.
 
-      if (document.querySelector("link[rel=\"preload\"][href^=\"" + url + "\"], script[data-next-page=\"" + route + "\"]")) {
+      if (document.querySelector("link[rel=\"" + prefetchOrPreload + "\"][href^=\"" + url + "\"], script[data-next-page=\"" + route + "\"]")) {
         return;
       } // Inspired by quicklink, license: https://github.com/GoogleChromeLabs/quicklink/blob/master/LICENSE
Diff for index.html
@@ -12,7 +12,7 @@
         as="script" crossorigin="anonymous" />
         <link rel="preload" href="/_next/static/runtime/webpack-7928590be3ef2e55b835.module.js"
         as="script" crossorigin="anonymous" />
-        <link rel="preload" href="/_next/static/runtime/main-bf090db607d67d7a250f.module.js"
+        <link rel="preload" href="/_next/static/runtime/main-31ba2a71e4a52253b2d5.module.js"
         as="script" crossorigin="anonymous" />
         <link rel="preload" href="/_next/static/chunks/framework.9c9aa574c484a7d0240e.module.js"
         as="script" crossorigin="anonymous" />
@@ -44,9 +44,9 @@
         async="" crossorigin="anonymous" nomodule=""></script>
         <script src="/_next/static/runtime/webpack-7928590be3ef2e55b835.module.js"
         async="" crossorigin="anonymous" type="module"></script>
-        <script src="/_next/static/runtime/main-f0a7aeba24f91a93e8e7.js"
+        <script src="/_next/static/runtime/main-e20154f19e18f7fa4a76.js"
         async="" crossorigin="anonymous" nomodule=""></script>
-        <script src="/_next/static/runtime/main-bf090db607d67d7a250f.module.js"
+        <script src="/_next/static/runtime/main-31ba2a71e4a52253b2d5.module.js"
         async="" crossorigin="anonymous" type="module"></script>
         <script src="/_next/static/chunks/framework.4c64484d8a631a55b435.js"
         async="" crossorigin="anonymous" nomodule=""></script>
Diff for link.html
@@ -18,7 +18,7 @@
         as="script" crossorigin="anonymous" />
         <link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.6544e81bc61166e45e0f.module.js"
         as="script" crossorigin="anonymous" />
-        <link rel="preload" href="/_next/static/runtime/main-bf090db607d67d7a250f.module.js"
+        <link rel="preload" href="/_next/static/runtime/main-31ba2a71e4a52253b2d5.module.js"
         as="script" crossorigin="anonymous" />
     </head>
     
@@ -61,9 +61,9 @@
         async="" crossorigin="anonymous" nomodule=""></script>
         <script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.6544e81bc61166e45e0f.module.js"
         async="" crossorigin="anonymous" type="module"></script>
-        <script src="/_next/static/runtime/main-f0a7aeba24f91a93e8e7.js"
+        <script src="/_next/static/runtime/main-e20154f19e18f7fa4a76.js"
         async="" crossorigin="anonymous" nomodule=""></script>
-        <script src="/_next/static/runtime/main-bf090db607d67d7a250f.module.js"
+        <script src="/_next/static/runtime/main-31ba2a71e4a52253b2d5.module.js"
         async="" crossorigin="anonymous" type="module"></script>
         <script src="/_next/static/BUILD_ID/_buildManifest.js" async=""
         crossorigin="anonymous" nomodule=""></script>
Diff for withRouter.html
@@ -18,7 +18,7 @@
         as="script" crossorigin="anonymous" />
         <link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.6544e81bc61166e45e0f.module.js"
         as="script" crossorigin="anonymous" />
-        <link rel="preload" href="/_next/static/runtime/main-bf090db607d67d7a250f.module.js"
+        <link rel="preload" href="/_next/static/runtime/main-31ba2a71e4a52253b2d5.module.js"
         as="script" crossorigin="anonymous" />
     </head>
     
@@ -59,9 +59,9 @@
         async="" crossorigin="anonymous" nomodule=""></script>
         <script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.6544e81bc61166e45e0f.module.js"
         async="" crossorigin="anonymous" type="module"></script>
-        <script src="/_next/static/runtime/main-f0a7aeba24f91a93e8e7.js"
+        <script src="/_next/static/runtime/main-e20154f19e18f7fa4a76.js"
         async="" crossorigin="anonymous" nomodule=""></script>
-        <script src="/_next/static/runtime/main-bf090db607d67d7a250f.module.js"
+        <script src="/_next/static/runtime/main-31ba2a71e4a52253b2d5.module.js"
         async="" crossorigin="anonymous" type="module"></script>
         <script src="/_next/static/BUILD_ID/_buildManifest.js" async=""
         crossorigin="anonymous" nomodule=""></script>

Serverless Mode (Decrease detected ✓)
General Overall decrease ✓
zeit/next.js canary timneutkens/next.js prefetch-test Change
buildDuration 14s 14.1s ⚠️ +144ms
nodeModulesSize 46.9 MB 46.9 MB -20.7 kB
Client Bundles (main, webpack, commons) Overall decrease ✓
zeit/next.js canary timneutkens/next.js prefetch-test Change
main-HASH.js 18.5 kB 18.5 kB -6 B
main-HASH.js gzip 6.49 kB 6.5 kB ⚠️ +5 B
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..1db6754d3.js 12 kB 12 kB
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js 10.9 kB 10.9 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..7d55a2235.js 38.3 kB 38.3 kB
de003c3a9d30..2235.js gzip 13.9 kB 13.9 kB
framework.HASH.js 126 kB 126 kB
framework.HASH.js gzip 39.5 kB 39.5 kB
Overall change 207 kB 207 kB -6 B
Client Bundles (main, webpack, commons) Modern Overall decrease ✓
zeit/next.js canary timneutkens/next.js prefetch-test Change
main-HASH.module.js 14.5 kB 14.5 kB -6 B
main-HASH.module.js gzip 5.42 kB 5.42 kB ⚠️ +6 B
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..b9.module.js 14.9 kB 14.9 kB
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..a0.module.js 33.1 kB 33.1 kB
de003c3a9d30..dule.js gzip 12.5 kB 12.5 kB
framework.HASH.module.js 126 kB 126 kB
framework.HA..dule.js gzip 39.4 kB 39.4 kB
Overall change 190 kB 190 kB -6 B
Legacy Client Bundles (polyfills)
zeit/next.js canary timneutkens/next.js prefetch-test Change
polyfills-HASH.js 15.3 kB 15.3 kB
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 15.3 kB 15.3 kB
Client Pages
zeit/next.js canary timneutkens/next.js prefetch-test Change
_app.js 2.94 kB 2.94 kB
_app.js gzip 1.33 kB 1.33 kB
_error.js 10.4 kB 10.4 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js 1.44 kB 1.44 kB
hooks.js gzip 779 B 779 B
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 6.77 kB 6.77 kB
link.js gzip 2.89 kB 2.89 kB
routerDirect.js 411 B 411 B
routerDirect.js gzip 283 B 283 B
withRouter.js 421 B 421 B
withRouter.js gzip 282 B 282 B
Overall change 22.7 kB 22.7 kB
Client Pages Modern
zeit/next.js canary timneutkens/next.js prefetch-test Change
_app.module.js 1.54 kB 1.54 kB
_app.module.js gzip 757 B 757 B
_error.module.js 7.35 kB 7.35 kB
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js 651 B 651 B
hooks.module.js gzip 371 B 371 B
index.module.js 276 B 276 B
index.module.js gzip 212 B 212 B
link.module.js 5.45 kB 5.45 kB
link.module.js gzip 2.46 kB 2.46 kB
routerDirect.module.js 383 B 383 B
routerDirect..dule.js gzip 273 B 273 B
withRouter.module.js 394 B 394 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 16 kB 16 kB
Client Build Manifests
zeit/next.js canary timneutkens/next.js prefetch-test Change
_buildManifest.js 81 B 81 B
_buildManifest.js gzip 61 B 61 B
_buildManifest.module.js 81 B 81 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 162 B 162 B
Serverless bundles Overall decrease ✓
zeit/next.js canary timneutkens/next.js prefetch-test Change
_error.js 281 kB 281 kB -54 B
_error.js gzip 74.9 kB 74.8 kB -19 B
hooks.html 4.19 kB 4.19 kB
hooks.html gzip 1.07 kB 1.07 kB
index.js 281 kB 281 kB -54 B
index.js gzip 75.1 kB 75.1 kB -22 B
link.js 289 kB 289 kB -54 B
link.js gzip 77.2 kB 77.1 kB -16 B
routerDirect.js 282 kB 282 kB -54 B
routerDirect.js gzip 75.2 kB 75.2 kB -18 B
withRouter.js 282 kB 282 kB -54 B
withRouter.js gzip 75.3 kB 75.3 kB -18 B
Overall change 1.42 MB 1.42 MB -270 B

Commit: 8b7f62c

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants