babel/packages
Huáng Jùnliàng 03e8476b27
Generator performance (#13593)
* bench: setup benchmarks

* add charcodes

* perf: use string as buffer backend

baseline 256 empty statements: 3_718 ops/sec ±18.65% (0.269ms)
baseline 512 empty statements: 2_070 ops/sec ±0.96% (0.483ms)
baseline 1024 empty statements: 1_012 ops/sec ±1.76% (0.988ms)
baseline 2048 empty statements: 510 ops/sec ±1.53% (1.96ms)
current 256 empty statements: 3_965 ops/sec ±21.14% (0.252ms)
current 512 empty statements: 2_219 ops/sec ±1.29% (0.451ms)
current 1024 empty statements: 1_089 ops/sec ±1.53% (0.918ms)
current 2048 empty statements: 548 ops/sec ±1.87% (1.824ms)

* perf: add endsWithCharAndNewline

baseline 256 1-length identifiers: 1_947 ops/sec ±25.11% (0.514ms)
baseline 512 1-length identifiers: 1_115 ops/sec ±0.89% (0.897ms)
baseline 1024 1-length identifiers: 537 ops/sec ±1.71% (1.862ms)
baseline 2048 1-length identifiers: 273 ops/sec ±0.57% (3.669ms)
current 256 1-length identifiers: 2_178 ops/sec ±27.17% (0.459ms)
current 512 1-length identifiers: 1_250 ops/sec ±1.19% (0.8ms)
current 1024 1-length identifiers: 622 ops/sec ±0.71% (1.608ms)
current 2048 1-length identifiers: 308 ops/sec ±1.35% (3.251ms)

* perf: avoid one byte string compare

* perf: avoid scaning word for /

* perf: hoist babel type methods

baseline 256 25-length identifiers: 1_869 ops/sec ±29.4% (0.535ms)
baseline 512 25-length identifiers: 1_092 ops/sec ±1.62% (0.916ms)
baseline 1024 25-length identifiers: 537 ops/sec ±1.29% (1.862ms)
baseline 2048 25-length identifiers: 264 ops/sec ±2% (3.793ms)
current 256 25-length identifiers: 2_462 ops/sec ±23.38% (0.406ms)
current 512 25-length identifiers: 1_401 ops/sec ±0.73% (0.714ms)
current 1024 25-length identifiers: 671 ops/sec ±1.55% (1.491ms)
current 2048 25-length identifiers: 332 ops/sec ±1.44% (3.014ms)

* perf: hoist parens methods

baseline 256 1-length identifiers: 2_678 ops/sec ±24.96% (0.373ms)
baseline 512 1-length identifiers: 1_472 ops/sec ±2.33% (0.68ms)
baseline 1024 1-length identifiers: 737 ops/sec ±1.74% (1.357ms)
baseline 2048 1-length identifiers: 371 ops/sec ±0.79% (2.695ms)
current 256 1-length identifiers: 2_633 ops/sec ±32.44% (0.38ms)
current 512 1-length identifiers: 1_676 ops/sec ±1.49% (0.597ms)
current 1024 1-length identifiers: 803 ops/sec ±1.95% (1.246ms)
current 2048 1-length identifiers: 385 ops/sec ±2.22% (2.596ms)

* cleanup unused benchcase

* Update packages/babel-generator/src/buffer.ts

Co-authored-by: Nicolò Ribaudo <nicolo.ribaudo@gmail.com>

* cleanup benchmarks

Co-authored-by: Nicolò Ribaudo <nicolo.ribaudo@gmail.com>
2021-07-22 23:01:48 -04:00
..
2021-07-20 17:51:55 +00:00
2021-06-09 23:03:30 +00:00
2021-06-21 21:44:55 +00:00
2021-07-20 17:51:55 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-07-20 17:51:55 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-07-20 17:51:55 +00:00
2021-07-20 17:51:55 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-07-20 17:51:55 +00:00
2021-06-09 23:03:30 +00:00
2021-06-21 21:44:55 +00:00
2021-07-20 17:51:55 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-14 21:45:36 +00:00
2021-06-14 21:45:36 +00:00
2021-07-20 17:51:55 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-06-09 23:03:30 +00:00
2021-07-20 17:51:55 +00:00
2021-07-20 17:51:55 +00:00
2021-07-20 17:51:55 +00:00
2021-07-20 17:51:55 +00:00
2021-06-09 23:03:30 +00:00
2021-07-20 17:51:55 +00:00
2021-07-20 17:51:55 +00:00
2020-12-22 16:52:40 +01:00

Woah, what's going on here?

A monorepo, muhahahahahaha. See the monorepo design doc for reasoning.

Core Packages

Package Version Dependencies
@babel/core npm Dependency Status
@babel/parser npm Dependency Status
@babel/traverse npm Dependency Status
@babel/generator npm Dependency Status

@babel/core is the Babel compiler itself; it exposes the babel.transform method, where transformedCode = transform(src).code.

The compiler can be broken down into 3 parts:

The flow goes like this:

input string -> @babel/parser parser -> AST -> transformer[s] -> AST -> @babel/generator -> output string

Check out the babel-handbook for more information on this.

Other

Package Version Dependencies
@babel/cli npm Dependency Status
@babel/types npm Dependency Status
@babel/runtime npm Dependency Status
@babel/register npm Dependency Status
@babel/template npm Dependency Status
@babel/helpers npm Dependency Status
@babel/code-frame npm Dependency Status
  • @babel/cli is the CLI tool that runs @babel/core and helps with outputting to a directory, a file, stdout and more (also includes @babel/node cli). Check out the docs.
  • @babel/types is used to validate, build and change AST nodes.
  • @babel/runtime is similar to the polyfill except that it doesn't modify the global scope and is to be used with @babel/plugin-transform-runtime (usually in library/plugin code). Check out the docs.
  • @babel/register is a way to automatically compile files with Babel on the fly by binding to Node.js require. Check out the docs.
  • @babel/template is a helper function that allows constructing AST nodes from a string presentation of the code; this eliminates the tedium of using @babel/types for building AST nodes.
  • @babel/helpers is a set of pre-made @babel/template functions that are used in some Babel plugins.
  • @babel/code-frame is a standalone package used to generate errors that print the source code and point to error locations.

Presets

After Babel 6, the default transforms were removed; if you don't specify any plugins/presets, Babel will just return the original source code.

The transformer[s] used in Babel are the independent pieces of code that transform specific things. For example: the es2015-arrow-functions transform specifically changes arrow functions into regular functions. A preset is simply an array of plugins that make it easier to run a whole a set of transforms without specifying each one manually.

Package Version Dependencies Description
@babel/preset-env npm Dependency Status automatically determines plugins and polyfills you need based on your supported environments

You can find community maintained presets on npm

Plugins

Plugins are the heart of Babel and what make it work.

You can find community plugins on npm.

Transform Plugins

There are many kinds of plugins: ones that convert ES6/ES2015 to ES5, transform to ES3, minification, JSX, flow, experimental features, and more. Check out our website for more.

Syntax Plugins

These just enable the transform plugins to be able to parse certain features (the transform plugins already include the syntax plugins so you don't need both): @babel/plugin-syntax-x. Check out our website for more.

Helpers

These are mostly for internal use in various plugins: @babel/helper-x.