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

allow NextScript to optionally defer javascript #8980

Merged
merged 11 commits into from
Oct 26, 2019

Conversation

htbvo
Copy link
Contributor

@htbvo htbvo commented Oct 7, 2019

NextScript uses the async attribute to load javascript. The async attribute allows javascript parsing and execution to interrupt the main thread which could be in the middle of parsing the DOM. Interrupting the DOM will increase the time to first contentful paint.

This pull request adds optional attributes to NextScript to allow for using the defer tag instead. The defer tag allows javascript to be downloaded asynchronously, but defers parsing and execution until after the main thread has finished parsing the DOM.

Local testing with lighthouse shows about a 1 second improvement in first paint times. See attached images.

With the default async tag:
image

With the optional defer tag enabled:
image

@ijjk
Copy link
Member

ijjk commented Oct 7, 2019

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
buildDuration 14.9s 15.7s ⚠️ +787ms
nodeModulesSize 48.3 MB 48.3 MB ⚠️ +1.03 kB
Client Bundles (main, webpack, commons)
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.js 18.9 kB 18.9 kB
main-HASH.js gzip 6.79 kB 6.79 kB
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..2b8407376.js 21.9 kB 21.9 kB
4952ddcd88e7..7376.js gzip 7.81 kB 7.81 kB
de003c3a9d30..6604acae7.js 43.2 kB 43.2 kB
de003c3a9d30..cae7.js gzip 15.5 kB 15.5 kB
framework.5b..dbaff70d3.js 125 kB 125 kB
framework.5b..70d3.js gzip 39.4 kB 39.4 kB
Overall change 211 kB 211 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.module.js 17.2 kB 17.2 kB
main-HASH.module.js gzip 6.52 kB 6.52 kB
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..42.module.js 45.6 kB 45.6 kB
de003c3a9d30..dule.js gzip 16.5 kB 16.5 kB
framework.5b..d3.module.js 125 kB 125 kB
framework.5b..dule.js gzip 39.4 kB 39.4 kB
Overall change 190 kB 190 kB
Client Pages
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.js 1.81 kB 1.81 kB
_app.js gzip 873 B 873 B
_error.js 12 kB 12 kB
_error.js gzip 4.73 kB 4.73 kB
hooks.js 12.7 kB 12.7 kB
hooks.js gzip 4.79 kB 4.79 kB
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 8.14 kB 8.14 kB
link.js gzip 3.5 kB 3.5 kB
routerDirect.js 408 B 408 B
routerDirect.js gzip 281 B 281 B
withRouter.js 419 B 419 B
withRouter.js gzip 280 B 280 B
Overall change 35.8 kB 35.8 kB
Client Pages Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.module.js 1.7 kB 1.7 kB
_app.module.js gzip 832 B 832 B
_error.module.js 23.3 kB 23.3 kB
_error.module.js gzip 8.59 kB 8.59 kB
hooks.module.js 1.52 kB 1.52 kB
hooks.module.js gzip 793 B 793 B
index.module.js 294 B 294 B
index.module.js gzip 223 B 223 B
link.module.js 8.53 kB 8.53 kB
link.module.js gzip 3.68 kB 3.68 kB
routerDirect.module.js 394 B 394 B
routerDirect..dule.js gzip 281 B 281 B
withRouter.module.js 404 B 404 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 36.1 kB 36.1 kB
Client Build Manifests
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_buildManifest.js 81 B 81 B
_buildManifest.js gzip 61 B 61 B
_buildManifest.module.js 81 B 81 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 162 B 162 B
Rendered Page Sizes
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
index.html 3.62 kB 3.62 kB
index.html gzip 945 B 945 B
link.html 3.66 kB 3.66 kB
link.html gzip 953 B 953 B
withRouter.html 3.67 kB 3.67 kB
withRouter.html gzip 940 B 941 B ⚠️ +1 B
Overall change 10.9 kB 10.9 kB

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
buildDuration 15.7s 16.8s ⚠️ +1.1s
nodeModulesSize 48.3 MB 48.3 MB ⚠️ +1.03 kB
Client Bundles (main, webpack, commons)
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.js 18.9 kB 18.9 kB
main-HASH.js gzip 6.79 kB 6.79 kB
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..2b8407376.js 21.9 kB 21.9 kB
4952ddcd88e7..7376.js gzip 7.81 kB 7.81 kB
de003c3a9d30..6604acae7.js 43.2 kB 43.2 kB
de003c3a9d30..cae7.js gzip 15.5 kB 15.5 kB
framework.5b..dbaff70d3.js 125 kB 125 kB
framework.5b..70d3.js gzip 39.4 kB 39.4 kB
Overall change 211 kB 211 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.module.js 17.2 kB 17.2 kB
main-HASH.module.js gzip 6.52 kB 6.52 kB
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..42.module.js 45.6 kB 45.6 kB
de003c3a9d30..dule.js gzip 16.5 kB 16.5 kB
framework.5b..d3.module.js 125 kB 125 kB
framework.5b..dule.js gzip 39.4 kB 39.4 kB
Overall change 190 kB 190 kB
Client Pages
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.js 1.81 kB 1.81 kB
_app.js gzip 873 B 873 B
_error.js 12 kB 12 kB
_error.js gzip 4.73 kB 4.73 kB
hooks.js 12.7 kB 12.7 kB
hooks.js gzip 4.79 kB 4.79 kB
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 8.14 kB 8.14 kB
link.js gzip 3.5 kB 3.5 kB
routerDirect.js 408 B 408 B
routerDirect.js gzip 281 B 281 B
withRouter.js 419 B 419 B
withRouter.js gzip 280 B 280 B
Overall change 35.8 kB 35.8 kB
Client Pages Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.module.js 1.7 kB 1.7 kB
_app.module.js gzip 832 B 832 B
_error.module.js 23.3 kB 23.3 kB
_error.module.js gzip 8.59 kB 8.59 kB
hooks.module.js 1.52 kB 1.52 kB
hooks.module.js gzip 793 B 793 B
index.module.js 294 B 294 B
index.module.js gzip 223 B 223 B
link.module.js 8.53 kB 8.53 kB
link.module.js gzip 3.68 kB 3.68 kB
routerDirect.module.js 394 B 394 B
routerDirect..dule.js gzip 281 B 281 B
withRouter.module.js 404 B 404 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 36.1 kB 36.1 kB
Client Build Manifests
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_buildManifest.js 81 B 81 B
_buildManifest.js gzip 61 B 61 B
_buildManifest.module.js 81 B 81 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 162 B 162 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_error.js 253 kB 254 kB ⚠️ +362 B
_error.js gzip 67.9 kB 68 kB ⚠️ +51 B
hooks.html 3.75 kB 3.75 kB
hooks.html gzip 979 B 977 B -2 B
index.js 254 kB 254 kB ⚠️ +362 B
index.js gzip 68.2 kB 68.3 kB ⚠️ +54 B
link.js 261 kB 262 kB ⚠️ +362 B
link.js gzip 70.3 kB 70.3 kB ⚠️ +45 B
routerDirect.js 255 kB 255 kB ⚠️ +362 B
routerDirect.js gzip 68.3 kB 68.3 kB ⚠️ +50 B
withRouter.js 254 kB 255 kB ⚠️ +362 B
withRouter.js gzip 68.4 kB 68.4 kB ⚠️ +51 B
Overall change 1.28 MB 1.28 MB ⚠️ +1.81 kB

Commit: 65fa08f

@ijjk
Copy link
Member

ijjk commented Oct 7, 2019

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
buildDuration 15.2s 15.9s ⚠️ +692ms
nodeModulesSize 48.3 MB 48.3 MB ⚠️ +1.03 kB
Client Bundles (main, webpack, commons)
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.js 18.9 kB 18.9 kB
main-HASH.js gzip 6.79 kB 6.79 kB
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..2b8407376.js 21.9 kB 21.9 kB
4952ddcd88e7..7376.js gzip 7.81 kB 7.81 kB
de003c3a9d30..6604acae7.js 43.2 kB 43.2 kB
de003c3a9d30..cae7.js gzip 15.5 kB 15.5 kB
framework.5b..dbaff70d3.js 125 kB 125 kB
framework.5b..70d3.js gzip 39.4 kB 39.4 kB
Overall change 211 kB 211 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.module.js 17.2 kB 17.2 kB
main-HASH.module.js gzip 6.52 kB 6.52 kB
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..42.module.js 45.6 kB 45.6 kB
de003c3a9d30..dule.js gzip 16.5 kB 16.5 kB
framework.5b..d3.module.js 125 kB 125 kB
framework.5b..dule.js gzip 39.4 kB 39.4 kB
Overall change 190 kB 190 kB
Client Pages
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.js 1.81 kB 1.81 kB
_app.js gzip 873 B 873 B
_error.js 12 kB 12 kB
_error.js gzip 4.73 kB 4.73 kB
hooks.js 12.7 kB 12.7 kB
hooks.js gzip 4.79 kB 4.79 kB
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 8.14 kB 8.14 kB
link.js gzip 3.5 kB 3.5 kB
routerDirect.js 408 B 408 B
routerDirect.js gzip 281 B 281 B
withRouter.js 419 B 419 B
withRouter.js gzip 280 B 280 B
Overall change 35.8 kB 35.8 kB
Client Pages Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.module.js 1.7 kB 1.7 kB
_app.module.js gzip 832 B 832 B
_error.module.js 23.3 kB 23.3 kB
_error.module.js gzip 8.59 kB 8.59 kB
hooks.module.js 1.52 kB 1.52 kB
hooks.module.js gzip 793 B 793 B
index.module.js 294 B 294 B
index.module.js gzip 223 B 223 B
link.module.js 8.53 kB 8.53 kB
link.module.js gzip 3.68 kB 3.68 kB
routerDirect.module.js 394 B 394 B
routerDirect..dule.js gzip 281 B 281 B
withRouter.module.js 404 B 404 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 36.1 kB 36.1 kB
Client Build Manifests
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_buildManifest.js 81 B 81 B
_buildManifest.js gzip 61 B 61 B
_buildManifest.module.js 81 B 81 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 162 B 162 B
Rendered Page Sizes
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
index.html 3.62 kB 3.62 kB
index.html gzip 945 B 945 B
link.html 3.66 kB 3.66 kB
link.html gzip 953 B 953 B
withRouter.html 3.67 kB 3.67 kB
withRouter.html gzip 940 B 940 B
Overall change 10.9 kB 10.9 kB

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
buildDuration 15.3s 15.7s ⚠️ +441ms
nodeModulesSize 48.3 MB 48.3 MB ⚠️ +1.03 kB
Client Bundles (main, webpack, commons)
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.js 18.9 kB 18.9 kB
main-HASH.js gzip 6.79 kB 6.79 kB
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..2b8407376.js 21.9 kB 21.9 kB
4952ddcd88e7..7376.js gzip 7.81 kB 7.81 kB
de003c3a9d30..6604acae7.js 43.2 kB 43.2 kB
de003c3a9d30..cae7.js gzip 15.5 kB 15.5 kB
framework.5b..dbaff70d3.js 125 kB 125 kB
framework.5b..70d3.js gzip 39.4 kB 39.4 kB
Overall change 211 kB 211 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.module.js 17.2 kB 17.2 kB
main-HASH.module.js gzip 6.52 kB 6.52 kB
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..42.module.js 45.6 kB 45.6 kB
de003c3a9d30..dule.js gzip 16.5 kB 16.5 kB
framework.5b..d3.module.js 125 kB 125 kB
framework.5b..dule.js gzip 39.4 kB 39.4 kB
Overall change 190 kB 190 kB
Client Pages
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.js 1.81 kB 1.81 kB
_app.js gzip 873 B 873 B
_error.js 12 kB 12 kB
_error.js gzip 4.73 kB 4.73 kB
hooks.js 12.7 kB 12.7 kB
hooks.js gzip 4.79 kB 4.79 kB
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 8.14 kB 8.14 kB
link.js gzip 3.5 kB 3.5 kB
routerDirect.js 408 B 408 B
routerDirect.js gzip 281 B 281 B
withRouter.js 419 B 419 B
withRouter.js gzip 280 B 280 B
Overall change 35.8 kB 35.8 kB
Client Pages Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.module.js 1.7 kB 1.7 kB
_app.module.js gzip 832 B 832 B
_error.module.js 23.3 kB 23.3 kB
_error.module.js gzip 8.59 kB 8.59 kB
hooks.module.js 1.52 kB 1.52 kB
hooks.module.js gzip 793 B 793 B
index.module.js 294 B 294 B
index.module.js gzip 223 B 223 B
link.module.js 8.53 kB 8.53 kB
link.module.js gzip 3.68 kB 3.68 kB
routerDirect.module.js 394 B 394 B
routerDirect..dule.js gzip 281 B 281 B
withRouter.module.js 404 B 404 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 36.1 kB 36.1 kB
Client Build Manifests
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_buildManifest.js 81 B 81 B
_buildManifest.js gzip 61 B 61 B
_buildManifest.module.js 81 B 81 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 162 B 162 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_error.js 253 kB 254 kB ⚠️ +362 B
_error.js gzip 67.9 kB 68 kB ⚠️ +56 B
hooks.html 3.75 kB 3.75 kB
hooks.html gzip 979 B 979 B
index.js 254 kB 254 kB ⚠️ +362 B
index.js gzip 68.2 kB 68.3 kB ⚠️ +59 B
link.js 261 kB 262 kB ⚠️ +362 B
link.js gzip 70.3 kB 70.3 kB ⚠️ +51 B
routerDirect.js 255 kB 255 kB ⚠️ +362 B
routerDirect.js gzip 68.3 kB 68.3 kB ⚠️ +56 B
withRouter.js 254 kB 255 kB ⚠️ +362 B
withRouter.js gzip 68.4 kB 68.4 kB ⚠️ +56 B
Overall change 1.28 MB 1.28 MB ⚠️ +1.81 kB

Commit: 4da1ac1

@developit
Copy link
Contributor

Excellent description and I think this is a valid argument in favor of defer. However I'd wager defer is a more logical choice than async by default, so I'm not sure an option is even warranted. Next has experimental support for outputting module/nomodule, which actually requires defer in for classic scripts in order to ensure they function the same as their <script type=module> counterparts.

@htbvo
Copy link
Contributor Author

htbvo commented Oct 7, 2019

I'm in favor of switching to defer as the default. My reasoning for putting this change behind an optional prop is because the behavior changes are a bit subtle and because I am not sure if there are use cases for NextScript that require async instead of defer.

@htbvo
Copy link
Contributor Author

htbvo commented Oct 9, 2019

Can I get some feedback from the code owners? What else would I need to do to get this merged and released?

@timneutkens
Copy link
Member

@htbvo I think it would make sense to create an experimental option for this instead of a property on the element. Then it can be tested against real applications and changed to be a default similarly to what we're currently doing for modern and granularChunks.

@htbvo
Copy link
Contributor Author

htbvo commented Oct 14, 2019

@timneutkens I moved the flags into the experimental nextConfig options. Let me know if I've done it correctly or if I'm missing something. Thanks for the feedback!

@ijjk
Copy link
Member

ijjk commented Oct 14, 2019

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
buildDuration 15.7s 15.9s ⚠️ +202ms
nodeModulesSize 48.5 MB 48.5 MB ⚠️ +2.6 kB
Client Bundles (main, webpack, commons)
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.js 18.9 kB 18.9 kB
main-HASH.js gzip 6.79 kB 6.79 kB
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..9dda6167a.js 21.9 kB 21.9 kB
4952ddcd88e7..167a.js gzip 7.81 kB 7.81 kB
de003c3a9d30..3a0560775.js 43.2 kB 43.2 kB
de003c3a9d30..0775.js gzip 15.5 kB 15.5 kB
framework.5b..dbaff70d3.js 125 kB 125 kB
framework.5b..70d3.js gzip 39.4 kB 39.4 kB
Overall change 211 kB 211 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.module.js 17.2 kB 17.2 kB
main-HASH.module.js gzip 6.52 kB 6.52 kB
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..72.module.js 45.6 kB 45.6 kB
de003c3a9d30..dule.js gzip 16.5 kB 16.5 kB
framework.5b..d3.module.js 125 kB 125 kB
framework.5b..dule.js gzip 39.4 kB 39.4 kB
Overall change 190 kB 190 kB
Client Pages
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.js 1.81 kB 1.81 kB
_app.js gzip 873 B 873 B
_error.js 12 kB 12 kB
_error.js gzip 4.73 kB 4.73 kB
hooks.js 12.7 kB 12.7 kB
hooks.js gzip 4.79 kB 4.79 kB
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 8.14 kB 8.14 kB
link.js gzip 3.5 kB 3.5 kB
routerDirect.js 408 B 408 B
routerDirect.js gzip 281 B 281 B
withRouter.js 419 B 419 B
withRouter.js gzip 280 B 280 B
Overall change 35.8 kB 35.8 kB
Client Pages Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.module.js 1.7 kB 1.7 kB
_app.module.js gzip 832 B 832 B
_error.module.js 23.3 kB 23.3 kB
_error.module.js gzip 8.59 kB 8.59 kB
hooks.module.js 1.52 kB 1.52 kB
hooks.module.js gzip 793 B 793 B
index.module.js 294 B 294 B
index.module.js gzip 223 B 223 B
link.module.js 8.53 kB 8.53 kB
link.module.js gzip 3.68 kB 3.68 kB
routerDirect.module.js 394 B 394 B
routerDirect..dule.js gzip 281 B 281 B
withRouter.module.js 404 B 404 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 36.1 kB 36.1 kB
Client Build Manifests
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_buildManifest.js 81 B 81 B
_buildManifest.js gzip 61 B 61 B
_buildManifest.module.js 81 B 81 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 162 B 162 B
Rendered Page Sizes
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
index.html 3.62 kB 3.62 kB
index.html gzip 946 B 946 B
link.html 3.66 kB 3.66 kB
link.html gzip 954 B 954 B
withRouter.html 3.67 kB 3.67 kB
withRouter.html gzip 941 B 941 B
Overall change 10.9 kB 10.9 kB

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
buildDuration 16.6s 16.7s ⚠️ +82ms
nodeModulesSize 48.5 MB 48.5 MB ⚠️ +2.6 kB
Client Bundles (main, webpack, commons)
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.js 18.9 kB 18.9 kB
main-HASH.js gzip 6.79 kB 6.79 kB
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..9dda6167a.js 21.9 kB 21.9 kB
4952ddcd88e7..167a.js gzip 7.81 kB 7.81 kB
de003c3a9d30..3a0560775.js 43.2 kB 43.2 kB
de003c3a9d30..0775.js gzip 15.5 kB 15.5 kB
framework.5b..dbaff70d3.js 125 kB 125 kB
framework.5b..70d3.js gzip 39.4 kB 39.4 kB
Overall change 211 kB 211 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.module.js 17.2 kB 17.2 kB
main-HASH.module.js gzip 6.52 kB 6.52 kB
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..72.module.js 45.6 kB 45.6 kB
de003c3a9d30..dule.js gzip 16.5 kB 16.5 kB
framework.5b..d3.module.js 125 kB 125 kB
framework.5b..dule.js gzip 39.4 kB 39.4 kB
Overall change 190 kB 190 kB
Client Pages
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.js 1.81 kB 1.81 kB
_app.js gzip 873 B 873 B
_error.js 12 kB 12 kB
_error.js gzip 4.73 kB 4.73 kB
hooks.js 12.7 kB 12.7 kB
hooks.js gzip 4.79 kB 4.79 kB
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 8.14 kB 8.14 kB
link.js gzip 3.5 kB 3.5 kB
routerDirect.js 408 B 408 B
routerDirect.js gzip 281 B 281 B
withRouter.js 419 B 419 B
withRouter.js gzip 280 B 280 B
Overall change 35.8 kB 35.8 kB
Client Pages Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.module.js 1.7 kB 1.7 kB
_app.module.js gzip 832 B 832 B
_error.module.js 23.3 kB 23.3 kB
_error.module.js gzip 8.59 kB 8.59 kB
hooks.module.js 1.52 kB 1.52 kB
hooks.module.js gzip 793 B 793 B
index.module.js 294 B 294 B
index.module.js gzip 223 B 223 B
link.module.js 8.53 kB 8.53 kB
link.module.js gzip 3.68 kB 3.68 kB
routerDirect.module.js 394 B 394 B
routerDirect..dule.js gzip 281 B 281 B
withRouter.module.js 404 B 404 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 36.1 kB 36.1 kB
Client Build Manifests
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_buildManifest.js 81 B 81 B
_buildManifest.js gzip 61 B 61 B
_buildManifest.module.js 81 B 81 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 162 B 162 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_error.js 254 kB 254 kB ⚠️ +517 B
_error.js gzip 68 kB 68.1 kB ⚠️ +116 B
hooks.html 3.75 kB 3.75 kB
hooks.html gzip 979 B 979 B
index.js 254 kB 255 kB ⚠️ +517 B
index.js gzip 68.4 kB 68.5 kB ⚠️ +117 B
link.js 262 kB 262 kB ⚠️ +517 B
link.js gzip 70.4 kB 70.5 kB ⚠️ +111 B
routerDirect.js 255 kB 256 kB ⚠️ +517 B
routerDirect.js gzip 68.4 kB 68.5 kB ⚠️ +118 B
withRouter.js 255 kB 256 kB ⚠️ +517 B
withRouter.js gzip 68.5 kB 68.6 kB ⚠️ +115 B
Overall change 1.28 MB 1.29 MB ⚠️ +2.58 kB

Commit: fec4838

@@ -47,6 +47,10 @@ const defaultConfig: { [key: string]: any } = {
profiling: false,
publicDirectory: false,
sprFlushToDisk: true,
deferPageScript: false,
Copy link
Member

Choose a reason for hiding this comment

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

I feel like this should be 1 option instead of 4. The goal is to remove this option as soon as it's verified it improves metrics.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I could make it one option.

I made it separate flags originally because I wanted to allow as much flexibility as possible. There might be some scripts that you want to run as soon as the page loads, e.g. an analytics payload.

Copy link
Member

Choose a reason for hiding this comment

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

Based on the options you added you wouldn't be able to change that granularly though. It's also hard to single out that specific script or it's added through custom _document already (because they require a custom <script> to be inlined)

@ijjk
Copy link
Member

ijjk commented Oct 14, 2019

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
buildDuration 15.7s 15.9s ⚠️ +182ms
nodeModulesSize 48.5 MB 48.5 MB ⚠️ +602 B
Client Bundles (main, webpack, commons)
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.js 18.9 kB 18.9 kB
main-HASH.js gzip 6.79 kB 6.79 kB
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..9dda6167a.js 21.9 kB 21.9 kB
4952ddcd88e7..167a.js gzip 7.81 kB 7.81 kB
de003c3a9d30..3a0560775.js 43.2 kB 43.2 kB
de003c3a9d30..0775.js gzip 15.5 kB 15.5 kB
framework.5b..dbaff70d3.js 125 kB 125 kB
framework.5b..70d3.js gzip 39.4 kB 39.4 kB
Overall change 211 kB 211 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.module.js 17.2 kB 17.2 kB
main-HASH.module.js gzip 6.52 kB 6.52 kB
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..72.module.js 45.6 kB 45.6 kB
de003c3a9d30..dule.js gzip 16.5 kB 16.5 kB
framework.5b..d3.module.js 125 kB 125 kB
framework.5b..dule.js gzip 39.4 kB 39.4 kB
Overall change 190 kB 190 kB
Client Pages
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.js 1.81 kB 1.81 kB
_app.js gzip 873 B 873 B
_error.js 12 kB 12 kB
_error.js gzip 4.73 kB 4.73 kB
hooks.js 12.7 kB 12.7 kB
hooks.js gzip 4.79 kB 4.79 kB
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 8.14 kB 8.14 kB
link.js gzip 3.5 kB 3.5 kB
routerDirect.js 408 B 408 B
routerDirect.js gzip 281 B 281 B
withRouter.js 419 B 419 B
withRouter.js gzip 280 B 280 B
Overall change 35.8 kB 35.8 kB
Client Pages Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.module.js 1.7 kB 1.7 kB
_app.module.js gzip 832 B 832 B
_error.module.js 23.3 kB 23.3 kB
_error.module.js gzip 8.59 kB 8.59 kB
hooks.module.js 1.52 kB 1.52 kB
hooks.module.js gzip 793 B 793 B
index.module.js 294 B 294 B
index.module.js gzip 223 B 223 B
link.module.js 8.53 kB 8.53 kB
link.module.js gzip 3.68 kB 3.68 kB
routerDirect.module.js 394 B 394 B
routerDirect..dule.js gzip 281 B 281 B
withRouter.module.js 404 B 404 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 36.1 kB 36.1 kB
Client Build Manifests
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_buildManifest.js 81 B 81 B
_buildManifest.js gzip 61 B 61 B
_buildManifest.module.js 81 B 81 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 162 B 162 B
Rendered Page Sizes
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
index.html 3.62 kB 3.62 kB
index.html gzip 946 B 946 B
link.html 3.66 kB 3.66 kB
link.html gzip 954 B 954 B
withRouter.html 3.67 kB 3.67 kB
withRouter.html gzip 941 B 941 B
Overall change 10.9 kB 10.9 kB

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
buildDuration 16.4s 15.9s -472ms
nodeModulesSize 48.5 MB 48.5 MB ⚠️ +602 B
Client Bundles (main, webpack, commons)
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.js 18.9 kB 18.9 kB
main-HASH.js gzip 6.79 kB 6.79 kB
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..9dda6167a.js 21.9 kB 21.9 kB
4952ddcd88e7..167a.js gzip 7.81 kB 7.81 kB
de003c3a9d30..3a0560775.js 43.2 kB 43.2 kB
de003c3a9d30..0775.js gzip 15.5 kB 15.5 kB
framework.5b..dbaff70d3.js 125 kB 125 kB
framework.5b..70d3.js gzip 39.4 kB 39.4 kB
Overall change 211 kB 211 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.module.js 17.2 kB 17.2 kB
main-HASH.module.js gzip 6.52 kB 6.52 kB
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
de003c3a9d30..72.module.js 45.6 kB 45.6 kB
de003c3a9d30..dule.js gzip 16.5 kB 16.5 kB
framework.5b..d3.module.js 125 kB 125 kB
framework.5b..dule.js gzip 39.4 kB 39.4 kB
Overall change 190 kB 190 kB
Client Pages
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.js 1.81 kB 1.81 kB
_app.js gzip 873 B 873 B
_error.js 12 kB 12 kB
_error.js gzip 4.73 kB 4.73 kB
hooks.js 12.7 kB 12.7 kB
hooks.js gzip 4.79 kB 4.79 kB
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 8.14 kB 8.14 kB
link.js gzip 3.5 kB 3.5 kB
routerDirect.js 408 B 408 B
routerDirect.js gzip 281 B 281 B
withRouter.js 419 B 419 B
withRouter.js gzip 280 B 280 B
Overall change 35.8 kB 35.8 kB
Client Pages Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.module.js 1.7 kB 1.7 kB
_app.module.js gzip 832 B 832 B
_error.module.js 23.3 kB 23.3 kB
_error.module.js gzip 8.59 kB 8.59 kB
hooks.module.js 1.52 kB 1.52 kB
hooks.module.js gzip 793 B 793 B
index.module.js 294 B 294 B
index.module.js gzip 223 B 223 B
link.module.js 8.53 kB 8.53 kB
link.module.js gzip 3.68 kB 3.68 kB
routerDirect.module.js 394 B 394 B
routerDirect..dule.js gzip 281 B 281 B
withRouter.module.js 404 B 404 B
withRouter.m..dule.js gzip 278 B 278 B
Overall change 36.1 kB 36.1 kB
Client Build Manifests
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_buildManifest.js 81 B 81 B
_buildManifest.js gzip 61 B 61 B
_buildManifest.module.js 81 B 81 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 162 B 162 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_error.js 254 kB 254 kB ⚠️ +278 B
_error.js gzip 68 kB 68.1 kB ⚠️ +52 B
hooks.html 3.75 kB 3.75 kB
hooks.html gzip 979 B 979 B
index.js 254 kB 255 kB ⚠️ +278 B
index.js gzip 68.4 kB 68.4 kB ⚠️ +53 B
link.js 262 kB 262 kB ⚠️ +278 B
link.js gzip 70.4 kB 70.4 kB ⚠️ +51 B
routerDirect.js 255 kB 255 kB ⚠️ +278 B
routerDirect.js gzip 68.4 kB 68.5 kB ⚠️ +52 B
withRouter.js 255 kB 255 kB ⚠️ +278 B
withRouter.js gzip 68.5 kB 68.5 kB ⚠️ +51 B
Overall change 1.28 MB 1.29 MB ⚠️ +1.39 kB

Commit: 958fbbf

@htbvo
Copy link
Contributor Author

htbvo commented Oct 18, 2019

@timneutkens Is there anything else I need to do to get this PR merged and released?

@ijjk
Copy link
Member

ijjk commented Oct 26, 2019

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
buildDuration 15.8s 15.9s ⚠️ +26ms
nodeModulesSize 48.7 MB 48.7 MB ⚠️ +1 kB
Client Bundles (main, webpack, commons)
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.js 18.9 kB 18.9 kB
main-HASH.js gzip 6.8 kB 6.8 kB
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
16b1a7225520..4a7b46563.js 14.9 kB 14.9 kB
16b1a7225520..6563.js gzip 5.38 kB 5.38 kB
4952ddcd88e7..bfe360fe6.js 10.5 kB 10.5 kB
4952ddcd88e7..0fe6.js gzip 4.06 kB 4.06 kB
commons.HASH.js 11.3 kB 11.3 kB
commons.HASH.js gzip 4.23 kB 4.23 kB
de003c3a9d30..9e9c1d310.js 28.6 kB 28.6 kB
de003c3a9d30..d310.js gzip 10.8 kB 10.8 kB
framework.1b..cdcfe1283.js 125 kB 125 kB
framework.1b..1283.js gzip 39.4 kB 39.4 kB
Overall change 211 kB 211 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.module.js 17.2 kB 17.2 kB
main-HASH.module.js gzip 6.53 kB 6.53 kB
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
16b1a7225520..d2.module.js 10.8 kB 10.8 kB
16b1a7225520..dule.js gzip 4.05 kB 4.05 kB
4952ddcd88e7..4a.module.js 12.8 kB 12.8 kB
4952ddcd88e7..dule.js gzip 4.75 kB 4.75 kB
de003c3a9d30..11.module.js 22.1 kB 22.1 kB
de003c3a9d30..dule.js gzip 8.68 kB 8.68 kB
framework.5b..d3.module.js 125 kB 125 kB
framework.5b..dule.js gzip 39.4 kB 39.4 kB
Overall change 190 kB 190 kB
Client Pages
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.js 1.63 kB 1.63 kB
_app.js gzip 788 B 788 B
_error.js 12.3 kB 12.3 kB
_error.js gzip 4.79 kB 4.79 kB
hooks.js 1.51 kB 1.51 kB
hooks.js gzip 789 B 789 B
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 8.15 kB 8.15 kB
link.js gzip 3.5 kB 3.5 kB
routerDirect.js 413 B 413 B
routerDirect.js gzip 285 B 285 B
withRouter.js 423 B 423 B
withRouter.js gzip 284 B 284 B
Overall change 24.7 kB 24.7 kB
Client Pages Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.module.js 1.54 kB 1.54 kB
_app.module.js gzip 756 B 756 B
_error.module.js 10.6 kB 10.6 kB
_error.module.js gzip 4.28 kB 4.28 kB
hooks.module.js 1.52 kB 1.52 kB
hooks.module.js gzip 794 B 794 B
index.module.js 294 B 294 B
index.module.js gzip 223 B 223 B
link.module.js 8.53 kB 8.53 kB
link.module.js gzip 3.69 kB 3.69 kB
routerDirect.module.js 399 B 399 B
routerDirect..dule.js gzip 285 B 285 B
withRouter.module.js 409 B 409 B
withRouter.m..dule.js gzip 282 B 282 B
Overall change 23.3 kB 23.3 kB
Client Build Manifests
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_buildManifest.js 244 B 244 B
_buildManifest.js gzip 200 B 200 B
_buildManifest.module.js 251 B 251 B
_buildManife..dule.js gzip 209 B 209 B
Overall change 495 B 495 B
Rendered Page Sizes
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
index.html 3.94 kB 3.94 kB
index.html gzip 1 kB 1 kB
link.html 4.47 kB 4.47 kB
link.html gzip 1.08 kB 1.08 kB
withRouter.html 4.47 kB 4.47 kB
withRouter.html gzip 1.07 kB 1.07 kB
Overall change 12.9 kB 12.9 kB

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
buildDuration 16.6s 16.4s -142ms
nodeModulesSize 48.7 MB 48.7 MB ⚠️ +1 kB
Client Bundles (main, webpack, commons)
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.js 18.9 kB 18.9 kB
main-HASH.js gzip 6.8 kB 6.8 kB
webpack-HASH.js 1.53 kB 1.53 kB
webpack-HASH.js gzip 746 B 746 B
16b1a7225520..4a7b46563.js 14.9 kB 14.9 kB
16b1a7225520..6563.js gzip 5.38 kB 5.38 kB
4952ddcd88e7..bfe360fe6.js 10.5 kB 10.5 kB
4952ddcd88e7..0fe6.js gzip 4.06 kB 4.06 kB
commons.HASH.js 11.3 kB 11.3 kB
commons.HASH.js gzip 4.23 kB 4.23 kB
de003c3a9d30..9e9c1d310.js 28.6 kB 28.6 kB
de003c3a9d30..d310.js gzip 10.8 kB 10.8 kB
framework.1b..cdcfe1283.js 125 kB 125 kB
framework.1b..1283.js gzip 39.4 kB 39.4 kB
Overall change 211 kB 211 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
main-HASH.module.js 17.2 kB 17.2 kB
main-HASH.module.js gzip 6.53 kB 6.53 kB
webpack-HASH.module.js 1.53 kB 1.53 kB
webpack-HASH..dule.js gzip 746 B 746 B
16b1a7225520..d2.module.js 10.8 kB 10.8 kB
16b1a7225520..dule.js gzip 4.05 kB 4.05 kB
4952ddcd88e7..4a.module.js 12.8 kB 12.8 kB
4952ddcd88e7..dule.js gzip 4.75 kB 4.75 kB
de003c3a9d30..11.module.js 22.1 kB 22.1 kB
de003c3a9d30..dule.js gzip 8.68 kB 8.68 kB
framework.5b..d3.module.js 125 kB 125 kB
framework.5b..dule.js gzip 39.4 kB 39.4 kB
Overall change 190 kB 190 kB
Client Pages
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.js 1.63 kB 1.63 kB
_app.js gzip 788 B 788 B
_error.js 12.3 kB 12.3 kB
_error.js gzip 4.79 kB 4.79 kB
hooks.js 1.51 kB 1.51 kB
hooks.js gzip 789 B 789 B
index.js 318 B 318 B
index.js gzip 222 B 222 B
link.js 8.15 kB 8.15 kB
link.js gzip 3.5 kB 3.5 kB
routerDirect.js 413 B 413 B
routerDirect.js gzip 285 B 285 B
withRouter.js 423 B 423 B
withRouter.js gzip 284 B 284 B
Overall change 24.7 kB 24.7 kB
Client Pages Modern
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_app.module.js 1.54 kB 1.54 kB
_app.module.js gzip 756 B 756 B
_error.module.js 10.6 kB 10.6 kB
_error.module.js gzip 4.28 kB 4.28 kB
hooks.module.js 1.52 kB 1.52 kB
hooks.module.js gzip 794 B 794 B
index.module.js 294 B 294 B
index.module.js gzip 223 B 223 B
link.module.js 8.53 kB 8.53 kB
link.module.js gzip 3.69 kB 3.69 kB
routerDirect.module.js 399 B 399 B
routerDirect..dule.js gzip 285 B 285 B
withRouter.module.js 409 B 409 B
withRouter.m..dule.js gzip 282 B 282 B
Overall change 23.3 kB 23.3 kB
Client Build Manifests
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_buildManifest.js 244 B 244 B
_buildManifest.js gzip 200 B 200 B
_buildManifest.module.js 251 B 251 B
_buildManife..dule.js gzip 209 B 209 B
Overall change 495 B 495 B
Serverless bundles Overall increase ⚠️
zeit/next.js canary htbvo/next.js pluggable-script-load-attr Change
_error.js 234 kB 235 kB ⚠️ +224 B
_error.js gzip 62.8 kB 62.9 kB ⚠️ +31 B
hooks.html 4.08 kB 4.08 kB
hooks.html gzip 1.03 kB 1.03 kB
index.js 235 kB 235 kB ⚠️ +224 B
index.js gzip 62.9 kB 63 kB ⚠️ +24 B
link.js 267 kB 267 kB ⚠️ +224 B
link.js gzip 71.9 kB 71.9 kB ⚠️ +34 B
routerDirect.js 260 kB 260 kB ⚠️ +224 B
routerDirect.js gzip 69.9 kB 69.9 kB ⚠️ +32 B
withRouter.js 260 kB 260 kB ⚠️ +224 B
withRouter.js gzip 69.9 kB 69.9 kB ⚠️ +32 B
Overall change 1.26 MB 1.26 MB ⚠️ +1.12 kB

Commit: 55ed89a

@timneutkens timneutkens merged commit 211c84e into vercel:canary Oct 26, 2019
@timneutkens
Copy link
Member

Thanks @htbvo, I've updated the PR and added tests!

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.

4 participants