| <!-- |
| Copyright (C) 2019 Apple Inc. All rights reserved. |
| |
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted provided that the following conditions |
| are met: |
| 1. Redistributions of source code must retain the above copyright |
| notice, this list of conditions and the following disclaimer. |
| 2. Redistributions in binary form must reproduce the above copyright |
| notice, this list of conditions and the following disclaimer in the |
| documentation and/or other materials provided with the distribution. |
| |
| THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' |
| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS |
| BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
| THE POSSIBILITY OF SUCH DAMAGE. |
| --> |
| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8" /> |
| |
| <title>JetStream 2 In-Depth Analysis</title> |
| |
| <link rel="stylesheet" href="JetStream.css"> |
| |
| </head> |
| <body> |
| <h1 class="logo"> |
| <div id="jetstreams"> |
| <a href="index.html" class="logo-image">JetStream 2</a> |
| </div> |
| </h1> |
| <main> |
| <article> |
| <h2>In-Depth Analysis</h2> |
| |
| <p> |
| JetStream 2 combines together a variety of JavaScript and Web Assembly benchmarks, covering a variety of |
| advanced workloads and programming techniques, and reports a single score that |
| balances them using a geometric mean. |
| </p> |
| |
| <p> |
| Each benchmark measures a distinct workload, and no single optimization |
| technique is sufficient to speed up all benchmarks. Some benchmarks demonstrate tradeoffs, and |
| aggressive or specialized optimizations for one benchmark might make another benchmark slower. |
| JetStream 2 rewards browsers that start up quickly, execute code quickly, and continue running smoothly. |
| </p> |
| |
| <p> |
| Each benchmark in JetStream 2 computes its own individual score. JetStream 2 weighs each |
| benchmark equally, taking the geometric mean over each individual benchmark's score to compute |
| the overall JetStream 2 score. |
| </p> |
| |
| <p> |
| It's not enough to just measure the total running time of a workload. |
| Browsers may perform differently for the same JavaScript workload depending on how many times it |
| has run. For example, garbage collection runs periodically, making some iterations take longer than |
| others. Code that runs repeatedly gets optimized by the browser, so the first iteration |
| of any workload is usually more expensive than the rest. |
| </p> |
| |
| <p> |
| For most of the JavaScript benchmarks in JetStream 2, individual scores |
| equally weigh startup performance, worst case performance, and average case |
| performance. These three metrics are crucial to running performant JavaScript |
| in the browser. Fast startup times lead browsers to loading pages more quickly. Good |
| worst case performance ensures web applications can run without hiccups. Fast average |
| case performance makes it so that the most advanced web applications can run at all. |
| </p> |
| |
| <p> |
| For JetStream 2's Web Assembly benchmarks, individual scores equally weigh startup time and |
| total execution time. An important component of JetStream 1 were the asm.js subset of benchmarks. With the release |
| of Web Assembly, the importance of asm.js has lessened since many users of asm.js are |
| now using Web Assembly. JetStream 2 has converted many of the asm.js benchmarks from |
| JetStream 1 into Web Assembly. |
| </p> |
| |
| <p> |
| All but one of JetStream'2 JavaScript benchmarks run for N iterations, where |
| N is usually 120. JetStream 2 reports the startup score as the time it takes to run the first iteration. |
| The worst case score is the average of the worst M iterations, excluding the first iteration. |
| M is always less than N, and is usually 4. The average case score is the average |
| of all but the first iteration. These three scores are weighed equally using the geometric |
| mean. |
| </p> |
| |
| <p> |
| JetStream 2 also includes a JavaScript benchmark named WSL. WSL is an implementation of a |
| GPU shading language written in JavaScript. WSL does not use the above mechanism for scoring |
| because it has a long running time. Instead, the WSL benchmark computes its score as the |
| geometric mean over two metrics: the time it takes to compile the WSL standard library, and the time |
| it takes to run through the WSL specification test suite. |
| </p> |
| |
| <p> |
| JetStream 2 includes parts of these benchmark suites that came before it: <a href="https://webkit.org/perf/sunspider/sunspider.html">SunSpider</a>, |
| <a href="https://developers.google.com/octane/">Octane 2</a>, <a href="https://browserbench.org/JetStream1.1/">JetStream 1</a>, |
| <a href="https://browserbench.org/ARES-6/">ARES-6</a>, and <a href="https://v8.github.io/web-tooling-benchmark/">Web Tooling Benchmark</a>. |
| JetStream 2 also includes new benchmarks inspired by <a href="https://krakenbenchmark.mozilla.org">Kraken</a>. |
| JetStream 2 also includes a new set of benchmarks that measure the performance of Web Assembly, Web Workers, |
| Promises, async iteration, unicode regular expressions, and JavaScript parsing. |
| </p> |
| |
| <p> |
| Note that scores from JetStream 2 are not comparable to scores to other versions |
| of any JetStream benchmark. |
| </p> |
| |
| <h3> |
| JetStream 2 has 64 subtests: |
| </h3> |
| |
| <dl> |
| |
| <dt id="WSL">WSL</dt> |
| <dd> |
| WSL is an implementation of a GPU shading language written in JavaScript. |
| WSL measures the time it takes to compile the WSL standard library and the time |
| it takes to run through the WSL specification test suite. |
| Source code: <a href="WSL">WSL</a> |
| </dd> |
| |
| <dt id="UniPoker">UniPoker</dt> |
| <dd> |
| UniPoker is a 5 card stud poker simulation using the Unicode playing card code points, U+1F0A1..U+1F0DE, |
| as the card representation in code. Scoring of hands is done with three regular expressions, one to check |
| for a flush, one to check for straights, and one to check for pairs, three of a kind, and four of a kind. |
| Source code: <a href="RexBench/UniPoker/poker.js">poker.js</a> |
| </dd> |
| |
| <dt id="uglify-js-wtb">uglify-js-wtb</dt> |
| <dd> |
| <a href="https://github.com/mishoo/UglifyJS2">UglifyJS</a> is a JavaScript parser, minifier, compressor, and beautifier toolkit. It is commonly |
| used to minimize JavaScript bundles. |
| This benchmark runs UglifyJS on test JavaScript programs. |
| This benchmark stresses string manipulation and regular expression performance. |
| A similar version of this benchmark was previously published in the Web Tooling Benchmark. |
| Source code: <a href="web-tooling-benchmark/browser.js">uglify.js</a> |
| </dd> |
| |
| <dt id="typescript">typescript</dt> |
| <dd> |
| Tests how quickly Microsoft's <a href="http://www.typescriptlang.org">TypeScript</a> compiler can |
| compile itself. More than anything else, this tests how quickly a JavaScript runtime can optimize |
| a large pile of code. |
| A similar version of this benchmark was previously published in Octane version 2. |
| Source code: <a href="Octane/typescript.js">typescript.js</a> |
| </dd> |
| |
| <dt id="tsf-wasm">tsf-wasm</dt> |
| <dd> |
| Runs Filip Pizlo's — of the WebKit team — implementation of a <a href="http://www.filpizlo.com/tsf/"> Typed Stream Format </a> |
| in Web Assembly. The original code is compiled from C to Web Assembly using <a href="https://emscripten.org">Emscripten</a>. |
| Source code: <a href="wasm/TSF">TSF</a> |
| </dd> |
| |
| <dt id="tagcloud-SP">tagcloud-SP</dt> |
| <dd> |
| Parses JSON and generates markup for a <a href="http://en.wikipedia.org/wiki/Tag_cloud">tag |
| cloud</a> view of the data. Written by Maciej Stachowiak of the WebKit team. Exercises string |
| parsing and manipulation. A similar version of this benchmark was originally published in SunSpider. |
| Source code: <a href="SunSpider/tagcloud.js">tagcloud.js</a> |
| </dd> |
| |
| <dt id="string-unpack-code-SP">string-unpack-code-SP</dt> |
| <dd> |
| This benchmark unpacks various minified JavaScript libraries. It stresses the speed of various string manipulation |
| operations. |
| A similar version of this benchmark was previously published in SunSpider. |
| Source code: <a href="SunSpider/string-unpack-code.js">string-unpack-code.js</a> |
| </dd> |
| |
| <dt id="stanford-crypto-sha256">stanford-crypto-sha256</dt> |
| <dd> |
| Measures the performance of the <a href="https://en.wikipedia.org/wiki/SHA-2">SHA256</a> hashing algorithm as implemented by the <a href="https://crypto.stanford.edu/sjcl/">Stanford JavaScript Crypto Library</a>. This benchmark stresses numeric analysis and array access. |
| This benchmark was inspired by a similar benchmark in the Kraken benchmark suite. |
| Source code: <a href="SeaMonster/stanford-crypto-sha256.js">stanford-crypto-sha256.js</a> |
| </dd> |
| |
| <dt id="stanford-crypto-pbkdf2">stanford-crypto-pbkdf2</dt> |
| <dd> |
| Measures the performance of the <a href="https://en.wikipedia.org/wiki/PBKDF2">PBKDF2</a> hashing algorithm as implemented by the <a href="https://crypto.stanford.edu/sjcl/">Stanford JavaScript Crypto Library</a>. This benchmark stresses numeric analysis and array access. |
| This benchmark was inspired by a similar benchmark in the Kraken benchmark suite. |
| Source code: <a href="SeaMonster/stanford-crypto-pbkdf2.js">stanford-crypto-pbkdf2.js</a> |
| </dd> |
| |
| <dt id="stanford-crypto-aes">stanford-crypto-aes</dt> |
| <dd> |
| Measures the performance of the <a href="https://en.wikipedia.org/wiki/Advanced_Encryption_Standard">AES</a> hashing algorithm as implemented by the <a href="https://crypto.stanford.edu/sjcl/">Stanford JavaScript Crypto Library</a>. This benchmark stresses numeric analysis and array access. |
| This benchmark was inspired by a similar benchmark in the Kraken benchmark suite. |
| Source code: <a href="SeaMonster/stanford-crypto-aes.js">stanford-crypto-aes.js</a> |
| </dd> |
| |
| <dt id="splay">splay</dt> |
| <dd> |
| Tests the manipulation of <a href="http://en.wikipedia.org/wiki/Splay_tree">splay trees</a> |
| represented using plain JavaScript objects. This benchmark stresses the performance of the garbage collector. |
| A similar version of this benchmark was previously published in Octane version 2. |
| Source code: <a href="Octane/splay.js">splay.js</a> |
| </dd> |
| |
| <dt id="segmentation">segmentation</dt> |
| <dd> |
| Uses Web Workers to parallelize the computation of a <a href="https://en.wikipedia.org/wiki/Time-series_segmentation"> |
| time series segmentation</a> algorithm over a sample data set. This code is adapted from an algorithm used in the <a href="https://perf.webkit.org/v3/"> |
| WebKit performance dashboard.</a> |
| Source code: <a href="worker/segmentation.js">segmentation.js</a> |
| </dd> |
| |
| <dt id="richards">richards</dt> |
| <dd> |
| Martin Richard's <a href="http://www.cl.cam.ac.uk/~mr10/Bench.html">system language |
| benchmark</a> ported to JavaScript. Tests object property access performance. |
| A similar version of this benchmark was previously published in Octane version 2. |
| Source code: <a href="Octane/richards.js">richards.js</a> |
| </dd> |
| |
| <dt id="richards-wasm">richards-wasm</dt> |
| <dd> |
| Martin Richard's <a href="http://www.cl.cam.ac.uk/~mr10/Bench.html">system language |
| benchmark</a> compiled to a hybrid of Web Assembly and JavaScript. It stresses how quickly |
| JavaScript can call into Web Assembly code. |
| Source code: <a href="wasm/richards.c">richards.c</a>, <a href="wasm/richards.js">richards.js</a> |
| </dd> |
| |
| <dt id="regexp">regexp</dt> |
| <dd> |
| Collection of regular expressions found by the V8 team in 2010, curated into a benchmark. |
| A similar version of this benchmark was previously published in Octane version 2. |
| Source code: <a href="Octane/regexp.js">regexp.js</a> |
| </dd> |
| |
| <dt id="regex-dna-SP">regex-dna-SP</dt> |
| <dd> |
| Regular-expression-based solution to DNA manipulation from |
| <a href="https://en.wikipedia.org/wiki/The_Computer_Language_Benchmarks_Game">The Great Computer Language Shootout</a>, |
| contributed by Jesse Millikan. |
| A similar version of this benchmark was previously published in SunSpider. |
| Source code: <a href="SunSpider/regex-dna.js">regex-dna.js</a> |
| </dd> |
| |
| <dt id="raytrace">raytrace</dt> |
| <dd> |
| <a href="https://en.wikipedia.org/wiki/Ray_tracing_(graphics)">Ray tracer</a> written in JavaScript using prototype.js. Tests object construction performance |
| and floating point math. |
| A similar version of this benchmark was previously published in Octane version 2. |
| Source code: <a href="Octane/raytrace.js">raytrace.js</a> |
| </dd> |
| |
| <dt id="quicksort-wasm">quicksort-wasm</dt> |
| <dd> |
| Quicksort benchmark, compiled to Web Assembly with <a href="https://emscripten.org">Emscripten</a>. |
| The original C version of this benchmark was previously published in the LLVM test suite. |
| Source code: <a href="wasm/quicksort.c">quicksort.c</a>, <a href="wasm/quicksort.js">quicksort.js</a> |
| </dd> |
| |
| <dt id="prepack-wtb">prepack-wtb</dt> |
| <dd> |
| <a href="https://prepack.io">Prepack</a> is a tool that optimizes JavaScript source code by performing computations at compile |
| time instead of run time where possible. |
| This benchmark runs Prepack on test JavaScript programs. |
| This benchmark stresses string manipulation and regular expression performance. |
| A similar version of this benchmark was previously published in the Web Tooling Benchmark. |
| Source code: <a href="web-tooling-benchmark/browser.js">prepack.js</a> |
| </dd> |
| |
| <dt id="pdfjs">pdfjs</dt> |
| <dd> |
| Mozilla's <a href="http://mozilla.github.io/pdf.js/">PDF reader written in JavaScript</a>. |
| This benchmark emphasizes array manipulation and bit operations. |
| A similar version of this benchmark was previously published in Octane version 2. |
| Source code: <a href="Octane/pdfjs.js">pdfjs.js</a> |
| </dd> |
| |
| <dt id="OfflineAssembler">OfflineAssembler</dt> |
| <dd> |
| Offline Assembler is the lexer, parser, and AST layer of the offline assembler for <a href="https://trac.webkit.org/wiki/JavaScriptCore">JavaScriptCore</a>. |
| It has been ported to JavaScript from the original Ruby implementation. This test stresses regular expression |
| performance. |
| Source code: <a href="RexBench/OfflineAssembler/parser.js">OfflineAssembler.js</a> |
| </dd> |
| |
| <dt id="octane-zlib">octane-zlib</dt> |
| <dd> |
| A benchmark based on compiling <a href="http://zlib.net">zlib</a> to JavaScript using |
| <a href="https://emscripten.org">Emscripten</a>. Based on the |
| <a href="https://github.com/kripken/emscripten/tree/master/tests/zlib">zlib emscripten test</a> |
| but modified to restrict code caching opportunities. |
| A similar version of this benchmark was previously published in Octane version 2. |
| Source code: <a href="Octane/zlib.js">zlib.js</a> |
| </dd> |
| |
| <dt id="octane-code-load">octane-code-load</dt> |
| <dd> |
| Test of code load speed of the jQuery and Closure libraries. Because this test allows |
| caching, this is representative of revisiting the same website. |
| A similar version of this benchmark was previously published in Octane version 2. |
| Source code: <a href="Octane/code-first-load.js">code-load.js</a> |
| </dd> |
| |
| <dt id="navier-stokes">navier-stokes</dt> |
| <dd> |
| Fluid simulation written by <a href="https://nerget.com">Oliver Hunt</a>. Emphasizes floating point array performance. |
| A similar version of this benchmark was previously published in Octane version 2. |
| Source code: <a href="Octane/navier-stokes.js">navier-stokes.js</a> |
| </dd> |
| |
| <dt id="n-body-SP">n-body-SP</dt> |
| <dd> |
| Classic solar system simulation benchmark from |
| <a href="https://en.wikipedia.org/wiki/The_Computer_Language_Benchmarks_Game">The Great Computer Language Shootout</a>, |
| contributed by Isaac Guy. Tests math and object access performance. |
| A similar version of this benchmark was previously published in SunSpider. |
| Source code: <a href="SunSpider/n-body.js">n-body.js</a> |
| </dd> |
| |
| <dt id="multi-inspector-code-load">multi-inspector-code-load</dt> |
| <dd> |
| Measures the repeated parsing of a modern JavaScript code base: WebKit's Web Inspector. |
| Because this test allows caching, this is representative of revisiting the same website. |
| Source code: <a href="code-load/code-multi-load.js">code-multi-load.js</a> |
| </dd> |
| |
| <dt id="ML">ML</dt> |
| <dd> |
| ML is an implementation of a <a href="https://en.wikipedia.org/wiki/Feedforward_neural_network"> feedforward neural network.</a> |
| The benchmark trains several networks using different <a href="https://en.wikipedia.org/wiki/Activation_function">activation functions</a> |
| and several sample data sets. ML makes heavy use of classes. It relies on the ml-matrix library and does non-trivial matrix math. |
| This benchmark was previously published in ARES-6. |
| Source code: <a href="ARES-6/ml">ML</a> |
| </dd> |
| |
| <dt id="mandreel">mandreel</dt> |
| <dd> |
| Tests the <a href="http://bulletphysics.org/">Bullet</a> physics engine. |
| The physics engine is compiled to JavaScript with <a href="http://www.mandreel.com">Mandreel</a>. |
| A similar version of this benchmark was previously published in Octane version 2. |
| Source code: <a href="Octane/mandreel.js">mandreel.js</a> |
| </dd> |
| |
| <dt id="lebab-wtb">lebab-wtb</dt> |
| <dd> |
| <a href="https://github.com/lebab/lebab">Lebab</a> transpiles ES5 code into ES6/ES7. |
| This benchmark runs Lebab on test JavaScript programs. |
| This benchmark stresses string manipulation and regular expression performance. |
| A similar version of this benchmark was previously published in the Web Tooling Benchmark. |
| Source code: <a href="web-tooling-benchmark/browser.js">lebab.js</a> |
| </dd> |
| |
| <dt id="json-stringify-inspector">json-stringify-inspector</dt> |
| <dd> |
| Measures JSON.stringify performance on a set of objects that WebKit's Web Inspector |
| stringifies when communicating between the UI and web pages. |
| This benchmark was inspired by a similar benchmark in the Kraken benchmark suite. |
| Source code: <a href="SeaMonster/json-stringify-inspector.js">json-stringify-inspector.js</a> |
| </dd> |
| |
| <dt id="json-parse-inspector">json-parse-inspector</dt> |
| <dd> |
| Measures JSON.parse performance on a set of objects that WebKit's Web Inspector |
| parses when communicating between the UI and web pages. |
| This benchmark was inspired by a similar benchmark in the Kraken benchmark suite. |
| Source code: <a href="SeaMonster/json-parse-inspector.js">json-parse-inspector.js</a> |
| </dd> |
| |
| <dt id="jshint-wtb">jshint-wtb</dt> |
| <dd> |
| <a href="https://jshint.com">JSHint</a> is a static analysis tool that warns about errors |
| and potential problems in JavaScript programs. |
| This benchmark runs JSHint on test JavaScript programs. |
| This benchmark stresses string manipulation and regular expression performance. |
| A similar version of this benchmark was previously published in the Web Tooling Benchmark. |
| Source code: <a href="web-tooling-benchmark/browser.js">jshint.js</a> |
| </dd> |
| |
| <dt id="HashSet-wasm">HashSet-wasm</dt> |
| <dd> |
| A Web Assembly benchmark replaying a set of hash table operations performed in WebKit when loading |
| a web page. This benchmark was compiled from C++ to Web Assembly using <a href="https://emscripten.org">Emscripten</a>. |
| Source code: <a href="wasm/HashSet.cpp">HashSet.cpp</a>, <a href="wasm/HashSet.js">HashSet.js</a> |
| </dd> |
| |
| <dt id="hash-map">hash-map</dt> |
| <dd> |
| Apache Harmony java.util.HashMap implementation ported to JavaScript and benchmarked by |
| doing hash table insertions, queries, and then iterating the associated entrySet. Tests |
| object-oriented JavaScript idioms and object construction. A similar JavaScript version |
| of this benchmark was originally published as part of the WebKit test suite. |
| Source code: <a href="simple/hash-map.js">hash-map.js</a> |
| </dd> |
| |
| <dt id="gcc-loops-wasm">gcc-loops-wasm</dt> |
| <dd> |
| Example loops used to tune the GCC and LLVM vectorizers, compiled to Web Assembly with |
| <a href="https://emscripten.org">Emscripten</a>. The original C++ version of this benchmark was previously published in the LLVM test suite. |
| Source code: <a href="wasm/gcc-loops.cpp">gcc-loops.cpp</a>, <a href="wasm/gcc-loops.js">gcc-loops.js</a> |
| </dd> |
| |
| <dt id="gbemu">gbemu</dt> |
| <dd> |
| Gameboy emulator written in JavaScript. Tests typed array and |
| property access performance. |
| A similar version of this benchmark was previously published in Octane version 2. |
| Source code: <a href="Octane/gbemu-part1.js">gbemu-part1.js</a>, <a href="Octane/gbemu-part2.js">gbemu-part2.js</a> |
| </dd> |
| |
| <dt id="gaussian-blur">gaussian-blur</dt> |
| <dd> |
| Tests the performance of a JavaScript implementation of <a href="https://en.wikipedia.org/wiki/Gaussian_blur">gaussian |
| blur</a> on a test image. Tests numeric analysis speed and uses typed arrays. |
| This benchmark was inspired by a similar benchmark in the Kraken benchmark suite. |
| Source code: <a href="SeaMonster/gaussian-blur.js">gaussian-blur.js</a> |
| </dd> |
| |
| <dt id="float-mm.c">float-mm.c</dt> |
| <dd> |
| Floating point matrix multiply benchmark, compiled to JavaScript with <a href="https://emscripten.org">Emscripten</a>. |
| The original C version of this benchmark was previously published in the LLVM test suite. |
| Source code: <a href="simple/float-mm.c">float-mm.c</a>, <a href="simple/float-mm.c.js">float-mm.c.js</a> |
| </dd> |
| |
| <dt id="FlightPlanner">FlightPlanner</dt> |
| <dd> |
| Flight Planner is a benchmark taken from a flight management web application. |
| Flight Planner parses aircraft flight plans and computes distance, courses, and elapsed times for legs of flight plans. |
| It uses FAA data for airports, navigation aids, and airways. The flight management app was originally written to help |
| compete in a flying proficiency event. It stresses regular expression performance. |
| Source code: <a href="RexBench/FlightPlanner/flight_planner.js">flight_planner.js</a> |
| </dd> |
| |
| <dt id="first-inspector-code-load">first-inspector-code-load</dt> |
| <dd> |
| Measures the first-time parsing of a modern JavaScript code base: WebKit's Web Inspector. |
| This models the parsing time of visiting a web site for the first time. |
| Source code: <a href="code-load/code-first-load.js">code-first-load.js</a> |
| </dd> |
| |
| <dt id="espree-wtb">espree-wtb</dt> |
| <dd> |
| <a href="https://github.com/eslint/espree">Espree</a> is a JavaScript parser written in JavaScript. |
| This benchmark runs Espree on test JavaScript programs. |
| This benchmark stresses string manipulation and regular expression performance. |
| A similar version of this benchmark was previously published in the Web Tooling Benchmark. |
| Source code: <a href="web-tooling-benchmark/browser.js">espree.js</a> |
| </dd> |
| |
| <dt id="earley-boyer">earley-boyer</dt> |
| <dd> |
| Tests two classic Scheme benchmarks translated to JavaScript using scheme2js. The first |
| benchmark is Earley, is a chart parser algorithm created by Jay Earley. The second is |
| Boyer, a logic programming benchmark by Bob Boyer. Measures variadic functions and object |
| construction. |
| A similar version of this benchmark was previously published in Octane version 2. |
| Source code: <a href="Octane/earley-boyer.js">earley-boyer.js</a> |
| </dd> |
| |
| <dt id="delta-blue">delta-blue</dt> |
| <dd> |
| The classic DeltaBlue benchmark derived from a Smalltalk implementation by Maloney and |
| Wolczko. Tests devirtualization of JavaScript code that uses an idiomatic class hierarchy |
| construction. |
| A similar version of this benchmark was previously published in Octane version 2. |
| Source code: <a href="Octane/deltablue.js">deltablue.js</a> |
| </dd> |
| |
| <dt id="date-format-xparb-SP">date-format-xparb-SP</dt> |
| <dd> |
| Sophisticated date formatting and parsing library test, based on code by Barin Schwartz. |
| A similar version of this benchmark was previously published in SunSpider. |
| Source code: <a href="SunSpider/date-format-xparb.js">date-format-xparb.js</a> |
| </dd> |
| |
| <dt id="date-format-tofte-SP">date-format-tofte-SP</dt> |
| <dd> |
| Date and time formatting test, based on code by Svend Tofte. Involves an interesting use |
| of <code>eval</code> and also covers string manipulation and JavaScript library functions. |
| A similar version of this benchmark was previously published in SunSpider. |
| Source code: <a href="SunSpider/date-format-tofte.js">date-format-tofte.js</a> |
| </dd> |
| |
| <dt id="crypto-sha1-SP">crypto-sha1-SP</dt> |
| <dd> |
| <a href="http://en.wikipedia.org/wiki/Sha1">SHA-1</a> implementation in JavaScript by |
| Paul Johnston and others. Tests interesting integer math idioms. |
| A similar version of this benchmark was previously published in SunSpider. |
| Source code: <a href="SunSpider/crypto-sha1.js">crypto-sha1.js</a> |
| </dd> |
| |
| <dt id="crypto-md5-SP">crypto-md5-SP</dt> |
| <dd> |
| <a href="http://en.wikipedia.org/wiki/Md5">MD5</a> implementation in JavaScript by |
| Paul Johnston and others. Tests interesting integer math idioms. |
| A similar version of this benchmark was previously published in SunSpider. |
| Source code: <a href="SunSpider/crypto-md5.js">crypto-md5.js</a> |
| </dd> |
| |
| <dt id="crypto-aes-SP">crypto-aes-SP</dt> |
| <dd> |
| <a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard"> AES</a> implementation |
| in JavaScript by Chris Veness. A newer version can be |
| found <a href="http://www.movable-type.co.uk/scripts/aes.html">here</a>. Tests integer math. |
| A similar version of this benchmark was previously published in SunSpider. |
| Source code: <a href="SunSpider/crypto-aes.js">crypto-aes.js</a> |
| </dd> |
| |
| <dt id="crypto">crypto</dt> |
| <dd> |
| RSA cypher implemented in JavaScript by Tom Wu. Tests integer math and arrays. |
| A similar version of this benchmark was previously published in Octane version 2. |
| Source code: <a href="Octane/crypto.js">crypto.js</a> |
| </dd> |
| |
| <dt id="coffeescript-wtb">coffeescript-wtb</dt> |
| <dd> |
| <a href="http://coffeescript.org/">CoffeeScript</a> is a programming language that attempts to expose the |
| good parts of JavaScript in a simple way. |
| This benchmark tests the CoffeeScript compiler on test programs. |
| This benchmark stresses string manipulation and regular expression performance. |
| A similar version of this benchmark was previously published in the Web Tooling Benchmark. |
| Source code: <a href="web-tooling-benchmark/browser.js">coffeescript.js</a> |
| </dd> |
| |
| <dt id="chai-wtb">chai-wtb</dt> |
| <dd> |
| <a href="http://chaijs.com/">Chai</a> is a <a href="https://codeutopia.net/blog/2015/03/01/unit-testing-tdd-and-bdd/">BDD / TDD</a> assertion library for |
| node.js and the browser. It is commonly used to write unit and integration tests. |
| A similar version of this benchmark was previously published in the Web Tooling Benchmark. |
| Source code: <a href="web-tooling-benchmark/browser.js">chai.js</a> |
| </dd> |
| |
| <dt id="cdjs">cdjs</dt> |
| <dd> |
| JavaScript implementation of the <a href="https://www.cs.purdue.edu/sss/projects/cdx/">CDx collision detection |
| benchmark</a>. Measures the performance of over 200 collision detection runs. |
| Source code: <a href="cdjs">cdjs</a> |
| </dd> |
| |
| <dt id="box2d">box2d</dt> |
| <dd> |
| The Box2D physics engine <a href="https://code.google.com/p/box2dweb/">ported to JavaScript</a>. Tests floating |
| point math and data structures. |
| A similar version of this benchmark was previously published in Octane version 2. |
| Source code: <a href="Octane/box2d.js">box2d.js</a> |
| </dd> |
| |
| <dt id="bomb-workers">bomb-workers</dt> |
| <dd> |
| Tests running various subtests of the SunSpider benchmark in parallel using Web Workers. |
| Stresses the browser's ability to run JavaScript code in parallel. |
| Source code: <a href="worker/bomb.js">bomb.js</a> |
| </dd> |
| |
| <dt id="Basic">Basic</dt> |
| <dd> |
| Basic is an ES2015 implementation of the <a href="http://www.ecma-international.org/publications/files/ECMA-ST-WITHDRAWN/ECMA-55,%201st%20Edition,%20January%201978.pdf">ECMA-55 BASIC standard</a>. |
| Basic stresses performance of generator functions, classes, Map, and WeakMap. |
| The benchmark runs a handful of simple programs, the most complex of which finds prime numbers. |
| This benchmark was previously published in ARES-6. |
| Source code: <a href="ARES-6/Basic">Basic</a> |
| </dd> |
| |
| <dt id="base64-SP">base64-SP</dt> |
| <dd> |
| Base64 encoder/decoder written in JavaScript, originally from the Mozilla XML-RPC client component. |
| Tests string manipulation. |
| A similar version of this benchmark was previously published in SunSpider. |
| Source code: <a href="SunSpider/base64.js">base64.js</a> |
| </dd> |
| |
| <dt id="babylon-wtb">babylon-wtb</dt> |
| <dd> |
| <a href="https://github.com/babel/babel/tree/master/packages/babel-parser">Babylon</a> is the frontend for the Babel transpiler. |
| It is a JavaScript parser written in JavaScript. It computes the Abstract Syntax Tree of the input JavaScript program. |
| This benchmark runs Babylon on test JavaScript programs. |
| This benchmark stresses string manipulation and regular expression performance. |
| A similar version of this benchmark was previously published in the Web Tooling Benchmark. |
| Source code: <a href="web-tooling-benchmark/browser.js">babylon.js</a> |
| </dd> |
| |
| <dt id="Babylon">Babylon</dt> |
| <dd> |
| <a href="https://github.com/babel/babylon">Babylon</a> is an implementation of a parser for the JavaScript language. |
| Babylon is the parser used in the <a href="https://babeljs.io/">Babel</a> JavaScript transpiler. The benchmark runs the |
| Babylon parser on four different JavaScript sources. Babylon makes heavy use of classes, does non trivial string processing, |
| and creates non-trivial object graphs. |
| This benchmark was previously published in ARES-6. |
| Source code: <a href="ARES-6/Babylon">Babylon</a> |
| </dd> |
| |
| <dt id="async-fs">async-fs</dt> |
| <dd> |
| This is an implementation of a mock file system that stresses the performance of DataView, Promises, and async |
| iteration. The benchmark simulates adding and removing files, and swapping the byte order of existing files. |
| Source code: <a href="simple/file-system.js">async-fs.js</a> |
| </dd> |
| |
| <dt id="Air">Air</dt> |
| <dd> |
| Air is an ES2015 port of the <a href="https://webkit.org/blog/5852/introducing-the-b3-jit-compiler/">WebKit B3 JIT</a>'s <a href="https://trac.webkit.org/changeset/201783">Air::allocateStack phase</a>. |
| This code is a heavy user of Map, Set, classes, spread, and for-of. The benchmark runs allocateStack on hot function |
| bodies from other popular JavaScript benchmarks. This benchmark was previously published in ARES-6. |
| Source code: <a href="ARES-6/Air">Air</a> |
| </dd> |
| |
| <dt id="ai-astar">ai-astar</dt> |
| <dd> |
| This benchmark runs a JavaScript implementation of the <a href="https://en.wikipedia.org/wiki/A*_search_algorithm">A*</a> search algorithm |
| written by <a href="https://briangrinstead.com/blog/">Brian Grinstead</a>. |
| This benchmark was inspired by a similar benchmark in the Kraken benchmark suite. |
| Source code: <a href="SeaMonster/ai-astar.js">ai-astar.js</a> |
| </dd> |
| |
| <dt id="acorn-wtb">acorn-wtb</dt> |
| <dd> |
| <a href="https://github.com/ternjs/acorn">Acorn</a> is a JavaScript parser written in JavaScript. |
| This benchmark runs Acorn on test JavaScript programs. |
| This benchmark stresses string manipulation and regular expression performance. |
| A similar version of this benchmark was previously published in the Web Tooling Benchmark. |
| Source code: <a href="web-tooling-benchmark/browser.js">acorn.js</a> |
| </dd> |
| |
| <dt id="3d-raytrace-SP">3d-raytrace-SP</dt> |
| <dd> |
| Simple raytracer written by <a href="https://nerget.com">Oliver Hunt</a>. |
| Tests arrays and floating-point math in relatively short-running code. |
| A similar version of this benchmark was previously published in SunSpider. |
| Source code: <a href="SunSpider/3d-raytrace.js">3d-raytrace.js</a> |
| </dd> |
| |
| <dt id="3d-cube-SP">3d-cube-SP</dt> |
| <dd> |
| 3D cube rotation benchmark by Simon Speich. The original can be found |
| on <a href="http://www.speich.net/computer/moztesting/3d.htm">Simon's |
| web page</a>. Tests arrays and floating-point math in relatively |
| short-running code. |
| A similar version of this benchmark was previously published in SunSpider. |
| Source code: <a href="SunSpider/3d-cube.js">3d-cube.js</a> |
| </dd> |
| |
| </dl> |
| |
| <p><a href="index.html" class="button">← Return to Tests</a></p> |
| </article> |
| |
| </main> |
| </body> |
| </html> |