# In-depth AnalysisThe Web Tooling Benchmark contains interesting JavaScript workloads from a variety ofcommonly used web developer tools. It executes these core workloads a couple of timesreports a single score at the end that balances them using geometric mean.Note that scores of different versions of the Web Tooling Benchmark are not comparableto each other.## acorn[Acorn](https://github.com/ternjs/acorn) is a tiny, fast JavaScript parser, writtencompletely in JavaScript. Acorn is the basis for many other JavaScript compilerand code analysis tools, i.e. [webpack](https://webpack.js.org) uses acorn andthe [Babylon](https://github.com/babel/babylon) parser used by[Babel](http://babeljs.io) today is also based on acorn.This benchmarks runs the Acorn tokenizer, the parser and the full AST (AbstractSyntax Tree) walker on several popular inputs, including- the [Preact](https://github.com/developit/preact) 8.2.5 bundle,- the [lodash](https://lodash.com) 4.17.4 bundle,- the [underscore](http://underscorejs.org/) 1.8.3 bundle,- an ES2015 module containing the untranspiled [Vue](https://github.com/vuejs/vue) bundle,- the [jQuery](http://jquery.com) 3.2.1 distribution,- the minified [Redux](https://redux.js.org) 3.7.2 distribution,- the [Backbone.js](http://backbonejs.org) 1.1.0 bundle,- and the (concatenated) JavaScript source for the Vanilla ES2015 test in the [Speedometer](https://browserbench.org/Speedometer).## babel[Babel](https://github.com/babel/babel) is a transpiler that compiles modern JavaScipt(i.e. ES2015 and later) to an older JavaScript dialect (i.e. ES3 or ES5) that is understood by a broad set of browsers. It's probably the most popular transpiler atthis point in time and used in the vast majority of web projects nowadays.This benchmark runs the Babel transformation logic using the `es2015` preset on a 196KiBES2015 module containing the untranspiled [Vue](https://github.com/vuejs/vue) bundle.Note that this explicitly excludes the [Babylon](https://github.com/babel/babylon) parserand only measures the throughput of the actual transformations. The parser is testedseparately by the `babylon` benchmark below.## babel-minify[Babel Minify](https://github.com/babel/minify) is an ES2015+ aware minifier based on the Babel toolchain. It is written as a set of Babel plugins.This benchmark stresses the babel minifier on the (concatenated) JavaScript source for the ES2015 test in the [Speedometer](https://browserbench.org/Speedometer) 2.0 benchmark.## babylon[Babylon](https://github.com/babel/babylon) is the frontend for the Babel transpiler anddeals with transforming the JavaScript input into a so-called AST (Abstract Syntax Tree)that can be consumed by the core transformation logic in Babel. It is built on top of[Acorn](https://github.com/ternjs/acorn) nowadays.This benchmark runs the Babylon parser on different popular inputs, including the[Preact](https://github.com/developit/preact) 8.2.5 bundle, the [lodash](https://lodash.com)4.17.4 bundle, the JSX files from the React TodoMVC example app, the[underscore](http://underscorejs.org/) 1.8.3 bundle, an ES2015 module containing theuntranspiled [Vue](https://github.com/vuejs/vue) bundle, the [jQuery](http://jquery.com)3.2.1 distribution, the minified [Redux](https://redux.js.org) 3.7.2 distribution, andthe (concatenated) JavaScript source for the Vanilla ES2015 test in the[Speedometer](https://browserbench.org/Speedometer).## bubleA test to stress the [Buble](https://github.com/Rich-Harris/buble)ES2015 compiler, both the parser and the actual transformationlogic, on the same 196K ES2015 module containing the untranspiled[Vue](https://github.com/vuejs/vue) source code that is also usedto stress by the `babel` and `babylon` tests.## chai[Chai](http://chaijs.com) is a popular BDD / TDD assertion library for[Node](https://www.nodejs.org) and the browser that can be delightfullypaired with any test driver framework for JavaScript. It is commonly usedto write unit and integration tests. As such this test is not just a goodbenchmark for web tooling on the [Node](https://www.nodejs.org) side, butis also very relevant to the browser as tests often need to be run in thebrowser too.This benchmark is based on the test suite that comes with Chai andessentially uses the Chai BDD style interface to test the Chai libraryitself.## coffeescript[CoffeeScript](http://coffeescript.org/) is a little language that attempts to exposethe good parts of JavaScript in a simple way. At some point CoffeeScript was verypopular.This benchmark runs the CoffeeScript compiler on the [`lexer.coffee`](https://github.com/v8/web-tooling-benchmark/blob/third_party/coffeescript-lexer-2.0.1.coffee)file from the CoffeeScript 2.0.1 distribution.## espree[Espree](https://github.com/eslint/espree) started out as a fork of Esprima v1.2.2,the last stable published released of Esprima before work on ECMAScript 6 began.Espree is now built on top of Acorn, which has a modular architecture that allowsextension of core functionality. The goal of Espree is to produce output that issimilar to Esprima with a similar API so that it can be used in place of Esprima.The popular analysis framework [ESLint](https://eslint.org) is built on Espreetoday.This benchmark runs Espree on a several common scripts, including- the [Backbone.js](http://backbonejs.org) 1.1.0 bundle,- the [jQuery](http://jquery.com) 3.2.1 distribution,- the [MooTools](https://mootools.net) 1.6.0 bundle,- and the [underscore](http://underscorejs.org/) 1.8.3 bundle.## esprima[Esprima](http://esprima.org) is a high performance, standard-compliant ECMAScript parserwritten in ECMAScript, which can be used to perform [lexical analysis](https://en.wikipedia.org/wiki/Lexical_analysis)(tokenization) or [syntactic analysis](https://en.wikipedia.org/wiki/Parsing) (parsing)of an ECMAScript program. Esprima was initially used as the basis for several tools likeESLint and Babel, and is still in use by a lot of analysis tools.This benchmark runs both the tokenizer and the parser on a variety of common scripts,including- the [Backbone.js](http://backbonejs.org) 1.1.0 bundle,- the [jQuery](http://jquery.com) 3.2.1 distribution,- the [MooTools](https://mootools.net) 1.6.0 bundle,- and the [underscore](http://underscorejs.org/) 1.8.3 bundle.## jshint[JSHint](http://jshint.com) is a program that flags suspicious usage in programs writtenin JavaScript. At some point it was very popular, but nowadays it seems that many projectshave switch or are switching to [ESLint](https://eslint.org).This benchmark runs JSHint on- the [lodash](https://lodash.com) 4.17.4 bundle,- the [Preact](http://preactjs.com) 8.2.5 bundle,- and the [underscore](http://underscorejs.org) 1.8.3 distribution.## lebab[Lebab](https://github.com/lebab/lebab) transpiles your ES5 code to ES6/ES7, thusperforming the opposite of what [Babel](https://github.com/babel/babel) does.This benchmark runs the Lebal ES5 to ES6/ES7 transpiler on the[Preact](http://preactjs.com) 8.2.5 bundle.## postcss[PostCSS](https://github.com/postcss/postcss) is a tool for transforming styles with JS plugins.These plugins can lint your CSS, support variables and mixins, transpile future CSS syntax,inline images, and more.This benchmark runs the PostCSS processor with [Autoprefixer](https://github.com/postcss/autoprefixer)and [postcss-nested](https://github.com/postcss/postcss-nested) plugins on- the [Bootstrap](https://getbootstrap.com/) 4.0.0 bundle.- the [Foundation](https://foundation.zurb.com/) 6.4.2 bundle.- the [Angular Material](https://material.angularjs.org) 1.1.8 bundle.## prepack[Prepack](https://prepack.io) is a tool that optimizes JavaScript source code:Computations that can be done at compile-time instead of run-time get eliminated.Prepack replaces the global code of a JavaScript bundle with equivalent code thatis a simple sequence of assignments. This gets rid of most intermediate computationsand object allocations. It currently focuses on React Native use cases.This benchmark runs prepack on both- the [Preact](https://github.com/developit/preact) 8.2.5 bundle (unminified) as well as- the [Redux](https://github.com/reactjs/redux) 3.7.2 bundle (minified).## prettier[Prettier](https://github.com/prettier/prettier) is an opinionated code formatterwhich removes all the original styling and ensures that all outputted code conformsto a consistent style. It is often used in web projects today to automatically formatJavaScript, HTML, CSS and other files.This benchmark runs prettier on different inputs, including- the [lodash](https://lodash.com) 4.17.4 bundle,- the [Preact](http://preactjs.com) 8.2.5 bundle, and- the JSX files from the React [todomvc](https://github.com/tastejs/todomvc) example app.## source-map[Source Map](https://github.com/mozilla/source-map) is a library developed by Mozillato generate and consume source maps, which in turn are used by browsers to displayproper JavaScript when debugging a minified application.This benchmark stresses the source-map tool on both parsing and serializing avariety of different source maps, including the [Preact](http://preactjs.com)8.2.5 source map.## terser[terser](https://github.com/fabiosantoscode/terser) is a fork of `uglify-es` that retains API and CLI compatibility with `uglify-es` and `uglify-js@3`.This benchmark stresses the new ES2015-and-beyond minifier on the (concatenated) JavaScript source for the ES2015 test in the [Speedometer](https://browserbench.org/Speedometer) 2.0 benchmark.## typescript[TypeScript](https://github.com/Microsoft/TypeScript) is a language forapplication-scale JavaScript. It adds optional types, classes, and modulesto JavaScript, and compiles to readable, standards-based JavaScript.This benchmark stresses the TypeScript compiler by running it on the[`typescript-angular`](https://github.com/tastejs/todomvc/tree/master/examples/typescript-angular)example from [todomvc](https://github.com/tastejs/todomvc).## uglify-js[UglifyJS](https://github.com/mishoo/UglifyJS2) is a JavaScript parser, minifier,compressor and beautifier toolkit, which is commonly used to minimize JavaScriptbundles.This benchmark runs the UglifyJS minifier on the (concatenated) JavaScript source forthe ES2015 test in the [Lodash](https://lodash.com) module.