Navigation Menu

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

Revert "feat(build): Transpile assuming higher version of runtime" #10233

Merged
merged 2 commits into from Jan 23, 2020

Conversation

Timer
Copy link
Member

@Timer Timer commented Jan 23, 2020

Reverts #9511

This removes the polyfillying of the Math object.

This has never been polyfilled previously, nor in a stable.

@Timer Timer added this to the 9.2.1 milestone Jan 23, 2020
@ijjk
Copy link
Member

ijjk commented Jan 23, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall decrease ✓
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
buildDuration 12.1s 12.4s ⚠️ +348ms
nodeModulesSize 51.3 MB 51.3 MB -138 B
Client Bundles (main, webpack, commons)
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
main-HASH.js gzip 5.1 kB 5.1 kB
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..d57b.js gzip 16.1 kB 16.1 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 69.8 kB 69.8 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
main-HASH.module.js gzip 4.1 kB 4.1 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15 kB 15 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.5 kB 64.5 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version 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 zeit/next.js revert-9511-feat/transform-runtime-version 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 zeit/next.js revert-9511-feat/transform-runtime-version 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 zeit/next.js revert-9511-feat/transform-runtime-version 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
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
index.html gzip 1.02 kB 1.02 kB
link.html gzip 1.03 kB 1.03 kB
withRouter.html gzip 1.02 kB 1.02 kB
Overall change 3.07 kB 3.07 kB

Serverless Mode (Decrease detected ✓)
General Overall decrease ✓
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
buildDuration 13.4s 13.2s -133ms
nodeModulesSize 51.3 MB 51.3 MB -138 B
Client Bundles (main, webpack, commons)
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
main-HASH.js gzip 5.1 kB 5.1 kB
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..d57b.js gzip 16.1 kB 16.1 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 69.8 kB 69.8 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
main-HASH.module.js gzip 4.1 kB 4.1 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15 kB 15 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.5 kB 64.5 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version 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 zeit/next.js revert-9511-feat/transform-runtime-version 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 zeit/next.js revert-9511-feat/transform-runtime-version 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 zeit/next.js revert-9511-feat/transform-runtime-version Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
_error.js gzip 46.2 kB 46.2 kB
hooks.html gzip 1.06 kB 1.06 kB
index.js gzip 46.4 kB 46.4 kB
link.js gzip 71.9 kB 71.9 kB
routerDirect.js gzip 69.9 kB 69.9 kB
withRouter.js gzip 69.9 kB 69.9 kB
Overall change 305 kB 305 kB

Commit: 94ee7b4

@ijjk
Copy link
Member

ijjk commented Jan 23, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall decrease ✓
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
buildDuration 10.9s 11s ⚠️ +143ms
nodeModulesSize 51.3 MB 51.3 MB -138 B
Client Bundles (main, webpack, commons)
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
main-HASH.js gzip 5.1 kB 5.1 kB
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..d57b.js gzip 16.1 kB 16.1 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 69.8 kB 69.8 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
main-HASH.module.js gzip 4.1 kB 4.1 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15 kB 15 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.5 kB 64.5 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version 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 zeit/next.js revert-9511-feat/transform-runtime-version 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 zeit/next.js revert-9511-feat/transform-runtime-version 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 zeit/next.js revert-9511-feat/transform-runtime-version 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
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
index.html gzip 1.02 kB 1.02 kB
link.html gzip 1.03 kB 1.03 kB
withRouter.html gzip 1.02 kB 1.02 kB
Overall change 3.07 kB 3.07 kB

Serverless Mode (Decrease detected ✓)
General Overall decrease ✓
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
buildDuration 11.4s 11.1s -252ms
nodeModulesSize 51.3 MB 51.3 MB -138 B
Client Bundles (main, webpack, commons)
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
main-HASH.js gzip 5.1 kB 5.1 kB
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..d57b.js gzip 16.1 kB 16.1 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 69.8 kB 69.8 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
main-HASH.module.js gzip 4.1 kB 4.1 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 15 kB 15 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 64.5 kB 64.5 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version 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 zeit/next.js revert-9511-feat/transform-runtime-version 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 zeit/next.js revert-9511-feat/transform-runtime-version 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 zeit/next.js revert-9511-feat/transform-runtime-version Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles
zeit/next.js canary zeit/next.js revert-9511-feat/transform-runtime-version Change
_error.js gzip 46.2 kB 46.2 kB
hooks.html gzip 1.06 kB 1.06 kB
index.js gzip 46.4 kB 46.4 kB
link.js gzip 71.9 kB 71.9 kB
routerDirect.js gzip 69.9 kB 69.9 kB
withRouter.js gzip 69.9 kB 69.9 kB
Overall change 305 kB 305 kB

Commit: c7e0b90

@Timer Timer merged commit 3c3186e into canary Jan 23, 2020
@Timer Timer deleted the revert-9511-feat/transform-runtime-version branch January 23, 2020 14:04
@merceyz
Copy link
Contributor

merceyz commented Jan 23, 2020

This has never been polyfilled previously, nor in a stable.

transform-runtime includes all polyfills, even if you don't need them. preset-env applies them only if your target needs them[1]

1: babel/babel#11013 (comment)

@Timer
Copy link
Member Author

Timer commented Jan 23, 2020

Transform runtime will only attempt to polyfill Math if the version is configured:

https://github.com/babel/babel/blob/1815c349877acca1d3275ea72512ee7824db49e3/packages/babel-plugin-transform-runtime/src/runtime-corejs2-definitions.js#L6

Since the default is below the above tested range, they're never polyfilled even if used:
https://github.com/babel/babel/blob/1815c349877acca1d3275ea72512ee7824db49e3/packages/babel-plugin-transform-runtime/src/index.js#L42

This has never been polyfilled previously, nor in a stable.

This is referring specifically to the above behavior, that Next.js wouldn't polyfill the Math functions even if used.

Read on:


Unfortunately, transform runtime is a very ineffective/inefficient means of polyfilling. We're in process of eliminating this transform entirely, and enabling Math would increase the global polyfills we'd need to ship by default.

We'll (maybe) polyfill Math eventually, but using a custom Babel plugin, along these lines:

// Incomplete
export default ({ types: t }) => {
  function getName(path) {
    path = path.resolve();
    if (t.isMemberExpression(path)) {
      return getName(path.get('object')) +'.'+ getName(path.get('property'));
    }
    return t.isIdentifier(path) && path.node.name;
  }
  
  return {
    visitor: {
      'MemberExpression|Identifier'(path) {
        const name = getName(path);
        const m = name.match(/^(?:(?:window|top|self)\.)*Math\.(\w+)$/);
        if (!m) return;
        const ident = path.scope.generateUidIdentifier(m[1]);
        // todo: import helper lib
        path.replaceWith(ident);
      }
    }
  };
};

Also, the reasons for adding this property were argued to be a "observable size reduction". However, this is never observed.

See the diff bot shows absolutely zero difference in output with this option applied:
#9511 (comment)

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

3 participants