659 lines
35 KiB
HTML
659 lines
35 KiB
HTML
<!--
|
|
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>
|