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

Adding new types of performance monitoring #10421

Merged
merged 15 commits into from Feb 28, 2020
Merged

Conversation

prateekbh
Copy link
Contributor

  • Adding CLS and LCP metrics to performance relayer.

@ijjk
Copy link
Member

ijjk commented Feb 4, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 11.9s 11.9s ⚠️ +7ms
nodeModulesSize 52.6 MB 52.6 MB ⚠️ +753 B
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.12 kB 5.19 kB ⚠️ +77 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..c4ea.js gzip 13.6 kB 13.6 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 67.4 kB 67.4 kB ⚠️ +77 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.12 kB 4.19 kB ⚠️ +71 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.4 kB 12.4 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 62 kB 62 kB ⚠️ +71 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall decrease ✓
zeit/next.js canary azukaru/next.js morePerfNumbers Change
index.html gzip 1.02 kB 1.02 kB ⚠️ +1 B
link.html gzip 1.03 kB 1.03 kB -1 B
withRouter.html gzip 1.01 kB 1.01 kB -1 B
Overall change 3.06 kB 3.06 kB -1 B

Diffs

Diff for index.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e0fd321a071c55a8a04d.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-4f3f9185f5087054dd42.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.85a73a2fe9d1d2db1940.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e0fd321a071c55a8a04d.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-d0cbc96e0fbedac98ac7.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-4f3f9185f5087054dd42.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e0fd321a071c55a8a04d.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-cc7eb6af9e58a6059f12.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.85a73a2fe9d1d2db1940.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e0fd321a071c55a8a04d.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-6a9bf4c8e8fc5e3c1e5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-cc7eb6af9e58a6059f12.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for main-HASH.module.js
@@ -501,12 +501,25 @@ function renderReactElement(reactEl, domEl) {
     try {
       var observer = new PerformanceObserver(list => {
         list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
       });
+
+      function getObservableTypes(types) {
+        if (PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+          return types.filter(type => PerformanceObserver.supportedEntryTypes.includes(type));
+        } else {
+          return [];
+        }
+      }
+
+      function observe(entryTypes) {
+        // Start observing paint entry types.
+        observer.observe({
+          type: getObservableTypes(entryTypes),
+          buffered: true
+        });
+      }
+
+      observe(['paint', 'largest-contentful-paint', 'layout-shift']);
     } catch (e) {
       window.addEventListener('load', () => {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
Diff for main-HASH.js
@@ -711,14 +711,28 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
+      var getObservableTypes = function getObservableTypes(types) {
+        if (PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+          return types.filter(function (type) {
+            return PerformanceObserver.supportedEntryTypes.includes(type);
+          });
+        } else {
+          return [];
+        }
+      };
+
+      var observe = function observe(entryTypes) {
+        // Start observing paint entry types.
+        observer.observe({
+          type: getObservableTypes(entryTypes),
+          buffered: true
+        });
+      };
+
       var observer = new PerformanceObserver(function (list) {
         list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
       });
+      observe(['paint', 'largest-contentful-paint', 'layout-shift']);
     } catch (e) {
       window.addEventListener('load', function () {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
Diff for link.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e0fd321a071c55a8a04d.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-4f3f9185f5087054dd42.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.85a73a2fe9d1d2db1940.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e0fd321a071c55a8a04d.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-d0cbc96e0fbedac98ac7.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-4f3f9185f5087054dd42.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e0fd321a071c55a8a04d.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-cc7eb6af9e58a6059f12.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.85a73a2fe9d1d2db1940.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e0fd321a071c55a8a04d.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-6a9bf4c8e8fc5e3c1e5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-cc7eb6af9e58a6059f12.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for withRouter.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e0fd321a071c55a8a04d.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-4f3f9185f5087054dd42.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.85a73a2fe9d1d2db1940.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e0fd321a071c55a8a04d.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-d0cbc96e0fbedac98ac7.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-4f3f9185f5087054dd42.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e0fd321a071c55a8a04d.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-cc7eb6af9e58a6059f12.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID"}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.85a73a2fe9d1d2db1940.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e0fd321a071c55a8a04d.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-6a9bf4c8e8fc5e3c1e5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-cc7eb6af9e58a6059f12.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 12.2s 12s -265ms
nodeModulesSize 52.6 MB 52.6 MB ⚠️ +753 B
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.12 kB 5.19 kB ⚠️ +77 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..c4ea.js gzip 13.6 kB 13.6 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 67.4 kB 67.4 kB ⚠️ +77 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.12 kB 4.19 kB ⚠️ +71 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.4 kB 12.4 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 62 kB 62 kB ⚠️ +71 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_error.js gzip 46.4 kB 46.5 kB ⚠️ +3 B
404.html gzip 1.43 kB 1.43 kB ⚠️ +1 B
hooks.html gzip 1.06 kB 1.06 kB
index.js gzip 46.5 kB 46.5 kB ⚠️ +3 B
link.js gzip 72 kB 72 kB ⚠️ +2 B
routerDirect.js gzip 70.3 kB 70.3 kB ⚠️ +3 B
withRouter.js gzip 70.1 kB 70.1 kB ⚠️ +2 B
Overall change 308 kB 308 kB ⚠️ +14 B

Commit: c03a3ed

@ijjk
Copy link
Member

ijjk commented Feb 10, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 11.4s 11.5s ⚠️ +75ms
nodeModulesSize 52.7 MB 52.7 MB ⚠️ +2.83 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.45 kB ⚠️ +319 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..e781.js gzip 13.8 kB 13.8 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 67.5 kB 67.8 kB ⚠️ +319 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.36 kB ⚠️ +231 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.5 kB 12.5 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 62.1 kB 62.3 kB ⚠️ +231 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall decrease ✓
zeit/next.js canary azukaru/next.js morePerfNumbers Change
index.html gzip 1.03 kB 1.03 kB
link.html gzip 1.04 kB 1.04 kB -1 B
withRouter.html gzip 1.03 kB 1.03 kB
Overall change 3.11 kB 3.11 kB -1 B

Diffs

Diff for link.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-cc3a32082798717d0b40.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.94ffdad0a29f46cabb19.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-611284ee8a67ea2057aa.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-cc3a32082798717d0b40.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-4efc202b8483cdb4769f.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.94ffdad0a29f46cabb19.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-27f4d894422e74db649e.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-4efc202b8483cdb4769f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for index.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-cc3a32082798717d0b40.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.94ffdad0a29f46cabb19.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-611284ee8a67ea2057aa.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-cc3a32082798717d0b40.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-4efc202b8483cdb4769f.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.94ffdad0a29f46cabb19.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-27f4d894422e74db649e.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-4efc202b8483cdb4769f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for main-HASH.module.js
@@ -501,15 +501,66 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(list => {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
+      function getSupportedTypes(types) {
+        if (PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+          return types.filter(type => PerformanceObserver.supportedEntryTypes.includes(type));
+        } else {
+          return [];
+        }
+      }
 
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      function observeSupportedTypes(entryTypes) {
+        var supportedTypes = getSupportedTypes(entryTypes);
+
+        if (supportedTypes.includes('layout-shift')) {
+          // Stores the current layout shift score for the page.
+          var cumulativeLayoutShiftScore = 0;
+          var observer = new PerformanceObserver(list => {
+            for (var entry of list.getEntries()) {
+              // Only count layout shifts without recent user input.
+              if (!entry.hadRecentInput) {
+                cumulativeLayoutShiftScore += entry.value;
+              }
+            }
+          });
+          observer.observe({
+            type: 'layout-shift',
+            buffered: true
+          });
+          document.addEventListener('visibilitychange', () => {
+            if (document.visibilityState === 'hidden') {
+              // Force any pending records to be dispatched.
+              observer.takeRecords();
+              observer.disconnect();
+              onPerfEntry({
+                name: 'cumulative-layout-shift',
+                value: cumulativeLayoutShiftScore
+              });
+            }
+          });
+        } // Start observing paint entry types.
+
+
+        supportedTypes.forEach(type => {
+          if (type === 'layout-shift') {
+            return;
+          }
+
+          var observer = new PerformanceObserver(list => {
+            list.getEntries().forEach(onPerfEntry);
+          });
+          observer.observe({
+            type,
+            buffered: true
+          });
+        });
+      }
+
+      observeSupportedTypes(['paint', 'largest-contentful-paint', 'layout-shift']);
     } catch (e) {
+      console.log({
+        e
+      });
       window.addEventListener('load', () => {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
       });
Diff for main-HASH.js
@@ -243,6 +243,8 @@ exports.HeadManagerContext = React.createContext(null);
 "use strict";
 
 
+var _getIterator = __webpack_require__("XXOK");
+
 var _regeneratorRuntime = __webpack_require__("ln6h");
 
 var _classCallCheck = __webpack_require__("/HRN");
@@ -713,15 +715,89 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(function (list) {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
+      var getSupportedTypes = function getSupportedTypes(types) {
+        if (PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+          return types.filter(function (type) {
+            return PerformanceObserver.supportedEntryTypes.includes(type);
+          });
+        } else {
+          return [];
+        }
+      };
 
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      var observeSupportedTypes = function observeSupportedTypes(entryTypes) {
+        var supportedTypes = getSupportedTypes(entryTypes);
+
+        if (supportedTypes.includes('layout-shift')) {
+          // Stores the current layout shift score for the page.
+          var cumulativeLayoutShiftScore = 0;
+          var observer = new PerformanceObserver(function (list) {
+            var _iteratorNormalCompletion = true;
+            var _didIteratorError = false;
+            var _iteratorError = undefined;
+
+            try {
+              for (var _iterator = _getIterator(list.getEntries()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+                var entry = _step.value;
+
+                // Only count layout shifts without recent user input.
+                if (!entry.hadRecentInput) {
+                  cumulativeLayoutShiftScore += entry.value;
+                }
+              }
+            } catch (err) {
+              _didIteratorError = true;
+              _iteratorError = err;
+            } finally {
+              try {
+                if (!_iteratorNormalCompletion && _iterator["return"] != null) {
+                  _iterator["return"]();
+                }
+              } finally {
+                if (_didIteratorError) {
+                  throw _iteratorError;
+                }
+              }
+            }
+          });
+          observer.observe({
+            type: 'layout-shift',
+            buffered: true
+          });
+          document.addEventListener('visibilitychange', function () {
+            if (document.visibilityState === 'hidden') {
+              // Force any pending records to be dispatched.
+              observer.takeRecords();
+              observer.disconnect();
+              onPerfEntry({
+                name: 'cumulative-layout-shift',
+                value: cumulativeLayoutShiftScore
+              });
+            }
+          });
+        } // Start observing paint entry types.
+
+
+        supportedTypes.forEach(function (type) {
+          if (type === 'layout-shift') {
+            return;
+          }
+
+          var observer = new PerformanceObserver(function (list) {
+            list.getEntries().forEach(onPerfEntry);
+          });
+          observer.observe({
+            type: type,
+            buffered: true
+          });
+        });
+      };
+
+      observeSupportedTypes(['paint', 'largest-contentful-paint', 'layout-shift']);
     } catch (e) {
+      console.log({
+        e: e
+      });
       window.addEventListener('load', function () {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
       });
Diff for withRouter.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-cc3a32082798717d0b40.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.94ffdad0a29f46cabb19.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-611284ee8a67ea2057aa.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-cc3a32082798717d0b40.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-4efc202b8483cdb4769f.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.94ffdad0a29f46cabb19.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-27f4d894422e74db649e.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-4efc202b8483cdb4769f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 12.1s 11.9s -221ms
nodeModulesSize 52.7 MB 52.7 MB ⚠️ +2.83 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.45 kB ⚠️ +319 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..e781.js gzip 13.8 kB 13.8 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 67.5 kB 67.8 kB ⚠️ +319 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.36 kB ⚠️ +231 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.5 kB 12.5 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 62.1 kB 62.3 kB ⚠️ +231 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_error.js gzip 46.6 kB 46.6 kB ⚠️ +1 B
404.html gzip 1.45 kB 1.45 kB ⚠️ +2 B
hooks.html gzip 1.08 kB 1.08 kB
index.js gzip 46.7 kB 46.7 kB
link.js gzip 72.6 kB 72.6 kB
routerDirect.js gzip 70.8 kB 70.8 kB
withRouter.js gzip 70.6 kB 70.6 kB ⚠️ +1 B
Overall change 310 kB 310 kB ⚠️ +4 B

Commit: 4eb286a

@ijjk
Copy link
Member

ijjk commented Feb 12, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 12.8s 13s ⚠️ +190ms
nodeModulesSize 52.9 MB 52.9 MB ⚠️ +2.92 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.46 kB ⚠️ +326 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..e781.js gzip 13.8 kB 13.8 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 67.5 kB 67.8 kB ⚠️ +326 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.37 kB ⚠️ +237 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.5 kB 12.5 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 62.1 kB 62.3 kB ⚠️ +237 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
index.html gzip 1.03 kB 1.03 kB
link.html gzip 1.04 kB 1.04 kB ⚠️ +1 B
withRouter.html gzip 1.03 kB 1.03 kB
Overall change 3.11 kB 3.11 kB ⚠️ +1 B

Diffs

Diff for index.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-1eb042c3b4a90e3acca8.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.94ffdad0a29f46cabb19.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-71617365d17c7ecb6735.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-1eb042c3b4a90e3acca8.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-ee614b7726e6129a8fac.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.94ffdad0a29f46cabb19.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-56405e451593143dfc4a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-ee614b7726e6129a8fac.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for main-HASH.module.js
@@ -355,13 +355,15 @@ var _default = async function _default(_temp) {
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       } = _ref2;
       mod.unstable_onPerformanceData({
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       });
     };
   }
@@ -501,15 +503,66 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(list => {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
+      function getSupportedTypes(types) {
+        if (PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+          return types.filter(type => PerformanceObserver.supportedEntryTypes.includes(type));
+        } else {
+          return [];
+        }
+      }
 
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      function observeSupportedTypes(entryTypes) {
+        var supportedTypes = getSupportedTypes(entryTypes);
+
+        if (supportedTypes.includes('layout-shift')) {
+          // Stores the current layout shift score for the page.
+          var cumulativeLayoutShiftScore = 0;
+          var observer = new PerformanceObserver(list => {
+            for (var entry of list.getEntries()) {
+              // Only count layout shifts without recent user input.
+              if (!entry.hadRecentInput) {
+                cumulativeLayoutShiftScore += entry.value;
+              }
+            }
+          });
+          observer.observe({
+            type: 'layout-shift',
+            buffered: true
+          });
+          document.addEventListener('visibilitychange', () => {
+            if (document.visibilityState === 'hidden') {
+              // Force any pending records to be dispatched.
+              observer.takeRecords();
+              observer.disconnect();
+              onPerfEntry({
+                name: 'cumulative-layout-shift',
+                value: cumulativeLayoutShiftScore
+              });
+            }
+          });
+        } // Start observing paint entry types.
+
+
+        supportedTypes.forEach(type => {
+          if (type === 'layout-shift') {
+            return;
+          }
+
+          var observer = new PerformanceObserver(list => {
+            list.getEntries().forEach(onPerfEntry);
+          });
+          observer.observe({
+            type,
+            buffered: true
+          });
+        });
+      }
+
+      observeSupportedTypes(['paint', 'largest-contentful-paint', 'layout-shift']);
     } catch (e) {
+      console.log({
+        e
+      });
       window.addEventListener('load', () => {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
       });
Diff for main-HASH.js
@@ -243,6 +243,8 @@ exports.HeadManagerContext = React.createContext(null);
 "use strict";
 
 
+var _getIterator = __webpack_require__("XXOK");
+
 var _regeneratorRuntime = __webpack_require__("ln6h");
 
 var _classCallCheck = __webpack_require__("/HRN");
@@ -462,12 +464,14 @@ var _default = function _default(_temp) {
               var name = _ref2.name,
                   startTime = _ref2.startTime,
                   value = _ref2.value,
-                  duration = _ref2.duration;
+                  duration = _ref2.duration,
+                  entryType = _ref2.entryType;
               mod.unstable_onPerformanceData({
                 name: name,
                 startTime: startTime,
                 value: value,
-                duration: duration
+                duration: duration,
+                entryType: entryType
               });
             };
           }
@@ -713,15 +717,89 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(function (list) {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
+      var getSupportedTypes = function getSupportedTypes(types) {
+        if (PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+          return types.filter(function (type) {
+            return PerformanceObserver.supportedEntryTypes.includes(type);
+          });
+        } else {
+          return [];
+        }
+      };
 
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      var observeSupportedTypes = function observeSupportedTypes(entryTypes) {
+        var supportedTypes = getSupportedTypes(entryTypes);
+
+        if (supportedTypes.includes('layout-shift')) {
+          // Stores the current layout shift score for the page.
+          var cumulativeLayoutShiftScore = 0;
+          var observer = new PerformanceObserver(function (list) {
+            var _iteratorNormalCompletion = true;
+            var _didIteratorError = false;
+            var _iteratorError = undefined;
+
+            try {
+              for (var _iterator = _getIterator(list.getEntries()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+                var entry = _step.value;
+
+                // Only count layout shifts without recent user input.
+                if (!entry.hadRecentInput) {
+                  cumulativeLayoutShiftScore += entry.value;
+                }
+              }
+            } catch (err) {
+              _didIteratorError = true;
+              _iteratorError = err;
+            } finally {
+              try {
+                if (!_iteratorNormalCompletion && _iterator["return"] != null) {
+                  _iterator["return"]();
+                }
+              } finally {
+                if (_didIteratorError) {
+                  throw _iteratorError;
+                }
+              }
+            }
+          });
+          observer.observe({
+            type: 'layout-shift',
+            buffered: true
+          });
+          document.addEventListener('visibilitychange', function () {
+            if (document.visibilityState === 'hidden') {
+              // Force any pending records to be dispatched.
+              observer.takeRecords();
+              observer.disconnect();
+              onPerfEntry({
+                name: 'cumulative-layout-shift',
+                value: cumulativeLayoutShiftScore
+              });
+            }
+          });
+        } // Start observing paint entry types.
+
+
+        supportedTypes.forEach(function (type) {
+          if (type === 'layout-shift') {
+            return;
+          }
+
+          var observer = new PerformanceObserver(function (list) {
+            list.getEntries().forEach(onPerfEntry);
+          });
+          observer.observe({
+            type: type,
+            buffered: true
+          });
+        });
+      };
+
+      observeSupportedTypes(['paint', 'largest-contentful-paint', 'layout-shift']);
     } catch (e) {
+      console.log({
+        e: e
+      });
       window.addEventListener('load', function () {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
       });
Diff for link.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-1eb042c3b4a90e3acca8.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.94ffdad0a29f46cabb19.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-71617365d17c7ecb6735.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-1eb042c3b4a90e3acca8.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-ee614b7726e6129a8fac.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.94ffdad0a29f46cabb19.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-56405e451593143dfc4a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-ee614b7726e6129a8fac.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for withRouter.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-1eb042c3b4a90e3acca8.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.94ffdad0a29f46cabb19.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-71617365d17c7ecb6735.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-1eb042c3b4a90e3acca8.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-ee614b7726e6129a8fac.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.94ffdad0a29f46cabb19.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.978383ccfbd093c75ec7.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-56405e451593143dfc4a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-ee614b7726e6129a8fac.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 14.1s 14.1s ⚠️ +83ms
nodeModulesSize 52.9 MB 52.9 MB ⚠️ +2.92 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.46 kB ⚠️ +326 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..e781.js gzip 13.8 kB 13.8 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 67.5 kB 67.8 kB ⚠️ +326 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.37 kB ⚠️ +237 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.5 kB 12.5 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 62.1 kB 62.3 kB ⚠️ +237 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall decrease ✓
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_error.js gzip 289 kB 289 kB -307 B
404.html gzip 1.45 kB 1.45 kB
hooks.html gzip 1.08 kB 1.08 kB ⚠️ +1 B
index.js gzip 289 kB 289 kB -67 B
link.js gzip 320 kB 320 kB -17 B
routerDirect.js gzip 317 kB 317 kB ⚠️ +269 B
withRouter.js gzip 317 kB 316 kB -922 B
Overall change 1.53 MB 1.53 MB -1.04 kB

Commit: f99901d

@ijjk
Copy link
Member

ijjk commented Feb 13, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 11s 10.7s -294ms
nodeModulesSize 52.9 MB 52.9 MB ⚠️ +2.92 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.46 kB ⚠️ +326 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..c95c.js gzip 13.6 kB 13.6 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 67.4 kB 67.7 kB ⚠️ +326 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.37 kB ⚠️ +236 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.4 kB 12.4 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 62 kB 62.2 kB ⚠️ +236 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall decrease ✓
zeit/next.js canary azukaru/next.js morePerfNumbers Change
index.html gzip 1.03 kB 1.03 kB -2 B
link.html gzip 1.04 kB 1.04 kB -3 B
withRouter.html gzip 1.03 kB 1.03 kB -4 B
Overall change 3.11 kB 3.1 kB -9 B

Diffs

Diff for link.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-997ff434ce5cd95c9bf4.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.bebf775e6450e44dfbec.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-242243cef3104c84f42c.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-997ff434ce5cd95c9bf4.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-20507e6d55a2e7395ff1.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.bebf775e6450e44dfbec.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-9fabc1c3a434010eab4d.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-20507e6d55a2e7395ff1.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for index.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-997ff434ce5cd95c9bf4.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.bebf775e6450e44dfbec.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-242243cef3104c84f42c.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-997ff434ce5cd95c9bf4.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-20507e6d55a2e7395ff1.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.bebf775e6450e44dfbec.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-9fabc1c3a434010eab4d.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-20507e6d55a2e7395ff1.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for main-HASH.module.js
@@ -360,13 +360,15 @@ var _default = async function _default(_temp) {
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       } = _ref2;
       mod.unstable_onPerformanceData({
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       });
     };
   }
@@ -506,15 +508,66 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(list => {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
+      function getSupportedTypes(types) {
+        if (PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+          return types.filter(type => PerformanceObserver.supportedEntryTypes.includes(type));
+        } else {
+          return [];
+        }
+      }
 
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      function observeSupportedTypes(entryTypes) {
+        var supportedTypes = getSupportedTypes(entryTypes);
+
+        if (supportedTypes.includes('layout-shift')) {
+          // Stores the current layout shift score for the page.
+          var cumulativeLayoutShiftScore = 0;
+          var observer = new PerformanceObserver(list => {
+            for (var entry of list.getEntries()) {
+              // Only count layout shifts without recent user input.
+              if (!entry.hadRecentInput) {
+                cumulativeLayoutShiftScore += entry.value;
+              }
+            }
+          });
+          observer.observe({
+            type: 'layout-shift',
+            buffered: true
+          });
+          document.addEventListener('visibilitychange', () => {
+            if (document.visibilityState === 'hidden') {
+              // Force any pending records to be dispatched.
+              observer.takeRecords();
+              observer.disconnect();
+              onPerfEntry({
+                name: 'cumulative-layout-shift',
+                value: cumulativeLayoutShiftScore
+              });
+            }
+          });
+        } // Start observing paint entry types.
+
+
+        supportedTypes.forEach(type => {
+          if (type === 'layout-shift') {
+            return;
+          }
+
+          var observer = new PerformanceObserver(list => {
+            list.getEntries().forEach(onPerfEntry);
+          });
+          observer.observe({
+            type,
+            buffered: true
+          });
+        });
+      }
+
+      observeSupportedTypes(['paint', 'largest-contentful-paint', 'layout-shift']);
     } catch (e) {
+      console.log({
+        e
+      });
       window.addEventListener('load', () => {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
       });
Diff for main-HASH.js
@@ -243,6 +243,8 @@ exports.HeadManagerContext = React.createContext(null);
 "use strict";
 
 
+var _getIterator = __webpack_require__("XXOK");
+
 var _regeneratorRuntime = __webpack_require__("ln6h");
 
 var _classCallCheck = __webpack_require__("/HRN");
@@ -467,12 +469,14 @@ var _default = function _default(_temp) {
               var name = _ref2.name,
                   startTime = _ref2.startTime,
                   value = _ref2.value,
-                  duration = _ref2.duration;
+                  duration = _ref2.duration,
+                  entryType = _ref2.entryType;
               mod.unstable_onPerformanceData({
                 name: name,
                 startTime: startTime,
                 value: value,
-                duration: duration
+                duration: duration,
+                entryType: entryType
               });
             };
           }
@@ -718,15 +722,89 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(function (list) {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
+      var getSupportedTypes = function getSupportedTypes(types) {
+        if (PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+          return types.filter(function (type) {
+            return PerformanceObserver.supportedEntryTypes.includes(type);
+          });
+        } else {
+          return [];
+        }
+      };
 
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      var observeSupportedTypes = function observeSupportedTypes(entryTypes) {
+        var supportedTypes = getSupportedTypes(entryTypes);
+
+        if (supportedTypes.includes('layout-shift')) {
+          // Stores the current layout shift score for the page.
+          var cumulativeLayoutShiftScore = 0;
+          var observer = new PerformanceObserver(function (list) {
+            var _iteratorNormalCompletion = true;
+            var _didIteratorError = false;
+            var _iteratorError = undefined;
+
+            try {
+              for (var _iterator = _getIterator(list.getEntries()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+                var entry = _step.value;
+
+                // Only count layout shifts without recent user input.
+                if (!entry.hadRecentInput) {
+                  cumulativeLayoutShiftScore += entry.value;
+                }
+              }
+            } catch (err) {
+              _didIteratorError = true;
+              _iteratorError = err;
+            } finally {
+              try {
+                if (!_iteratorNormalCompletion && _iterator["return"] != null) {
+                  _iterator["return"]();
+                }
+              } finally {
+                if (_didIteratorError) {
+                  throw _iteratorError;
+                }
+              }
+            }
+          });
+          observer.observe({
+            type: 'layout-shift',
+            buffered: true
+          });
+          document.addEventListener('visibilitychange', function () {
+            if (document.visibilityState === 'hidden') {
+              // Force any pending records to be dispatched.
+              observer.takeRecords();
+              observer.disconnect();
+              onPerfEntry({
+                name: 'cumulative-layout-shift',
+                value: cumulativeLayoutShiftScore
+              });
+            }
+          });
+        } // Start observing paint entry types.
+
+
+        supportedTypes.forEach(function (type) {
+          if (type === 'layout-shift') {
+            return;
+          }
+
+          var observer = new PerformanceObserver(function (list) {
+            list.getEntries().forEach(onPerfEntry);
+          });
+          observer.observe({
+            type: type,
+            buffered: true
+          });
+        });
+      };
+
+      observeSupportedTypes(['paint', 'largest-contentful-paint', 'layout-shift']);
     } catch (e) {
+      console.log({
+        e: e
+      });
       window.addEventListener('load', function () {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
       });
Diff for withRouter.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-997ff434ce5cd95c9bf4.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.bebf775e6450e44dfbec.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-242243cef3104c84f42c.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-997ff434ce5cd95c9bf4.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-20507e6d55a2e7395ff1.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.bebf775e6450e44dfbec.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-9fabc1c3a434010eab4d.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-20507e6d55a2e7395ff1.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 11.5s 11.7s ⚠️ +194ms
nodeModulesSize 52.9 MB 52.9 MB ⚠️ +2.92 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.46 kB ⚠️ +326 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..c95c.js gzip 13.6 kB 13.6 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 67.4 kB 67.7 kB ⚠️ +326 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.37 kB ⚠️ +236 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.4 kB 12.4 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 62 kB 62.2 kB ⚠️ +236 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall decrease ✓
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_error.js gzip 290 kB 290 kB ⚠️ +226 B
404.html gzip 1.44 kB 1.44 kB -2 B
hooks.html gzip 1.08 kB 1.07 kB -5 B
index.js gzip 289 kB 289 kB
link.js gzip 319 kB 319 kB ⚠️ +58 B
routerDirect.js gzip 317 kB 316 kB -1.03 kB
withRouter.js gzip 317 kB 316 kB -487 B
Overall change 1.53 MB 1.53 MB -1.24 kB

Commit: 3d1c457

@prateekbh prateekbh changed the title [WIP] adding new types of performance monitoring Adding new types of performance monitoring Feb 13, 2020
@prateekbh
Copy link
Contributor Author

// cc: @philipwalton

@ijjk
Copy link
Member

ijjk commented Feb 13, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 13.1s 12.9s -223ms
nodeModulesSize 52.9 MB 52.9 MB ⚠️ +3.22 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.45 kB ⚠️ +318 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..c95c.js gzip 13.6 kB 13.6 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 67.4 kB 67.7 kB ⚠️ +318 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.36 kB ⚠️ +227 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.4 kB 12.4 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 62 kB 62.2 kB ⚠️ +227 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall decrease ✓
zeit/next.js canary azukaru/next.js morePerfNumbers Change
index.html gzip 1.03 kB 1.03 kB
link.html gzip 1.04 kB 1.04 kB -1 B
withRouter.html gzip 1.03 kB 1.03 kB -1 B
Overall change 3.11 kB 3.11 kB -2 B

Diffs

Diff for index.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-997ff434ce5cd95c9bf4.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.bebf775e6450e44dfbec.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-242243cef3104c84f42c.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-997ff434ce5cd95c9bf4.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-a5201372615017e74f4b.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.bebf775e6450e44dfbec.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-ee56b5adf03747c00ec3.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-a5201372615017e74f4b.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for main-HASH.module.js
@@ -360,13 +360,15 @@ var _default = async function _default(_temp) {
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       } = _ref2;
       mod.unstable_onPerformanceData({
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       });
     };
   }
@@ -506,14 +508,66 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(list => {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
+      function getSupportedTypes(types) {
+        if (PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+          return types.filter(type => PerformanceObserver.supportedEntryTypes.includes(type));
+        } else {
+          return [];
+        }
+      }
 
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      function observeSupportedTypes(entryTypes) {
+        var supportedTypes = getSupportedTypes(entryTypes);
+        /**
+        * Layout shift has special handling as this will be sent
+        * cumulative layout shift.
+        */
+
+        if (supportedTypes.includes('layout-shift')) {
+          // Stores the current layout shift score for the page.
+          var cumulativeLayoutShiftScore = 0;
+          var observer = new PerformanceObserver(list => {
+            for (var entry of list.getEntries()) {
+              // Only count layout shifts without recent user input.
+              if (!entry.hadRecentInput) {
+                cumulativeLayoutShiftScore += entry.value;
+              }
+            }
+          });
+          observer.observe({
+            type: 'layout-shift',
+            buffered: true
+          });
+          document.addEventListener('visibilitychange', () => {
+            if (document.visibilityState === 'hidden') {
+              // Force any pending records to be dispatched.
+              observer.takeRecords();
+              observer.disconnect();
+              onPerfEntry({
+                name: 'cumulative-layout-shift',
+                value: cumulativeLayoutShiftScore
+              });
+            }
+          });
+        } // For all other entry types, we send values to relayer as given by PerformanceObserver
+
+
+        supportedTypes.forEach(type => {
+          if (type === 'layout-shift') {
+            return;
+          }
+
+          var observer = new PerformanceObserver(list => {
+            list.getEntries().forEach(onPerfEntry);
+          });
+          observer.observe({
+            type,
+            buffered: true
+          });
+        });
+      }
+
+      observeSupportedTypes(['paint', 'largest-contentful-paint', 'layout-shift']);
     } catch (e) {
       window.addEventListener('load', () => {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
Diff for main-HASH.js
@@ -243,6 +243,8 @@ exports.HeadManagerContext = React.createContext(null);
 "use strict";
 
 
+var _getIterator = __webpack_require__("XXOK");
+
 var _regeneratorRuntime = __webpack_require__("ln6h");
 
 var _classCallCheck = __webpack_require__("/HRN");
@@ -467,12 +469,14 @@ var _default = function _default(_temp) {
               var name = _ref2.name,
                   startTime = _ref2.startTime,
                   value = _ref2.value,
-                  duration = _ref2.duration;
+                  duration = _ref2.duration,
+                  entryType = _ref2.entryType;
               mod.unstable_onPerformanceData({
                 name: name,
                 startTime: startTime,
                 value: value,
-                duration: duration
+                duration: duration,
+                entryType: entryType
               });
             };
           }
@@ -718,14 +722,89 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(function (list) {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
+      var getSupportedTypes = function getSupportedTypes(types) {
+        if (PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+          return types.filter(function (type) {
+            return PerformanceObserver.supportedEntryTypes.includes(type);
+          });
+        } else {
+          return [];
+        }
+      };
 
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      var observeSupportedTypes = function observeSupportedTypes(entryTypes) {
+        var supportedTypes = getSupportedTypes(entryTypes);
+        /**
+        * Layout shift has special handling as this will be sent
+        * cumulative layout shift.
+        */
+
+        if (supportedTypes.includes('layout-shift')) {
+          // Stores the current layout shift score for the page.
+          var cumulativeLayoutShiftScore = 0;
+          var observer = new PerformanceObserver(function (list) {
+            var _iteratorNormalCompletion = true;
+            var _didIteratorError = false;
+            var _iteratorError = undefined;
+
+            try {
+              for (var _iterator = _getIterator(list.getEntries()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+                var entry = _step.value;
+
+                // Only count layout shifts without recent user input.
+                if (!entry.hadRecentInput) {
+                  cumulativeLayoutShiftScore += entry.value;
+                }
+              }
+            } catch (err) {
+              _didIteratorError = true;
+              _iteratorError = err;
+            } finally {
+              try {
+                if (!_iteratorNormalCompletion && _iterator["return"] != null) {
+                  _iterator["return"]();
+                }
+              } finally {
+                if (_didIteratorError) {
+                  throw _iteratorError;
+                }
+              }
+            }
+          });
+          observer.observe({
+            type: 'layout-shift',
+            buffered: true
+          });
+          document.addEventListener('visibilitychange', function () {
+            if (document.visibilityState === 'hidden') {
+              // Force any pending records to be dispatched.
+              observer.takeRecords();
+              observer.disconnect();
+              onPerfEntry({
+                name: 'cumulative-layout-shift',
+                value: cumulativeLayoutShiftScore
+              });
+            }
+          });
+        } // For all other entry types, we send values to relayer as given by PerformanceObserver
+
+
+        supportedTypes.forEach(function (type) {
+          if (type === 'layout-shift') {
+            return;
+          }
+
+          var observer = new PerformanceObserver(function (list) {
+            list.getEntries().forEach(onPerfEntry);
+          });
+          observer.observe({
+            type: type,
+            buffered: true
+          });
+        });
+      };
+
+      observeSupportedTypes(['paint', 'largest-contentful-paint', 'layout-shift']);
     } catch (e) {
       window.addEventListener('load', function () {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
Diff for link.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-997ff434ce5cd95c9bf4.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.bebf775e6450e44dfbec.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-242243cef3104c84f42c.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-997ff434ce5cd95c9bf4.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-a5201372615017e74f4b.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.bebf775e6450e44dfbec.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-ee56b5adf03747c00ec3.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-a5201372615017e74f4b.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for withRouter.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-997ff434ce5cd95c9bf4.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.bebf775e6450e44dfbec.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-242243cef3104c84f42c.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-997ff434ce5cd95c9bf4.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-a5201372615017e74f4b.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.bebf775e6450e44dfbec.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.601c2b1b47697232137c.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-ee56b5adf03747c00ec3.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-a5201372615017e74f4b.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 13.8s 14.2s ⚠️ +325ms
nodeModulesSize 52.9 MB 52.9 MB ⚠️ +3.22 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.45 kB ⚠️ +318 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..c95c.js gzip 13.6 kB 13.6 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 67.4 kB 67.7 kB ⚠️ +318 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.36 kB ⚠️ +227 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.4 kB 12.4 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 62 kB 62.2 kB ⚠️ +227 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall decrease ✓
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_error.js gzip 290 kB 290 kB ⚠️ +216 B
404.html gzip 1.44 kB 1.44 kB ⚠️ +1 B
hooks.html gzip 1.08 kB 1.08 kB
index.js gzip 290 kB 289 kB -783 B
link.js gzip 319 kB 319 kB ⚠️ +289 B
routerDirect.js gzip 317 kB 316 kB -985 B
withRouter.js gzip 316 kB 316 kB ⚠️ +83 B
Overall change 1.53 MB 1.53 MB -1.18 kB

Commit: f125280

packages/next/client/index.js Outdated Show resolved Hide resolved
buffered: true,
})
function getSupportedTypes(types) {
if (PerformanceObserver && PerformanceObserver.supportedEntryTypes) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if (PerformanceObserver) will error if PerformanceObserver is not supported. I think you want to check if (self.PerformanceObserver) (or something like that).

While I technically it's fine because this is in a try/catch block, I think the code is clearer if you're not relying on that to do feature detection (or if you do, put a comment explaining why).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

packages/next/client/index.js Outdated Show resolved Hide resolved
packages/next/client/index.js Outdated Show resolved Hide resolved
@ijjk
Copy link
Member

ijjk commented Feb 14, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 11.6s 11.5s -147ms
nodeModulesSize 52.8 MB 52.8 MB ⚠️ +4.33 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.56 kB ⚠️ +426 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d239.js gzip 16.2 kB 16.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 70 kB 70.4 kB ⚠️ +426 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.47 kB ⚠️ +338 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15.1 kB 15.1 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.6 kB 65 kB ⚠️ +338 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
index.html gzip 1.03 kB 1.04 kB ⚠️ +2 B
link.html gzip 1.04 kB 1.04 kB ⚠️ +1 B
withRouter.html gzip 1.03 kB 1.03 kB ⚠️ +3 B
Overall change 3.11 kB 3.11 kB ⚠️ +6 B

Diffs

Diff for link.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-b73625c827f59779f2b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-87b1374b8e1d466745c4.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for index.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-b73625c827f59779f2b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-87b1374b8e1d466745c4.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for main-HASH.module.js
@@ -214,6 +214,8 @@ var _routerContext = __webpack_require__("qOIg");
 var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
+
+var _performanceRelayer = __webpack_require__("bGXG");
 /* global location */
 
 
@@ -360,13 +362,15 @@ var _default = async function _default(_temp) {
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       } = _ref2;
       mod.unstable_onPerformanceData({
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       });
     };
   }
@@ -506,14 +510,9 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(list => {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      (0, _performanceRelayer.observeLayoutShift)(onPerfEntry);
+      (0, _performanceRelayer.observeLargestContentfulPaint)(onPerfEntry);
+      (0, _performanceRelayer.observePaint)(onPerfEntry);
     } catch (e) {
       window.addEventListener('load', () => {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
@@ -662,6 +661,93 @@ __webpack_require__("o8NH");
 module.exports = __webpack_require__("WEpk").Object.assign;
 
 
+/***/ }),
+
+/***/ "bGXG":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.observeLayoutShift = observeLayoutShift;
+exports.observeLargestContentfulPaint = observeLargestContentfulPaint;
+exports.observePaint = observePaint;
+
+function isTypeSupported(type) {
+  if (self.PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+    return PerformanceObserver.supportedEntryTypes.includes(type);
+  }
+
+  return false;
+}
+
+function observeLayoutShift(onPerfEntry) {
+  if (isTypeSupported('layout-shift')) {
+    var cumulativeScore = 0;
+    var observer = new PerformanceObserver(list => {
+      for (var entry of list.getEntries()) {
+        // Only count layout shifts without recent user input.
+        if (!entry.hadRecentInput) {
+          cumulativeScore += entry.value;
+        }
+      }
+    });
+    observer.observe({
+      type: 'layout-shift',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function clsObserver() {
+      if (document.visibilityState === 'hidden') {
+        // Force any pending records to be dispatched.
+        observer.takeRecords();
+        observer.disconnect();
+        removeEventListener('visibilitychange', clsObserver, true);
+        onPerfEntry({
+          name: 'cumulative-layout-shift',
+          value: cumulativeScore
+        });
+      }
+    }, true);
+  }
+}
+
+function observeLargestContentfulPaint(onPerfEntry) {
+  if (isTypeSupported('largest-contentful-paint')) {
+    // Create a variable to hold the latest LCP value (since it can change).
+    var lcp; // Create the PerformanceObserver instance.
+
+    var observer = new PerformanceObserver(entryList => {
+      var entries = entryList.getEntries();
+      var lastEntry = entries[entries.length - 1];
+      lcp = lastEntry.renderTime || lastEntry.loadTime;
+    });
+    observer.observe({
+      type: 'largest-contentful-paint',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function lcpObserver() {
+      if (lcp && document.visibilityState === 'hidden') {
+        removeEventListener('visibilitychange', lcpObserver, true);
+        onPerfEntry({
+          name: 'largest-contentful-paint',
+          value: lcp
+        });
+      }
+    }, true);
+  }
+}
+
+function observePaint(onPerfEntry) {
+  var observer = new PerformanceObserver(list => {
+    list.getEntries().forEach(onPerfEntry);
+  });
+  observer.observe({
+    type: 'paint',
+    buffered: true
+  });
+}
+
 /***/ }),
 
 /***/ "htGi":
Diff for main-HASH.js
@@ -295,6 +295,8 @@ var _routerContext = __webpack_require__("qOIg");
 var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
+
+var _performanceRelayer = __webpack_require__("bGXG");
 /* global location */
 
 
@@ -467,12 +469,14 @@ var _default = function _default(_temp) {
               var name = _ref2.name,
                   startTime = _ref2.startTime,
                   value = _ref2.value,
-                  duration = _ref2.duration;
+                  duration = _ref2.duration,
+                  entryType = _ref2.entryType;
               mod.unstable_onPerformanceData({
                 name: name,
                 startTime: startTime,
                 value: value,
-                duration: duration
+                duration: duration,
+                entryType: entryType
               });
             };
           }
@@ -718,14 +722,9 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(function (list) {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      (0, _performanceRelayer.observeLayoutShift)(onPerfEntry);
+      (0, _performanceRelayer.observeLargestContentfulPaint)(onPerfEntry);
+      (0, _performanceRelayer.observePaint)(onPerfEntry);
     } catch (e) {
       window.addEventListener('load', function () {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
@@ -954,6 +953,116 @@ module.exports = _possibleConstructorReturn;
 
 /***/ }),
 
+/***/ "bGXG":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _getIterator = __webpack_require__("XXOK");
+
+exports.__esModule = true;
+exports.observeLayoutShift = observeLayoutShift;
+exports.observeLargestContentfulPaint = observeLargestContentfulPaint;
+exports.observePaint = observePaint;
+
+function isTypeSupported(type) {
+  if (self.PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+    return PerformanceObserver.supportedEntryTypes.includes(type);
+  }
+
+  return false;
+}
+
+function observeLayoutShift(onPerfEntry) {
+  if (isTypeSupported('layout-shift')) {
+    var cumulativeScore = 0;
+    var observer = new PerformanceObserver(function (list) {
+      var _iteratorNormalCompletion = true;
+      var _didIteratorError = false;
+      var _iteratorError = undefined;
+
+      try {
+        for (var _iterator = _getIterator(list.getEntries()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+          var entry = _step.value;
+
+          // Only count layout shifts without recent user input.
+          if (!entry.hadRecentInput) {
+            cumulativeScore += entry.value;
+          }
+        }
+      } catch (err) {
+        _didIteratorError = true;
+        _iteratorError = err;
+      } finally {
+        try {
+          if (!_iteratorNormalCompletion && _iterator["return"] != null) {
+            _iterator["return"]();
+          }
+        } finally {
+          if (_didIteratorError) {
+            throw _iteratorError;
+          }
+        }
+      }
+    });
+    observer.observe({
+      type: 'layout-shift',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function clsObserver() {
+      if (document.visibilityState === 'hidden') {
+        // Force any pending records to be dispatched.
+        observer.takeRecords();
+        observer.disconnect();
+        removeEventListener('visibilitychange', clsObserver, true);
+        onPerfEntry({
+          name: 'cumulative-layout-shift',
+          value: cumulativeScore
+        });
+      }
+    }, true);
+  }
+}
+
+function observeLargestContentfulPaint(onPerfEntry) {
+  if (isTypeSupported('largest-contentful-paint')) {
+    // Create a variable to hold the latest LCP value (since it can change).
+    var lcp; // Create the PerformanceObserver instance.
+
+    var observer = new PerformanceObserver(function (entryList) {
+      var entries = entryList.getEntries();
+      var lastEntry = entries[entries.length - 1];
+      lcp = lastEntry.renderTime || lastEntry.loadTime;
+    });
+    observer.observe({
+      type: 'largest-contentful-paint',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function lcpObserver() {
+      if (lcp && document.visibilityState === 'hidden') {
+        removeEventListener('visibilitychange', lcpObserver, true);
+        onPerfEntry({
+          name: 'largest-contentful-paint',
+          value: lcp
+        });
+      }
+    }, true);
+  }
+}
+
+function observePaint(onPerfEntry) {
+  var observer = new PerformanceObserver(function (list) {
+    list.getEntries().forEach(onPerfEntry);
+  });
+  observer.observe({
+    type: 'paint',
+    buffered: true
+  });
+}
+
+/***/ }),
+
 /***/ "htGi":
 /***/ (function(module, exports, __webpack_require__) {
Diff for withRouter.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-b73625c827f59779f2b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-87b1374b8e1d466745c4.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 12.5s 12.6s ⚠️ +60ms
nodeModulesSize 52.8 MB 52.8 MB ⚠️ +4.33 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.56 kB ⚠️ +426 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d239.js gzip 16.2 kB 16.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 70 kB 70.4 kB ⚠️ +426 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.47 kB ⚠️ +338 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15.1 kB 15.1 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.6 kB 65 kB ⚠️ +338 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall decrease ✓
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_error.js gzip 290 kB 290 kB -77 B
404.html gzip 1.44 kB 1.45 kB ⚠️ +1 B
hooks.html gzip 1.08 kB 1.08 kB ⚠️ +1 B
index.js gzip 290 kB 289 kB -367 B
link.js gzip 319 kB 319 kB ⚠️ +49 B
routerDirect.js gzip 316 kB 315 kB -1.21 kB
withRouter.js gzip 316 kB 315 kB -992 B
Overall change 1.53 MB 1.53 MB -2.59 kB

Commit: dd13119

@ijjk
Copy link
Member

ijjk commented Feb 14, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 11.5s 11.9s ⚠️ +394ms
nodeModulesSize 52.8 MB 52.8 MB ⚠️ +4.33 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.56 kB ⚠️ +426 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d239.js gzip 16.2 kB 16.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 70 kB 70.4 kB ⚠️ +426 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.47 kB ⚠️ +338 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15.1 kB 15.1 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.6 kB 65 kB ⚠️ +338 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
index.html gzip 1.03 kB 1.04 kB ⚠️ +2 B
link.html gzip 1.04 kB 1.04 kB ⚠️ +1 B
withRouter.html gzip 1.03 kB 1.03 kB ⚠️ +3 B
Overall change 3.11 kB 3.11 kB ⚠️ +6 B

Diffs

Diff for link.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-b73625c827f59779f2b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-87b1374b8e1d466745c4.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for index.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-b73625c827f59779f2b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-87b1374b8e1d466745c4.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for main-HASH.module.js
@@ -214,6 +214,8 @@ var _routerContext = __webpack_require__("qOIg");
 var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
+
+var _performanceRelayer = __webpack_require__("bGXG");
 /* global location */
 
 
@@ -360,13 +362,15 @@ var _default = async function _default(_temp) {
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       } = _ref2;
       mod.unstable_onPerformanceData({
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       });
     };
   }
@@ -506,14 +510,9 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(list => {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      (0, _performanceRelayer.observeLayoutShift)(onPerfEntry);
+      (0, _performanceRelayer.observeLargestContentfulPaint)(onPerfEntry);
+      (0, _performanceRelayer.observePaint)(onPerfEntry);
     } catch (e) {
       window.addEventListener('load', () => {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
@@ -662,6 +661,93 @@ __webpack_require__("o8NH");
 module.exports = __webpack_require__("WEpk").Object.assign;
 
 
+/***/ }),
+
+/***/ "bGXG":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.observeLayoutShift = observeLayoutShift;
+exports.observeLargestContentfulPaint = observeLargestContentfulPaint;
+exports.observePaint = observePaint;
+
+function isTypeSupported(type) {
+  if (self.PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+    return PerformanceObserver.supportedEntryTypes.includes(type);
+  }
+
+  return false;
+}
+
+function observeLayoutShift(onPerfEntry) {
+  if (isTypeSupported('layout-shift')) {
+    var cumulativeScore = 0;
+    var observer = new PerformanceObserver(list => {
+      for (var entry of list.getEntries()) {
+        // Only count layout shifts without recent user input.
+        if (!entry.hadRecentInput) {
+          cumulativeScore += entry.value;
+        }
+      }
+    });
+    observer.observe({
+      type: 'layout-shift',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function clsObserver() {
+      if (document.visibilityState === 'hidden') {
+        // Force any pending records to be dispatched.
+        observer.takeRecords();
+        observer.disconnect();
+        removeEventListener('visibilitychange', clsObserver, true);
+        onPerfEntry({
+          name: 'cumulative-layout-shift',
+          value: cumulativeScore
+        });
+      }
+    }, true);
+  }
+}
+
+function observeLargestContentfulPaint(onPerfEntry) {
+  if (isTypeSupported('largest-contentful-paint')) {
+    // Create a variable to hold the latest LCP value (since it can change).
+    var lcp; // Create the PerformanceObserver instance.
+
+    var observer = new PerformanceObserver(entryList => {
+      var entries = entryList.getEntries();
+      var lastEntry = entries[entries.length - 1];
+      lcp = lastEntry.renderTime || lastEntry.loadTime;
+    });
+    observer.observe({
+      type: 'largest-contentful-paint',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function lcpObserver() {
+      if (lcp && document.visibilityState === 'hidden') {
+        removeEventListener('visibilitychange', lcpObserver, true);
+        onPerfEntry({
+          name: 'largest-contentful-paint',
+          value: lcp
+        });
+      }
+    }, true);
+  }
+}
+
+function observePaint(onPerfEntry) {
+  var observer = new PerformanceObserver(list => {
+    list.getEntries().forEach(onPerfEntry);
+  });
+  observer.observe({
+    type: 'paint',
+    buffered: true
+  });
+}
+
 /***/ }),
 
 /***/ "htGi":
Diff for main-HASH.js
@@ -295,6 +295,8 @@ var _routerContext = __webpack_require__("qOIg");
 var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
+
+var _performanceRelayer = __webpack_require__("bGXG");
 /* global location */
 
 
@@ -467,12 +469,14 @@ var _default = function _default(_temp) {
               var name = _ref2.name,
                   startTime = _ref2.startTime,
                   value = _ref2.value,
-                  duration = _ref2.duration;
+                  duration = _ref2.duration,
+                  entryType = _ref2.entryType;
               mod.unstable_onPerformanceData({
                 name: name,
                 startTime: startTime,
                 value: value,
-                duration: duration
+                duration: duration,
+                entryType: entryType
               });
             };
           }
@@ -718,14 +722,9 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(function (list) {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      (0, _performanceRelayer.observeLayoutShift)(onPerfEntry);
+      (0, _performanceRelayer.observeLargestContentfulPaint)(onPerfEntry);
+      (0, _performanceRelayer.observePaint)(onPerfEntry);
     } catch (e) {
       window.addEventListener('load', function () {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
@@ -954,6 +953,116 @@ module.exports = _possibleConstructorReturn;
 
 /***/ }),
 
+/***/ "bGXG":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _getIterator = __webpack_require__("XXOK");
+
+exports.__esModule = true;
+exports.observeLayoutShift = observeLayoutShift;
+exports.observeLargestContentfulPaint = observeLargestContentfulPaint;
+exports.observePaint = observePaint;
+
+function isTypeSupported(type) {
+  if (self.PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+    return PerformanceObserver.supportedEntryTypes.includes(type);
+  }
+
+  return false;
+}
+
+function observeLayoutShift(onPerfEntry) {
+  if (isTypeSupported('layout-shift')) {
+    var cumulativeScore = 0;
+    var observer = new PerformanceObserver(function (list) {
+      var _iteratorNormalCompletion = true;
+      var _didIteratorError = false;
+      var _iteratorError = undefined;
+
+      try {
+        for (var _iterator = _getIterator(list.getEntries()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+          var entry = _step.value;
+
+          // Only count layout shifts without recent user input.
+          if (!entry.hadRecentInput) {
+            cumulativeScore += entry.value;
+          }
+        }
+      } catch (err) {
+        _didIteratorError = true;
+        _iteratorError = err;
+      } finally {
+        try {
+          if (!_iteratorNormalCompletion && _iterator["return"] != null) {
+            _iterator["return"]();
+          }
+        } finally {
+          if (_didIteratorError) {
+            throw _iteratorError;
+          }
+        }
+      }
+    });
+    observer.observe({
+      type: 'layout-shift',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function clsObserver() {
+      if (document.visibilityState === 'hidden') {
+        // Force any pending records to be dispatched.
+        observer.takeRecords();
+        observer.disconnect();
+        removeEventListener('visibilitychange', clsObserver, true);
+        onPerfEntry({
+          name: 'cumulative-layout-shift',
+          value: cumulativeScore
+        });
+      }
+    }, true);
+  }
+}
+
+function observeLargestContentfulPaint(onPerfEntry) {
+  if (isTypeSupported('largest-contentful-paint')) {
+    // Create a variable to hold the latest LCP value (since it can change).
+    var lcp; // Create the PerformanceObserver instance.
+
+    var observer = new PerformanceObserver(function (entryList) {
+      var entries = entryList.getEntries();
+      var lastEntry = entries[entries.length - 1];
+      lcp = lastEntry.renderTime || lastEntry.loadTime;
+    });
+    observer.observe({
+      type: 'largest-contentful-paint',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function lcpObserver() {
+      if (lcp && document.visibilityState === 'hidden') {
+        removeEventListener('visibilitychange', lcpObserver, true);
+        onPerfEntry({
+          name: 'largest-contentful-paint',
+          value: lcp
+        });
+      }
+    }, true);
+  }
+}
+
+function observePaint(onPerfEntry) {
+  var observer = new PerformanceObserver(function (list) {
+    list.getEntries().forEach(onPerfEntry);
+  });
+  observer.observe({
+    type: 'paint',
+    buffered: true
+  });
+}
+
+/***/ }),
+
 /***/ "htGi":
 /***/ (function(module, exports, __webpack_require__) {
Diff for withRouter.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-b73625c827f59779f2b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-87b1374b8e1d466745c4.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 12.6s 12.8s ⚠️ +125ms
nodeModulesSize 52.8 MB 52.8 MB ⚠️ +4.33 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.56 kB ⚠️ +426 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d239.js gzip 16.2 kB 16.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 70 kB 70.4 kB ⚠️ +426 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.47 kB ⚠️ +338 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15.1 kB 15.1 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.6 kB 65 kB ⚠️ +338 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_error.js gzip 289 kB 290 kB ⚠️ +686 B
404.html gzip 1.44 kB 1.45 kB ⚠️ +1 B
hooks.html gzip 1.08 kB 1.08 kB ⚠️ +1 B
index.js gzip 289 kB 290 kB ⚠️ +749 B
link.js gzip 319 kB 318 kB -633 B
routerDirect.js gzip 316 kB 316 kB ⚠️ +678 B
withRouter.js gzip 316 kB 316 kB -46 B
Overall change 1.53 MB 1.53 MB ⚠️ +1.44 kB

Commit: 04d59d6

@ijjk
Copy link
Member

ijjk commented Feb 14, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 11.6s 12.1s ⚠️ +454ms
nodeModulesSize 52.8 MB 52.8 MB ⚠️ +4.33 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.56 kB ⚠️ +426 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d239.js gzip 16.2 kB 16.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 70 kB 70.4 kB ⚠️ +426 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.47 kB ⚠️ +338 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15.1 kB 15.1 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.6 kB 65 kB ⚠️ +338 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
index.html gzip 1.03 kB 1.04 kB ⚠️ +2 B
link.html gzip 1.04 kB 1.04 kB ⚠️ +1 B
withRouter.html gzip 1.03 kB 1.03 kB ⚠️ +3 B
Overall change 3.11 kB 3.11 kB ⚠️ +6 B

Diffs

Diff for index.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-b73625c827f59779f2b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-87b1374b8e1d466745c4.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for main-HASH.module.js
@@ -214,6 +214,8 @@ var _routerContext = __webpack_require__("qOIg");
 var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
+
+var _performanceRelayer = __webpack_require__("bGXG");
 /* global location */
 
 
@@ -360,13 +362,15 @@ var _default = async function _default(_temp) {
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       } = _ref2;
       mod.unstable_onPerformanceData({
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       });
     };
   }
@@ -506,14 +510,9 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(list => {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      (0, _performanceRelayer.observeLayoutShift)(onPerfEntry);
+      (0, _performanceRelayer.observeLargestContentfulPaint)(onPerfEntry);
+      (0, _performanceRelayer.observePaint)(onPerfEntry);
     } catch (e) {
       window.addEventListener('load', () => {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
@@ -662,6 +661,93 @@ __webpack_require__("o8NH");
 module.exports = __webpack_require__("WEpk").Object.assign;
 
 
+/***/ }),
+
+/***/ "bGXG":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.observeLayoutShift = observeLayoutShift;
+exports.observeLargestContentfulPaint = observeLargestContentfulPaint;
+exports.observePaint = observePaint;
+
+function isTypeSupported(type) {
+  if (self.PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+    return PerformanceObserver.supportedEntryTypes.includes(type);
+  }
+
+  return false;
+}
+
+function observeLayoutShift(onPerfEntry) {
+  if (isTypeSupported('layout-shift')) {
+    var cumulativeScore = 0;
+    var observer = new PerformanceObserver(list => {
+      for (var entry of list.getEntries()) {
+        // Only count layout shifts without recent user input.
+        if (!entry.hadRecentInput) {
+          cumulativeScore += entry.value;
+        }
+      }
+    });
+    observer.observe({
+      type: 'layout-shift',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function clsObserver() {
+      if (document.visibilityState === 'hidden') {
+        // Force any pending records to be dispatched.
+        observer.takeRecords();
+        observer.disconnect();
+        removeEventListener('visibilitychange', clsObserver, true);
+        onPerfEntry({
+          name: 'cumulative-layout-shift',
+          value: cumulativeScore
+        });
+      }
+    }, true);
+  }
+}
+
+function observeLargestContentfulPaint(onPerfEntry) {
+  if (isTypeSupported('largest-contentful-paint')) {
+    // Create a variable to hold the latest LCP value (since it can change).
+    var lcp; // Create the PerformanceObserver instance.
+
+    var observer = new PerformanceObserver(entryList => {
+      var entries = entryList.getEntries();
+      var lastEntry = entries[entries.length - 1];
+      lcp = lastEntry.renderTime || lastEntry.loadTime;
+    });
+    observer.observe({
+      type: 'largest-contentful-paint',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function lcpObserver() {
+      if (lcp && document.visibilityState === 'hidden') {
+        removeEventListener('visibilitychange', lcpObserver, true);
+        onPerfEntry({
+          name: 'largest-contentful-paint',
+          value: lcp
+        });
+      }
+    }, true);
+  }
+}
+
+function observePaint(onPerfEntry) {
+  var observer = new PerformanceObserver(list => {
+    list.getEntries().forEach(onPerfEntry);
+  });
+  observer.observe({
+    type: 'paint',
+    buffered: true
+  });
+}
+
 /***/ }),
 
 /***/ "htGi":
Diff for main-HASH.js
@@ -295,6 +295,8 @@ var _routerContext = __webpack_require__("qOIg");
 var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
+
+var _performanceRelayer = __webpack_require__("bGXG");
 /* global location */
 
 
@@ -467,12 +469,14 @@ var _default = function _default(_temp) {
               var name = _ref2.name,
                   startTime = _ref2.startTime,
                   value = _ref2.value,
-                  duration = _ref2.duration;
+                  duration = _ref2.duration,
+                  entryType = _ref2.entryType;
               mod.unstable_onPerformanceData({
                 name: name,
                 startTime: startTime,
                 value: value,
-                duration: duration
+                duration: duration,
+                entryType: entryType
               });
             };
           }
@@ -718,14 +722,9 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(function (list) {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      (0, _performanceRelayer.observeLayoutShift)(onPerfEntry);
+      (0, _performanceRelayer.observeLargestContentfulPaint)(onPerfEntry);
+      (0, _performanceRelayer.observePaint)(onPerfEntry);
     } catch (e) {
       window.addEventListener('load', function () {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
@@ -954,6 +953,116 @@ module.exports = _possibleConstructorReturn;
 
 /***/ }),
 
+/***/ "bGXG":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _getIterator = __webpack_require__("XXOK");
+
+exports.__esModule = true;
+exports.observeLayoutShift = observeLayoutShift;
+exports.observeLargestContentfulPaint = observeLargestContentfulPaint;
+exports.observePaint = observePaint;
+
+function isTypeSupported(type) {
+  if (self.PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+    return PerformanceObserver.supportedEntryTypes.includes(type);
+  }
+
+  return false;
+}
+
+function observeLayoutShift(onPerfEntry) {
+  if (isTypeSupported('layout-shift')) {
+    var cumulativeScore = 0;
+    var observer = new PerformanceObserver(function (list) {
+      var _iteratorNormalCompletion = true;
+      var _didIteratorError = false;
+      var _iteratorError = undefined;
+
+      try {
+        for (var _iterator = _getIterator(list.getEntries()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+          var entry = _step.value;
+
+          // Only count layout shifts without recent user input.
+          if (!entry.hadRecentInput) {
+            cumulativeScore += entry.value;
+          }
+        }
+      } catch (err) {
+        _didIteratorError = true;
+        _iteratorError = err;
+      } finally {
+        try {
+          if (!_iteratorNormalCompletion && _iterator["return"] != null) {
+            _iterator["return"]();
+          }
+        } finally {
+          if (_didIteratorError) {
+            throw _iteratorError;
+          }
+        }
+      }
+    });
+    observer.observe({
+      type: 'layout-shift',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function clsObserver() {
+      if (document.visibilityState === 'hidden') {
+        // Force any pending records to be dispatched.
+        observer.takeRecords();
+        observer.disconnect();
+        removeEventListener('visibilitychange', clsObserver, true);
+        onPerfEntry({
+          name: 'cumulative-layout-shift',
+          value: cumulativeScore
+        });
+      }
+    }, true);
+  }
+}
+
+function observeLargestContentfulPaint(onPerfEntry) {
+  if (isTypeSupported('largest-contentful-paint')) {
+    // Create a variable to hold the latest LCP value (since it can change).
+    var lcp; // Create the PerformanceObserver instance.
+
+    var observer = new PerformanceObserver(function (entryList) {
+      var entries = entryList.getEntries();
+      var lastEntry = entries[entries.length - 1];
+      lcp = lastEntry.renderTime || lastEntry.loadTime;
+    });
+    observer.observe({
+      type: 'largest-contentful-paint',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function lcpObserver() {
+      if (lcp && document.visibilityState === 'hidden') {
+        removeEventListener('visibilitychange', lcpObserver, true);
+        onPerfEntry({
+          name: 'largest-contentful-paint',
+          value: lcp
+        });
+      }
+    }, true);
+  }
+}
+
+function observePaint(onPerfEntry) {
+  var observer = new PerformanceObserver(function (list) {
+    list.getEntries().forEach(onPerfEntry);
+  });
+  observer.observe({
+    type: 'paint',
+    buffered: true
+  });
+}
+
+/***/ }),
+
 /***/ "htGi":
 /***/ (function(module, exports, __webpack_require__) {
Diff for link.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-b73625c827f59779f2b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-87b1374b8e1d466745c4.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for withRouter.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-b73625c827f59779f2b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-87b1374b8e1d466745c4.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 13s 13s ⚠️ +93ms
nodeModulesSize 52.8 MB 52.8 MB ⚠️ +4.33 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.56 kB ⚠️ +426 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d239.js gzip 16.2 kB 16.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 70 kB 70.4 kB ⚠️ +426 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.47 kB ⚠️ +338 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15.1 kB 15.1 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.6 kB 65 kB ⚠️ +338 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall decrease ✓
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_error.js gzip 289 kB 289 kB -54 B
404.html gzip 1.44 kB 1.45 kB ⚠️ +1 B
hooks.html gzip 1.08 kB 1.08 kB ⚠️ +1 B
index.js gzip 290 kB 290 kB -330 B
link.js gzip 320 kB 319 kB -176 B
routerDirect.js gzip 316 kB 316 kB ⚠️ +446 B
withRouter.js gzip 316 kB 315 kB -1.2 kB
Overall change 1.53 MB 1.53 MB -1.31 kB

Commit: 17b2cd6

Copy link

@philipwalton philipwalton left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@ijjk
Copy link
Member

ijjk commented Feb 14, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 11.8s 12s ⚠️ +140ms
nodeModulesSize 52.7 MB 52.7 MB ⚠️ +4.33 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.56 kB ⚠️ +426 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d239.js gzip 16.2 kB 16.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 70 kB 70.4 kB ⚠️ +426 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.47 kB ⚠️ +338 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15.1 kB 15.1 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.6 kB 65 kB ⚠️ +338 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
index.html gzip 1.03 kB 1.04 kB ⚠️ +2 B
link.html gzip 1.04 kB 1.04 kB ⚠️ +1 B
withRouter.html gzip 1.03 kB 1.03 kB ⚠️ +3 B
Overall change 3.11 kB 3.11 kB ⚠️ +6 B

Diffs

Diff for index.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-b73625c827f59779f2b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-87b1374b8e1d466745c4.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for main-HASH.module.js
@@ -214,6 +214,8 @@ var _routerContext = __webpack_require__("qOIg");
 var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
+
+var _performanceRelayer = __webpack_require__("bGXG");
 /* global location */
 
 
@@ -360,13 +362,15 @@ var _default = async function _default(_temp) {
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       } = _ref2;
       mod.unstable_onPerformanceData({
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       });
     };
   }
@@ -506,14 +510,9 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(list => {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      (0, _performanceRelayer.observeLayoutShift)(onPerfEntry);
+      (0, _performanceRelayer.observeLargestContentfulPaint)(onPerfEntry);
+      (0, _performanceRelayer.observePaint)(onPerfEntry);
     } catch (e) {
       window.addEventListener('load', () => {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
@@ -662,6 +661,93 @@ __webpack_require__("o8NH");
 module.exports = __webpack_require__("WEpk").Object.assign;
 
 
+/***/ }),
+
+/***/ "bGXG":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.observeLayoutShift = observeLayoutShift;
+exports.observeLargestContentfulPaint = observeLargestContentfulPaint;
+exports.observePaint = observePaint;
+
+function isTypeSupported(type) {
+  if (self.PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+    return PerformanceObserver.supportedEntryTypes.includes(type);
+  }
+
+  return false;
+}
+
+function observeLayoutShift(onPerfEntry) {
+  if (isTypeSupported('layout-shift')) {
+    var cumulativeScore = 0;
+    var observer = new PerformanceObserver(list => {
+      for (var entry of list.getEntries()) {
+        // Only count layout shifts without recent user input.
+        if (!entry.hadRecentInput) {
+          cumulativeScore += entry.value;
+        }
+      }
+    });
+    observer.observe({
+      type: 'layout-shift',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function clsObserver() {
+      if (document.visibilityState === 'hidden') {
+        // Force any pending records to be dispatched.
+        observer.takeRecords();
+        observer.disconnect();
+        removeEventListener('visibilitychange', clsObserver, true);
+        onPerfEntry({
+          name: 'cumulative-layout-shift',
+          value: cumulativeScore
+        });
+      }
+    }, true);
+  }
+}
+
+function observeLargestContentfulPaint(onPerfEntry) {
+  if (isTypeSupported('largest-contentful-paint')) {
+    // Create a variable to hold the latest LCP value (since it can change).
+    var lcp; // Create the PerformanceObserver instance.
+
+    var observer = new PerformanceObserver(entryList => {
+      var entries = entryList.getEntries();
+      var lastEntry = entries[entries.length - 1];
+      lcp = lastEntry.renderTime || lastEntry.loadTime;
+    });
+    observer.observe({
+      type: 'largest-contentful-paint',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function lcpObserver() {
+      if (lcp && document.visibilityState === 'hidden') {
+        removeEventListener('visibilitychange', lcpObserver, true);
+        onPerfEntry({
+          name: 'largest-contentful-paint',
+          value: lcp
+        });
+      }
+    }, true);
+  }
+}
+
+function observePaint(onPerfEntry) {
+  var observer = new PerformanceObserver(list => {
+    list.getEntries().forEach(onPerfEntry);
+  });
+  observer.observe({
+    type: 'paint',
+    buffered: true
+  });
+}
+
 /***/ }),
 
 /***/ "htGi":
Diff for main-HASH.js
@@ -295,6 +295,8 @@ var _routerContext = __webpack_require__("qOIg");
 var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
+
+var _performanceRelayer = __webpack_require__("bGXG");
 /* global location */
 
 
@@ -467,12 +469,14 @@ var _default = function _default(_temp) {
               var name = _ref2.name,
                   startTime = _ref2.startTime,
                   value = _ref2.value,
-                  duration = _ref2.duration;
+                  duration = _ref2.duration,
+                  entryType = _ref2.entryType;
               mod.unstable_onPerformanceData({
                 name: name,
                 startTime: startTime,
                 value: value,
-                duration: duration
+                duration: duration,
+                entryType: entryType
               });
             };
           }
@@ -718,14 +722,9 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(function (list) {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      (0, _performanceRelayer.observeLayoutShift)(onPerfEntry);
+      (0, _performanceRelayer.observeLargestContentfulPaint)(onPerfEntry);
+      (0, _performanceRelayer.observePaint)(onPerfEntry);
     } catch (e) {
       window.addEventListener('load', function () {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
@@ -954,6 +953,116 @@ module.exports = _possibleConstructorReturn;
 
 /***/ }),
 
+/***/ "bGXG":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _getIterator = __webpack_require__("XXOK");
+
+exports.__esModule = true;
+exports.observeLayoutShift = observeLayoutShift;
+exports.observeLargestContentfulPaint = observeLargestContentfulPaint;
+exports.observePaint = observePaint;
+
+function isTypeSupported(type) {
+  if (self.PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+    return PerformanceObserver.supportedEntryTypes.includes(type);
+  }
+
+  return false;
+}
+
+function observeLayoutShift(onPerfEntry) {
+  if (isTypeSupported('layout-shift')) {
+    var cumulativeScore = 0;
+    var observer = new PerformanceObserver(function (list) {
+      var _iteratorNormalCompletion = true;
+      var _didIteratorError = false;
+      var _iteratorError = undefined;
+
+      try {
+        for (var _iterator = _getIterator(list.getEntries()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+          var entry = _step.value;
+
+          // Only count layout shifts without recent user input.
+          if (!entry.hadRecentInput) {
+            cumulativeScore += entry.value;
+          }
+        }
+      } catch (err) {
+        _didIteratorError = true;
+        _iteratorError = err;
+      } finally {
+        try {
+          if (!_iteratorNormalCompletion && _iterator["return"] != null) {
+            _iterator["return"]();
+          }
+        } finally {
+          if (_didIteratorError) {
+            throw _iteratorError;
+          }
+        }
+      }
+    });
+    observer.observe({
+      type: 'layout-shift',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function clsObserver() {
+      if (document.visibilityState === 'hidden') {
+        // Force any pending records to be dispatched.
+        observer.takeRecords();
+        observer.disconnect();
+        removeEventListener('visibilitychange', clsObserver, true);
+        onPerfEntry({
+          name: 'cumulative-layout-shift',
+          value: cumulativeScore
+        });
+      }
+    }, true);
+  }
+}
+
+function observeLargestContentfulPaint(onPerfEntry) {
+  if (isTypeSupported('largest-contentful-paint')) {
+    // Create a variable to hold the latest LCP value (since it can change).
+    var lcp; // Create the PerformanceObserver instance.
+
+    var observer = new PerformanceObserver(function (entryList) {
+      var entries = entryList.getEntries();
+      var lastEntry = entries[entries.length - 1];
+      lcp = lastEntry.renderTime || lastEntry.loadTime;
+    });
+    observer.observe({
+      type: 'largest-contentful-paint',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function lcpObserver() {
+      if (lcp && document.visibilityState === 'hidden') {
+        removeEventListener('visibilitychange', lcpObserver, true);
+        onPerfEntry({
+          name: 'largest-contentful-paint',
+          value: lcp
+        });
+      }
+    }, true);
+  }
+}
+
+function observePaint(onPerfEntry) {
+  var observer = new PerformanceObserver(function (list) {
+    list.getEntries().forEach(onPerfEntry);
+  });
+  observer.observe({
+    type: 'paint',
+    buffered: true
+  });
+}
+
+/***/ }),
+
 /***/ "htGi":
 /***/ (function(module, exports, __webpack_require__) {
Diff for link.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-b73625c827f59779f2b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-87b1374b8e1d466745c4.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for withRouter.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-b73625c827f59779f2b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-2d1bbd921a4c76668b24.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-355bc4b3077ea9d3fc7a.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.c07ba8a3b0945b0f6315.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/commons.5d483f979b96e9afed5a.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.9a0caf742c992a927903.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/4952ddcd88e7185e66c9cf40e2d848b7e27f1574.6406830adfd759a39616.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.5e4d900f5617938f89b6.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.e4f72f83999923141e66.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-87b1374b8e1d466745c4.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-bd6efa39934f4d2a5c5b.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 13s 13.2s ⚠️ +227ms
nodeModulesSize 52.7 MB 52.7 MB ⚠️ +4.33 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 5.13 kB 5.56 kB ⚠️ +426 B
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..d239.js gzip 16.2 kB 16.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 70 kB 70.4 kB ⚠️ +426 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.13 kB 4.47 kB ⚠️ +338 B
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15.1 kB 15.1 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.6 kB 65 kB ⚠️ +338 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.15 kB 1.15 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.89 kB 2.89 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.68 kB 9.68 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 576 B 576 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.46 kB 2.46 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.22 kB 7.22 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_error.js gzip 289 kB 289 kB ⚠️ +218 B
404.html gzip 1.44 kB 1.45 kB ⚠️ +1 B
hooks.html gzip 1.08 kB 1.08 kB ⚠️ +1 B
index.js gzip 290 kB 290 kB -200 B
link.js gzip 319 kB 319 kB -22 B
routerDirect.js gzip 316 kB 316 kB ⚠️ +530 B
withRouter.js gzip 316 kB 316 kB ⚠️ +3 B
Overall change 1.53 MB 1.53 MB ⚠️ +531 B

Commit: d6a095b

@ijjk
Copy link
Member

ijjk commented Feb 28, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 9.5s 9.6s ⚠️ +99ms
nodeModulesSize 56.3 MB 56.3 MB ⚠️ +4.33 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 4.98 kB 5.41 kB ⚠️ +433 B
webpack-HASH.js gzip 746 B 746 B
de003c3a9d30..7030.js gzip 9.68 kB 9.68 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 54.6 kB 55 kB ⚠️ +433 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.1 kB 4.44 kB ⚠️ +336 B
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..dule.js gzip 6.63 kB 6.63 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 50.6 kB 51 kB ⚠️ +336 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 18.9 kB 18.9 kB
Overall change 18.9 kB 18.9 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.07 kB 1.07 kB
_error.js gzip 2.98 kB 2.98 kB
hooks.js gzip 664 B 664 B
index.js gzip 222 B 222 B
link.js gzip 1.9 kB 1.9 kB
routerDirect.js gzip 279 B 279 B
withRouter.js gzip 278 B 278 B
Overall change 7.39 kB 7.39 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 589 B 589 B
_error.module.js gzip 2.08 kB 2.08 kB
hooks.module.js gzip 370 B 370 B
index.module.js gzip 212 B 212 B
link.module.js gzip 1.48 kB 1.48 kB
routerDirect..dule.js gzip 271 B 271 B
withRouter.m..dule.js gzip 270 B 270 B
Overall change 5.27 kB 5.27 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
index.html gzip 923 B 924 B ⚠️ +1 B
link.html gzip 931 B 932 B ⚠️ +1 B
withRouter.html gzip 922 B 922 B
Overall change 2.78 kB 2.78 kB ⚠️ +2 B

Diffs

Diff for link.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-096bd8ab17244599270a.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-2b808e3f067a9602ff7c.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-096bd8ab17244599270a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-82d9abb5d49062112928.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-a63cc20faef8b2789db9.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-82d9abb5d49062112928.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for index.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-096bd8ab17244599270a.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-2b808e3f067a9602ff7c.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-096bd8ab17244599270a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-82d9abb5d49062112928.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-a63cc20faef8b2789db9.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-82d9abb5d49062112928.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for main-HASH.module.js
@@ -194,6 +194,8 @@ var _routerContext = __webpack_require__("qOIg");
 var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
+
+var _performanceRelayer = __webpack_require__("bGXG");
 /* global location */
 
 
@@ -334,13 +336,15 @@ var _default = async function _default(_temp) {
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       } = _ref2;
       mod.unstable_onPerformanceData({
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       });
     };
   }
@@ -481,14 +485,9 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(list => {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      (0, _performanceRelayer.observeLayoutShift)(onPerfEntry);
+      (0, _performanceRelayer.observeLargestContentfulPaint)(onPerfEntry);
+      (0, _performanceRelayer.observePaint)(onPerfEntry);
     } catch (e) {
       window.addEventListener('load', () => {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
@@ -623,6 +622,93 @@ async function doRender(_ref5) {
 
 /***/ }),
 
+/***/ "bGXG":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.observeLayoutShift = observeLayoutShift;
+exports.observeLargestContentfulPaint = observeLargestContentfulPaint;
+exports.observePaint = observePaint;
+
+function isTypeSupported(type) {
+  if (self.PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+    return PerformanceObserver.supportedEntryTypes.includes(type);
+  }
+
+  return false;
+}
+
+function observeLayoutShift(onPerfEntry) {
+  if (isTypeSupported('layout-shift')) {
+    var cumulativeScore = 0;
+    var observer = new PerformanceObserver(list => {
+      for (var entry of list.getEntries()) {
+        // Only count layout shifts without recent user input.
+        if (!entry.hadRecentInput) {
+          cumulativeScore += entry.value;
+        }
+      }
+    });
+    observer.observe({
+      type: 'layout-shift',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function clsObserver() {
+      if (document.visibilityState === 'hidden') {
+        // Force any pending records to be dispatched.
+        observer.takeRecords();
+        observer.disconnect();
+        removeEventListener('visibilitychange', clsObserver, true);
+        onPerfEntry({
+          name: 'cumulative-layout-shift',
+          value: cumulativeScore
+        });
+      }
+    }, true);
+  }
+}
+
+function observeLargestContentfulPaint(onPerfEntry) {
+  if (isTypeSupported('largest-contentful-paint')) {
+    // Create a variable to hold the latest LCP value (since it can change).
+    var lcp; // Create the PerformanceObserver instance.
+
+    var observer = new PerformanceObserver(entryList => {
+      var entries = entryList.getEntries();
+      var lastEntry = entries[entries.length - 1];
+      lcp = lastEntry.renderTime || lastEntry.loadTime;
+    });
+    observer.observe({
+      type: 'largest-contentful-paint',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function lcpObserver() {
+      if (lcp && document.visibilityState === 'hidden') {
+        removeEventListener('visibilitychange', lcpObserver, true);
+        onPerfEntry({
+          name: 'largest-contentful-paint',
+          value: lcp
+        });
+      }
+    }, true);
+  }
+}
+
+function observePaint(onPerfEntry) {
+  var observer = new PerformanceObserver(list => {
+    list.getEntries().forEach(onPerfEntry);
+  });
+  observer.observe({
+    type: 'paint',
+    buffered: true
+  });
+}
+
+/***/ }),
+
 /***/ "pVnL":
 /***/ (function(module, exports) {
Diff for main-HASH.js
@@ -230,6 +230,8 @@ var _routerContext = __webpack_require__("qOIg");
 var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
+
+var _performanceRelayer = __webpack_require__("bGXG");
 /* global location */
 
 
@@ -394,12 +396,14 @@ var _default = function _default(_temp) {
               var name = _ref2.name,
                   startTime = _ref2.startTime,
                   value = _ref2.value,
-                  duration = _ref2.duration;
+                  duration = _ref2.duration,
+                  entryType = _ref2.entryType;
               mod.unstable_onPerformanceData({
                 name: name,
                 startTime: startTime,
                 value: value,
-                duration: duration
+                duration: duration,
+                entryType: entryType
               });
             };
           }
@@ -646,14 +650,9 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(function (list) {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      (0, _performanceRelayer.observeLayoutShift)(onPerfEntry);
+      (0, _performanceRelayer.observeLargestContentfulPaint)(onPerfEntry);
+      (0, _performanceRelayer.observePaint)(onPerfEntry);
     } catch (e) {
       window.addEventListener('load', function () {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
@@ -854,6 +853,114 @@ module.exports = _possibleConstructorReturn;
 
 /***/ }),
 
+/***/ "bGXG":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.observeLayoutShift = observeLayoutShift;
+exports.observeLargestContentfulPaint = observeLargestContentfulPaint;
+exports.observePaint = observePaint;
+
+function isTypeSupported(type) {
+  if (self.PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+    return PerformanceObserver.supportedEntryTypes.includes(type);
+  }
+
+  return false;
+}
+
+function observeLayoutShift(onPerfEntry) {
+  if (isTypeSupported('layout-shift')) {
+    var cumulativeScore = 0;
+    var observer = new PerformanceObserver(function (list) {
+      var _iteratorNormalCompletion = true;
+      var _didIteratorError = false;
+      var _iteratorError = undefined;
+
+      try {
+        for (var _iterator = list.getEntries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+          var entry = _step.value;
+
+          // Only count layout shifts without recent user input.
+          if (!entry.hadRecentInput) {
+            cumulativeScore += entry.value;
+          }
+        }
+      } catch (err) {
+        _didIteratorError = true;
+        _iteratorError = err;
+      } finally {
+        try {
+          if (!_iteratorNormalCompletion && _iterator["return"] != null) {
+            _iterator["return"]();
+          }
+        } finally {
+          if (_didIteratorError) {
+            throw _iteratorError;
+          }
+        }
+      }
+    });
+    observer.observe({
+      type: 'layout-shift',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function clsObserver() {
+      if (document.visibilityState === 'hidden') {
+        // Force any pending records to be dispatched.
+        observer.takeRecords();
+        observer.disconnect();
+        removeEventListener('visibilitychange', clsObserver, true);
+        onPerfEntry({
+          name: 'cumulative-layout-shift',
+          value: cumulativeScore
+        });
+      }
+    }, true);
+  }
+}
+
+function observeLargestContentfulPaint(onPerfEntry) {
+  if (isTypeSupported('largest-contentful-paint')) {
+    // Create a variable to hold the latest LCP value (since it can change).
+    var lcp; // Create the PerformanceObserver instance.
+
+    var observer = new PerformanceObserver(function (entryList) {
+      var entries = entryList.getEntries();
+      var lastEntry = entries[entries.length - 1];
+      lcp = lastEntry.renderTime || lastEntry.loadTime;
+    });
+    observer.observe({
+      type: 'largest-contentful-paint',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function lcpObserver() {
+      if (lcp && document.visibilityState === 'hidden') {
+        removeEventListener('visibilitychange', lcpObserver, true);
+        onPerfEntry({
+          name: 'largest-contentful-paint',
+          value: lcp
+        });
+      }
+    }, true);
+  }
+}
+
+function observePaint(onPerfEntry) {
+  var observer = new PerformanceObserver(function (list) {
+    list.getEntries().forEach(onPerfEntry);
+  });
+  observer.observe({
+    type: 'paint',
+    buffered: true
+  });
+}
+
+/***/ }),
+
 /***/ "pVnL":
 /***/ (function(module, exports) {
Diff for withRouter.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-096bd8ab17244599270a.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-2b808e3f067a9602ff7c.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-096bd8ab17244599270a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-82d9abb5d49062112928.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-a63cc20faef8b2789db9.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-82d9abb5d49062112928.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 10s 10.2s ⚠️ +139ms
nodeModulesSize 56.3 MB 56.3 MB ⚠️ +4.33 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 4.98 kB 5.41 kB ⚠️ +433 B
webpack-HASH.js gzip 746 B 746 B
de003c3a9d30..7030.js gzip 9.68 kB 9.68 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 54.6 kB 55 kB ⚠️ +433 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.1 kB 4.44 kB ⚠️ +336 B
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..dule.js gzip 6.63 kB 6.63 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 50.6 kB 51 kB ⚠️ +336 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 18.9 kB 18.9 kB
Overall change 18.9 kB 18.9 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.07 kB 1.07 kB
_error.js gzip 2.98 kB 2.98 kB
hooks.js gzip 664 B 664 B
index.js gzip 222 B 222 B
link.js gzip 1.9 kB 1.9 kB
routerDirect.js gzip 279 B 279 B
withRouter.js gzip 278 B 278 B
Overall change 7.39 kB 7.39 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 589 B 589 B
_error.module.js gzip 2.08 kB 2.08 kB
hooks.module.js gzip 370 B 370 B
index.module.js gzip 212 B 212 B
link.module.js gzip 1.48 kB 1.48 kB
routerDirect..dule.js gzip 271 B 271 B
withRouter.m..dule.js gzip 270 B 270 B
Overall change 5.27 kB 5.27 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_error.js gzip 292 kB 293 kB ⚠️ +766 B
404.html gzip 1.33 kB 1.33 kB ⚠️ +3 B
hooks.html gzip 963 B 963 B
index.js gzip 292 kB 293 kB ⚠️ +763 B
link.js gzip 300 kB 299 kB -535 B
routerDirect.js gzip 298 kB 298 kB -512 B
withRouter.js gzip 298 kB 298 kB -55 B
Overall change 1.48 MB 1.48 MB ⚠️ +430 B

Commit: c2914a1

Copy link
Member

@ijjk ijjk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍

@ijjk
Copy link
Member

ijjk commented Feb 28, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 9.8s 9.8s ⚠️ +21ms
nodeModulesSize 56.3 MB 56.3 MB ⚠️ +4.33 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 4.98 kB 5.41 kB ⚠️ +433 B
webpack-HASH.js gzip 746 B 746 B
de003c3a9d30..7030.js gzip 9.68 kB 9.68 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 54.6 kB 55 kB ⚠️ +433 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.1 kB 4.44 kB ⚠️ +336 B
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..dule.js gzip 6.63 kB 6.63 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 50.6 kB 51 kB ⚠️ +336 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 18.9 kB 18.9 kB
Overall change 18.9 kB 18.9 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.07 kB 1.07 kB
_error.js gzip 2.98 kB 2.98 kB
hooks.js gzip 664 B 664 B
index.js gzip 222 B 222 B
link.js gzip 1.9 kB 1.9 kB
routerDirect.js gzip 279 B 279 B
withRouter.js gzip 278 B 278 B
Overall change 7.39 kB 7.39 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 589 B 589 B
_error.module.js gzip 2.08 kB 2.08 kB
hooks.module.js gzip 370 B 370 B
index.module.js gzip 212 B 212 B
link.module.js gzip 1.48 kB 1.48 kB
routerDirect..dule.js gzip 271 B 271 B
withRouter.m..dule.js gzip 270 B 270 B
Overall change 5.27 kB 5.27 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
index.html gzip 923 B 924 B ⚠️ +1 B
link.html gzip 931 B 932 B ⚠️ +1 B
withRouter.html gzip 922 B 922 B
Overall change 2.78 kB 2.78 kB ⚠️ +2 B

Diffs

Diff for index.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-096bd8ab17244599270a.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-2b808e3f067a9602ff7c.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-096bd8ab17244599270a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-82d9abb5d49062112928.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-a63cc20faef8b2789db9.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-82d9abb5d49062112928.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for main-HASH.module.js
@@ -194,6 +194,8 @@ var _routerContext = __webpack_require__("qOIg");
 var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
+
+var _performanceRelayer = __webpack_require__("bGXG");
 /* global location */
 
 
@@ -334,13 +336,15 @@ var _default = async function _default(_temp) {
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       } = _ref2;
       mod.unstable_onPerformanceData({
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       });
     };
   }
@@ -481,14 +485,9 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(list => {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      (0, _performanceRelayer.observeLayoutShift)(onPerfEntry);
+      (0, _performanceRelayer.observeLargestContentfulPaint)(onPerfEntry);
+      (0, _performanceRelayer.observePaint)(onPerfEntry);
     } catch (e) {
       window.addEventListener('load', () => {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
@@ -623,6 +622,93 @@ async function doRender(_ref5) {
 
 /***/ }),
 
+/***/ "bGXG":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.observeLayoutShift = observeLayoutShift;
+exports.observeLargestContentfulPaint = observeLargestContentfulPaint;
+exports.observePaint = observePaint;
+
+function isTypeSupported(type) {
+  if (self.PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+    return PerformanceObserver.supportedEntryTypes.includes(type);
+  }
+
+  return false;
+}
+
+function observeLayoutShift(onPerfEntry) {
+  if (isTypeSupported('layout-shift')) {
+    var cumulativeScore = 0;
+    var observer = new PerformanceObserver(list => {
+      for (var entry of list.getEntries()) {
+        // Only count layout shifts without recent user input.
+        if (!entry.hadRecentInput) {
+          cumulativeScore += entry.value;
+        }
+      }
+    });
+    observer.observe({
+      type: 'layout-shift',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function clsObserver() {
+      if (document.visibilityState === 'hidden') {
+        // Force any pending records to be dispatched.
+        observer.takeRecords();
+        observer.disconnect();
+        removeEventListener('visibilitychange', clsObserver, true);
+        onPerfEntry({
+          name: 'cumulative-layout-shift',
+          value: cumulativeScore
+        });
+      }
+    }, true);
+  }
+}
+
+function observeLargestContentfulPaint(onPerfEntry) {
+  if (isTypeSupported('largest-contentful-paint')) {
+    // Create a variable to hold the latest LCP value (since it can change).
+    var lcp; // Create the PerformanceObserver instance.
+
+    var observer = new PerformanceObserver(entryList => {
+      var entries = entryList.getEntries();
+      var lastEntry = entries[entries.length - 1];
+      lcp = lastEntry.renderTime || lastEntry.loadTime;
+    });
+    observer.observe({
+      type: 'largest-contentful-paint',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function lcpObserver() {
+      if (lcp && document.visibilityState === 'hidden') {
+        removeEventListener('visibilitychange', lcpObserver, true);
+        onPerfEntry({
+          name: 'largest-contentful-paint',
+          value: lcp
+        });
+      }
+    }, true);
+  }
+}
+
+function observePaint(onPerfEntry) {
+  var observer = new PerformanceObserver(list => {
+    list.getEntries().forEach(onPerfEntry);
+  });
+  observer.observe({
+    type: 'paint',
+    buffered: true
+  });
+}
+
+/***/ }),
+
 /***/ "pVnL":
 /***/ (function(module, exports) {
Diff for main-HASH.js
@@ -230,6 +230,8 @@ var _routerContext = __webpack_require__("qOIg");
 var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
+
+var _performanceRelayer = __webpack_require__("bGXG");
 /* global location */
 
 
@@ -394,12 +396,14 @@ var _default = function _default(_temp) {
               var name = _ref2.name,
                   startTime = _ref2.startTime,
                   value = _ref2.value,
-                  duration = _ref2.duration;
+                  duration = _ref2.duration,
+                  entryType = _ref2.entryType;
               mod.unstable_onPerformanceData({
                 name: name,
                 startTime: startTime,
                 value: value,
-                duration: duration
+                duration: duration,
+                entryType: entryType
               });
             };
           }
@@ -646,14 +650,9 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(function (list) {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      (0, _performanceRelayer.observeLayoutShift)(onPerfEntry);
+      (0, _performanceRelayer.observeLargestContentfulPaint)(onPerfEntry);
+      (0, _performanceRelayer.observePaint)(onPerfEntry);
     } catch (e) {
       window.addEventListener('load', function () {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
@@ -854,6 +853,114 @@ module.exports = _possibleConstructorReturn;
 
 /***/ }),
 
+/***/ "bGXG":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.observeLayoutShift = observeLayoutShift;
+exports.observeLargestContentfulPaint = observeLargestContentfulPaint;
+exports.observePaint = observePaint;
+
+function isTypeSupported(type) {
+  if (self.PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+    return PerformanceObserver.supportedEntryTypes.includes(type);
+  }
+
+  return false;
+}
+
+function observeLayoutShift(onPerfEntry) {
+  if (isTypeSupported('layout-shift')) {
+    var cumulativeScore = 0;
+    var observer = new PerformanceObserver(function (list) {
+      var _iteratorNormalCompletion = true;
+      var _didIteratorError = false;
+      var _iteratorError = undefined;
+
+      try {
+        for (var _iterator = list.getEntries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+          var entry = _step.value;
+
+          // Only count layout shifts without recent user input.
+          if (!entry.hadRecentInput) {
+            cumulativeScore += entry.value;
+          }
+        }
+      } catch (err) {
+        _didIteratorError = true;
+        _iteratorError = err;
+      } finally {
+        try {
+          if (!_iteratorNormalCompletion && _iterator["return"] != null) {
+            _iterator["return"]();
+          }
+        } finally {
+          if (_didIteratorError) {
+            throw _iteratorError;
+          }
+        }
+      }
+    });
+    observer.observe({
+      type: 'layout-shift',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function clsObserver() {
+      if (document.visibilityState === 'hidden') {
+        // Force any pending records to be dispatched.
+        observer.takeRecords();
+        observer.disconnect();
+        removeEventListener('visibilitychange', clsObserver, true);
+        onPerfEntry({
+          name: 'cumulative-layout-shift',
+          value: cumulativeScore
+        });
+      }
+    }, true);
+  }
+}
+
+function observeLargestContentfulPaint(onPerfEntry) {
+  if (isTypeSupported('largest-contentful-paint')) {
+    // Create a variable to hold the latest LCP value (since it can change).
+    var lcp; // Create the PerformanceObserver instance.
+
+    var observer = new PerformanceObserver(function (entryList) {
+      var entries = entryList.getEntries();
+      var lastEntry = entries[entries.length - 1];
+      lcp = lastEntry.renderTime || lastEntry.loadTime;
+    });
+    observer.observe({
+      type: 'largest-contentful-paint',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function lcpObserver() {
+      if (lcp && document.visibilityState === 'hidden') {
+        removeEventListener('visibilitychange', lcpObserver, true);
+        onPerfEntry({
+          name: 'largest-contentful-paint',
+          value: lcp
+        });
+      }
+    }, true);
+  }
+}
+
+function observePaint(onPerfEntry) {
+  var observer = new PerformanceObserver(function (list) {
+    list.getEntries().forEach(onPerfEntry);
+  });
+  observer.observe({
+    type: 'paint',
+    buffered: true
+  });
+}
+
+/***/ }),
+
 /***/ "pVnL":
 /***/ (function(module, exports) {
Diff for link.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-096bd8ab17244599270a.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-2b808e3f067a9602ff7c.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-096bd8ab17244599270a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-82d9abb5d49062112928.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-a63cc20faef8b2789db9.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-82d9abb5d49062112928.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for withRouter.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-096bd8ab17244599270a.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-2b808e3f067a9602ff7c.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-096bd8ab17244599270a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-82d9abb5d49062112928.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-a63cc20faef8b2789db9.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-82d9abb5d49062112928.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 10.6s 10.4s -175ms
nodeModulesSize 56.3 MB 56.3 MB ⚠️ +4.33 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 4.98 kB 5.41 kB ⚠️ +433 B
webpack-HASH.js gzip 746 B 746 B
de003c3a9d30..7030.js gzip 9.68 kB 9.68 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 54.6 kB 55 kB ⚠️ +433 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.1 kB 4.44 kB ⚠️ +336 B
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..dule.js gzip 6.63 kB 6.63 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 50.6 kB 51 kB ⚠️ +336 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 18.9 kB 18.9 kB
Overall change 18.9 kB 18.9 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.07 kB 1.07 kB
_error.js gzip 2.98 kB 2.98 kB
hooks.js gzip 664 B 664 B
index.js gzip 222 B 222 B
link.js gzip 1.9 kB 1.9 kB
routerDirect.js gzip 279 B 279 B
withRouter.js gzip 278 B 278 B
Overall change 7.39 kB 7.39 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 589 B 589 B
_error.module.js gzip 2.08 kB 2.08 kB
hooks.module.js gzip 370 B 370 B
index.module.js gzip 212 B 212 B
link.module.js gzip 1.48 kB 1.48 kB
routerDirect..dule.js gzip 271 B 271 B
withRouter.m..dule.js gzip 270 B 270 B
Overall change 5.27 kB 5.27 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall decrease ✓
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_error.js gzip 292 kB 292 kB -373 B
404.html gzip 1.33 kB 1.33 kB ⚠️ +3 B
hooks.html gzip 963 B 963 B
index.js gzip 293 kB 292 kB -705 B
link.js gzip 299 kB 300 kB ⚠️ +455 B
routerDirect.js gzip 298 kB 298 kB -18 B
withRouter.js gzip 299 kB 298 kB -828 B
Overall change 1.48 MB 1.48 MB -1.47 kB

Commit: b6c8821

@ijjk
Copy link
Member

ijjk commented Feb 28, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 8.4s 8.8s ⚠️ +345ms
nodeModulesSize 56.3 MB 56.3 MB ⚠️ +4.33 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 4.98 kB 5.41 kB ⚠️ +433 B
webpack-HASH.js gzip 746 B 746 B
de003c3a9d30..7030.js gzip 9.68 kB 9.68 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 54.6 kB 55 kB ⚠️ +433 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.1 kB 4.44 kB ⚠️ +336 B
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..dule.js gzip 6.63 kB 6.63 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 50.6 kB 51 kB ⚠️ +336 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 18.9 kB 18.9 kB
Overall change 18.9 kB 18.9 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.07 kB 1.07 kB
_error.js gzip 2.98 kB 2.98 kB
hooks.js gzip 664 B 664 B
index.js gzip 222 B 222 B
link.js gzip 1.9 kB 1.9 kB
routerDirect.js gzip 279 B 279 B
withRouter.js gzip 278 B 278 B
Overall change 7.39 kB 7.39 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 589 B 589 B
_error.module.js gzip 2.08 kB 2.08 kB
hooks.module.js gzip 370 B 370 B
index.module.js gzip 212 B 212 B
link.module.js gzip 1.48 kB 1.48 kB
routerDirect..dule.js gzip 271 B 271 B
withRouter.m..dule.js gzip 270 B 270 B
Overall change 5.27 kB 5.27 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
index.html gzip 923 B 924 B ⚠️ +1 B
link.html gzip 931 B 932 B ⚠️ +1 B
withRouter.html gzip 922 B 922 B
Overall change 2.78 kB 2.78 kB ⚠️ +2 B

Diffs

Diff for link.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-096bd8ab17244599270a.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-2b808e3f067a9602ff7c.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-096bd8ab17244599270a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/link.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-82d9abb5d49062112928.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div><h3>A Link page!</h3><a href="/">Go to /</a></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/link","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/link" src="/_next/static/BUILD_ID/pages/link.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-a63cc20faef8b2789db9.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-82d9abb5d49062112928.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for index.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-096bd8ab17244599270a.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-2b808e3f067a9602ff7c.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-096bd8ab17244599270a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/index.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-82d9abb5d49062112928.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next">Hello world 👋</div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/" src="/_next/static/BUILD_ID/pages/index.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-a63cc20faef8b2789db9.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-82d9abb5d49062112928.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
Diff for main-HASH.module.js
@@ -194,6 +194,8 @@ var _routerContext = __webpack_require__("qOIg");
 var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
+
+var _performanceRelayer = __webpack_require__("bGXG");
 /* global location */
 
 
@@ -334,13 +336,15 @@ var _default = async function _default(_temp) {
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       } = _ref2;
       mod.unstable_onPerformanceData({
         name,
         startTime,
         value,
-        duration
+        duration,
+        entryType
       });
     };
   }
@@ -481,14 +485,9 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(list => {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      (0, _performanceRelayer.observeLayoutShift)(onPerfEntry);
+      (0, _performanceRelayer.observeLargestContentfulPaint)(onPerfEntry);
+      (0, _performanceRelayer.observePaint)(onPerfEntry);
     } catch (e) {
       window.addEventListener('load', () => {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
@@ -623,6 +622,93 @@ async function doRender(_ref5) {
 
 /***/ }),
 
+/***/ "bGXG":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.observeLayoutShift = observeLayoutShift;
+exports.observeLargestContentfulPaint = observeLargestContentfulPaint;
+exports.observePaint = observePaint;
+
+function isTypeSupported(type) {
+  if (self.PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+    return PerformanceObserver.supportedEntryTypes.includes(type);
+  }
+
+  return false;
+}
+
+function observeLayoutShift(onPerfEntry) {
+  if (isTypeSupported('layout-shift')) {
+    var cumulativeScore = 0;
+    var observer = new PerformanceObserver(list => {
+      for (var entry of list.getEntries()) {
+        // Only count layout shifts without recent user input.
+        if (!entry.hadRecentInput) {
+          cumulativeScore += entry.value;
+        }
+      }
+    });
+    observer.observe({
+      type: 'layout-shift',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function clsObserver() {
+      if (document.visibilityState === 'hidden') {
+        // Force any pending records to be dispatched.
+        observer.takeRecords();
+        observer.disconnect();
+        removeEventListener('visibilitychange', clsObserver, true);
+        onPerfEntry({
+          name: 'cumulative-layout-shift',
+          value: cumulativeScore
+        });
+      }
+    }, true);
+  }
+}
+
+function observeLargestContentfulPaint(onPerfEntry) {
+  if (isTypeSupported('largest-contentful-paint')) {
+    // Create a variable to hold the latest LCP value (since it can change).
+    var lcp; // Create the PerformanceObserver instance.
+
+    var observer = new PerformanceObserver(entryList => {
+      var entries = entryList.getEntries();
+      var lastEntry = entries[entries.length - 1];
+      lcp = lastEntry.renderTime || lastEntry.loadTime;
+    });
+    observer.observe({
+      type: 'largest-contentful-paint',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function lcpObserver() {
+      if (lcp && document.visibilityState === 'hidden') {
+        removeEventListener('visibilitychange', lcpObserver, true);
+        onPerfEntry({
+          name: 'largest-contentful-paint',
+          value: lcp
+        });
+      }
+    }, true);
+  }
+}
+
+function observePaint(onPerfEntry) {
+  var observer = new PerformanceObserver(list => {
+    list.getEntries().forEach(onPerfEntry);
+  });
+  observer.observe({
+    type: 'paint',
+    buffered: true
+  });
+}
+
+/***/ }),
+
 /***/ "pVnL":
 /***/ (function(module, exports) {
Diff for main-HASH.js
@@ -230,6 +230,8 @@ var _routerContext = __webpack_require__("qOIg");
 var _querystring = __webpack_require__("s4NR");
 
 var _isDynamic = __webpack_require__("/jkW");
+
+var _performanceRelayer = __webpack_require__("bGXG");
 /* global location */
 
 
@@ -394,12 +396,14 @@ var _default = function _default(_temp) {
               var name = _ref2.name,
                   startTime = _ref2.startTime,
                   value = _ref2.value,
-                  duration = _ref2.duration;
+                  duration = _ref2.duration,
+                  entryType = _ref2.entryType;
               mod.unstable_onPerformanceData({
                 name: name,
                 startTime: startTime,
                 value: value,
-                duration: duration
+                duration: duration,
+                entryType: entryType
               });
             };
           }
@@ -646,14 +650,9 @@ function renderReactElement(reactEl, domEl) {
 
   if (onPerfEntry && _utils.ST) {
     try {
-      var observer = new PerformanceObserver(function (list) {
-        list.getEntries().forEach(onPerfEntry);
-      }); // Start observing paint entry types.
-
-      observer.observe({
-        type: 'paint',
-        buffered: true
-      });
+      (0, _performanceRelayer.observeLayoutShift)(onPerfEntry);
+      (0, _performanceRelayer.observeLargestContentfulPaint)(onPerfEntry);
+      (0, _performanceRelayer.observePaint)(onPerfEntry);
     } catch (e) {
       window.addEventListener('load', function () {
         performance.getEntriesByType('paint').forEach(onPerfEntry);
@@ -854,6 +853,114 @@ module.exports = _possibleConstructorReturn;
 
 /***/ }),
 
+/***/ "bGXG":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.observeLayoutShift = observeLayoutShift;
+exports.observeLargestContentfulPaint = observeLargestContentfulPaint;
+exports.observePaint = observePaint;
+
+function isTypeSupported(type) {
+  if (self.PerformanceObserver && PerformanceObserver.supportedEntryTypes) {
+    return PerformanceObserver.supportedEntryTypes.includes(type);
+  }
+
+  return false;
+}
+
+function observeLayoutShift(onPerfEntry) {
+  if (isTypeSupported('layout-shift')) {
+    var cumulativeScore = 0;
+    var observer = new PerformanceObserver(function (list) {
+      var _iteratorNormalCompletion = true;
+      var _didIteratorError = false;
+      var _iteratorError = undefined;
+
+      try {
+        for (var _iterator = list.getEntries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+          var entry = _step.value;
+
+          // Only count layout shifts without recent user input.
+          if (!entry.hadRecentInput) {
+            cumulativeScore += entry.value;
+          }
+        }
+      } catch (err) {
+        _didIteratorError = true;
+        _iteratorError = err;
+      } finally {
+        try {
+          if (!_iteratorNormalCompletion && _iterator["return"] != null) {
+            _iterator["return"]();
+          }
+        } finally {
+          if (_didIteratorError) {
+            throw _iteratorError;
+          }
+        }
+      }
+    });
+    observer.observe({
+      type: 'layout-shift',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function clsObserver() {
+      if (document.visibilityState === 'hidden') {
+        // Force any pending records to be dispatched.
+        observer.takeRecords();
+        observer.disconnect();
+        removeEventListener('visibilitychange', clsObserver, true);
+        onPerfEntry({
+          name: 'cumulative-layout-shift',
+          value: cumulativeScore
+        });
+      }
+    }, true);
+  }
+}
+
+function observeLargestContentfulPaint(onPerfEntry) {
+  if (isTypeSupported('largest-contentful-paint')) {
+    // Create a variable to hold the latest LCP value (since it can change).
+    var lcp; // Create the PerformanceObserver instance.
+
+    var observer = new PerformanceObserver(function (entryList) {
+      var entries = entryList.getEntries();
+      var lastEntry = entries[entries.length - 1];
+      lcp = lastEntry.renderTime || lastEntry.loadTime;
+    });
+    observer.observe({
+      type: 'largest-contentful-paint',
+      buffered: true
+    });
+    document.addEventListener('visibilitychange', function lcpObserver() {
+      if (lcp && document.visibilityState === 'hidden') {
+        removeEventListener('visibilitychange', lcpObserver, true);
+        onPerfEntry({
+          name: 'largest-contentful-paint',
+          value: lcp
+        });
+      }
+    }, true);
+  }
+}
+
+function observePaint(onPerfEntry) {
+  var observer = new PerformanceObserver(function (list) {
+    list.getEntries().forEach(onPerfEntry);
+  });
+  observer.observe({
+    type: 'paint',
+    buffered: true
+  });
+}
+
+/***/ }),
+
 /***/ "pVnL":
 /***/ (function(module, exports) {
Diff for withRouter.html
@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-096bd8ab17244599270a.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-2b808e3f067a9602ff7c.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-096bd8ab17244599270a.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/BUILD_ID/pages/withRouter.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/BUILD_ID/pages/_app.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" as="script" crossorigin="anonymous"/><link rel="preload" href="/_next/static/runtime/main-82d9abb5d49062112928.module.js" as="script" crossorigin="anonymous"/></head><body><div id="__next"><div>I use withRouter</div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{}},"page":"/withRouter","query":{},"buildId":"BUILD_ID","isFallback":false}</script><script crossorigin="anonymous" nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" nomodule="" src="/_next/static/runtime/polyfills-1ac1d7fc1d59311e5a47.js"></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/withRouter" src="/_next/static/BUILD_ID/pages/withRouter.module.js" crossorigin="anonymous" type="module"></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.js" crossorigin="anonymous" nomodule=""></script><script async="" data-next-page="/_app" src="/_next/static/BUILD_ID/pages/_app.module.js" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/webpack-4d739ac7b0d8f888ab18.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.aca3489c7aa06f6c44cd.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.41cad24c1ccd64f4ebcf.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/runtime/main-a63cc20faef8b2789db9.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/runtime/main-82d9abb5d49062112928.module.js" async="" crossorigin="anonymous" type="module"></script><script src="/_next/static/BUILD_ID/_buildManifest.js" async="" crossorigin="anonymous" nomodule=""></script><script src="/_next/static/BUILD_ID/_buildManifest.module.js" async="" crossorigin="anonymous" type="module"></script></body></html>
\ No newline at end of file

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
buildDuration 10.3s 9.2s -1.1s
nodeModulesSize 56.3 MB 56.3 MB ⚠️ +4.33 kB
Client Bundles (main, webpack, commons) Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.js gzip 4.98 kB 5.41 kB ⚠️ +433 B
webpack-HASH.js gzip 746 B 746 B
de003c3a9d30..7030.js gzip 9.68 kB 9.68 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 54.6 kB 55 kB ⚠️ +433 B
Client Bundles (main, webpack, commons) Modern Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
main-HASH.module.js gzip 4.1 kB 4.44 kB ⚠️ +336 B
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..dule.js gzip 6.63 kB 6.63 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 50.6 kB 51 kB ⚠️ +336 B
Legacy Client Bundles (polyfills)
zeit/next.js canary azukaru/next.js morePerfNumbers Change
polyfills-HASH.js gzip 18.9 kB 18.9 kB
Overall change 18.9 kB 18.9 kB
Client Pages
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.js gzip 1.07 kB 1.07 kB
_error.js gzip 2.98 kB 2.98 kB
hooks.js gzip 664 B 664 B
index.js gzip 222 B 222 B
link.js gzip 1.9 kB 1.9 kB
routerDirect.js gzip 279 B 279 B
withRouter.js gzip 278 B 278 B
Overall change 7.39 kB 7.39 kB
Client Pages Modern
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_app.module.js gzip 589 B 589 B
_error.module.js gzip 2.08 kB 2.08 kB
hooks.module.js gzip 370 B 370 B
index.module.js gzip 212 B 212 B
link.module.js gzip 1.48 kB 1.48 kB
routerDirect..dule.js gzip 271 B 271 B
withRouter.m..dule.js gzip 270 B 270 B
Overall change 5.27 kB 5.27 kB
Client Build Manifests
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary azukaru/next.js morePerfNumbers Change
_error.js gzip 292 kB 292 kB ⚠️ +103 B
404.html gzip 1.33 kB 1.33 kB ⚠️ +3 B
hooks.html gzip 963 B 963 B
index.js gzip 292 kB 292 kB -126 B
link.js gzip 299 kB 300 kB ⚠️ +776 B
routerDirect.js gzip 298 kB 299 kB ⚠️ +1.19 kB
withRouter.js gzip 298 kB 299 kB ⚠️ +1.1 kB
Overall change 1.48 MB 1.48 MB ⚠️ +3.05 kB

Commit: f1b4f54

@ijjk ijjk merged commit 5a82812 into vercel:canary Feb 28, 2020
@vercel vercel locked as resolved and limited conversation to collaborators Jan 31, 2022
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.

None yet

4 participants