| <!-- |
| Copyright (C) 2014, 2015 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> |
| <title>JetStream @VERSION@ — In Depth Analysis</title> |
| |
| <link rel="stylesheet" href="JetStream.css"> |
| </head> |
| <body> |
| <main> |
| <a href="index.html"><img id="logo" src="JetStream-Logo.png" alt="JetStream"></a> |
| |
| <h1>In Depth Analysis</h1> |
| |
| <p> |
| JetStream combines a variety of JavaScript benchmarks, covering a variety of |
| advanced workloads and programming techniques, and reports a single score that |
| balances them using geometric mean. |
| </p> |
| |
| <p> |
| Each benchmark measures a distinct workload, and no single optimization |
| technique is sufficient to speed up all benchmarks. Latency tests measure that a |
| web application can start up quickly, ramp up to peak performance quickly, and |
| run smoothly without interruptions. Throughput tests measure the sustained peak |
| performance of a web application, ignoring ramp-up time and spikes in |
| smoothness. Some benchmarks demonstrate tradeoffs, and aggressive or specialized |
| optimization for one benchmark might make another benchmark slower. |
| </p> |
| |
| <p> |
| JetStream includes benchmarks from the SunSpider 1.0.2 and Octane 2 JavaScript |
| benchmark suites. It also includes benchmarks from the LLVM compiler open source |
| project, compiled to JavaScript using Emscripten 1.13. It also includes a |
| benchmark based on the Apache Harmony open source project's HashMap and a port of |
| the <a href="https://www.cs.purdue.edu/sss/projects/cdx/">CDx</a> benchmark, |
| hand-translated to JavaScript. |
| </p> |
| |
| <p> |
| These benchmarks cover both classical performance measurements — like Martin |
| Richards's machine and language independent benchmark (richards) and the |
| Dhrystone synthetic computing benchmark (dry.c) — and real-world examples — like |
| the Mozilla open source project's PDF renderer (pdfjs), the Box2D JavaScript |
| physics engine (box2d), and the jQuery and Closure JavaScript libraries (code- |
| first-load, code-multi-load). |
| </p> |
| |
| <p> |
| Note that scores from JetStream @VERSION@ are not comparable to scores from other versions |
| of JetStream. |
| </p> |
| |
| <dl> |
| |
| <a name="3d-cube"> |
| <dt>3d-cube</dt> |
| <dd>3D cube rotation benchmark by Simon Speich. This benchmark was |
| previously published as part of SunSpider. 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. Source |
| code: <a href="sources/3d-cube.js">3d-cube.js</a></dd> |
| |
| <a name="3d-raytrace"> |
| <dt>3d-raytrace</dt> |
| <dd>Simple raytracer written by Oliver Hunt of the WebKit team. This benchmark was |
| originally published in SunSpider. Tests arrays and floating-point |
| math in relatively short-running code. Source |
| code: <a href="sources/3d-raytrace.js">3d-raytrace.js</a></dd> |
| |
| <a name="base64"> |
| <dt>base64</dt> |
| <dd>Base64 encoder/decoder written in JavaScript, originally from the Mozilla XML-RPC client component. Tests string manipulation. This benchmark was previously published as part of SunSpider. |
| Source code: <a href="sources/base64.js">base64.js</a></dd> |
| |
| <a name="cdjs"> |
| <dt>cdjs</dt> |
| <dd>JavaScript implementation of the |
| <a href="https://www.cs.purdue.edu/sss/projects/cdx/">CDx collision detection |
| benchmark</a>. Measures the browser's worst-case performance over 200 collision |
| detection runs. |
| Source code: <a href="sources/cdjs-benchmark.js">benchmark.js</a>, |
| <a href="sources/cdjs-call_sign.js">call_sign.js</a>, |
| <a href="sources/cdjs-collision.js">collision.js</a>, |
| <a href="sources/cdjs-collision_detector.js">collision_detector.js</a>, |
| <a href="sources/cdjs-constants.js">constants.js</a>, |
| <a href="sources/cdjs-motion.js">motion.js</a>, |
| <a href="sources/cdjs-red_black_tree.js">red_black_tree.js</a>, |
| <a href="sources/cdjs-reduce_collision_set.js">reduce_collision_set.js</a>, |
| <a href="sources/cdjs-simulator.js">simulator.js</a>, |
| <a href="sources/cdjs-util.js">util.js</a>, |
| <a href="sources/cdjs-vector_2d.js">vector_2d.js</a>, |
| <a href="sources/cdjs-vector_3d.js">vector_3d.js</a></dd> |
| |
| <a name="code-first-load"> |
| <dt>code-first-load</dt> |
| <dd>Test of code load speed of the jQuery and Closure libraries. This test attempts to defeat |
| the browser's caching capabilities by randomizing the source code, making it representative |
| of the first-load experience. This test was previously published in Octane version 2. |
| Source code: <a href="sources/code-first-load-code-load.js">code-load.js</a></dd> |
| |
| <a name="code-multi-load"> |
| <dt>code-multi-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. |
| This test was previously published in Octane version 1. |
| Source code: <a href="sources/code-multi-load-code-load.js">code-load.js</a></dd> |
| |
| <a name="crypto-aes"> |
| <dt>crypto-aes</dt> |
| <dd><a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard">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. |
| This benchmark was previously published as part of SunSpider. |
| Source code: <a href="sources/crypto-aes.js">crypto-aes.js</a></dd> |
| |
| <a name="crypto-md5"> |
| <dt>crypto-md5</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. |
| This benchmark was previously published as part of SunSpider. |
| Source code: <a href="sources/crypto-md5.js">crypto-md5.js</a></dd> |
| |
| <a name="crypto-sha1"> |
| <dt>crypto-sha1</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. |
| This benchmark was previously published as part of SunSpider. |
| Source code: <a href="sources/crypto-sha1.js">crypto-sha1.js</a></dd> |
| |
| <a name="date-format-tofte"> |
| <dt>date-format-tofte</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. |
| This benchmark was previously published as part of SunSpider. |
| Source code: <a href="sources/date-format-tofte.js">date-format-tofte.js</a></dd> |
| |
| <a name="date-format-xparb"> |
| <dt>date-format-xparb</dt> |
| <dd>Sophisticated date formatting and parsing library test, based on code by Barin Schwartz. |
| This benchmark was previously published as part of SunSpider. |
| Source code: <a href="sources/date-format-xparb.js">date-format-xparb.js</a></dd> |
| |
| <a name="mandreel-latency"> |
| <dt>mandreel-latency</dt> |
| <dd>Tests the <a href="http://bulletphysics.org/">Bullet</a> physics engine's worst case |
| performance over many iterations. The physics engine is compiled to JavaScript with |
| <a href="http://www.mandreel.com">Mandreel</a>. JetStream also reports the throughput score |
| for this test as <a href="#mandreel">mandreel</a>. |
| This benchmark was previously published in Octane version 2, but JetStream uses a |
| <a href="http://trac.webkit.org/changeset/185425">different latency metric</a> |
| based on the average of the <a href="http://trac.webkit.org/changeset/186041">worst 0.5%</a> |
| samples. |
| Source code: <a href="sources/mandreel.js">mandreel.js</a></dd> |
| |
| <a name="n-body"> |
| <dt>n-body</dt> |
| <dd>Classic solar system simulation benchmark from |
| <a href="http://shootout.alioth.debian.org/">The Great Computer Language Shootout</a>, |
| contributed by Isaac Guy. Tests math and object access performance. |
| This benchmark was previously published in SunSpider. |
| Source code: <a href="sources/n-body.js">n-body.js</a></dd> |
| |
| <a name="regex-dna"> |
| <dt>regex-dna</dt> |
| <dd>Regular-expression-based solution to DNA manipulation from |
| <a href="http://shootout.alioth.debian.org/">The Great Computer Language Shootout</a>, |
| contributed by Jesse Millikan. |
| This benchmark was previously published in SunSpider. |
| Source code: <a href="sources/regex-dna.js">regex-dna.js</a></dd> |
| |
| <a name="splay-latency"> |
| <dt>splay-latency</dt> |
| <dd>Tests the worst-case performane of manipulating a |
| <a href="http://en.wikipedia.org/wiki/Splay_tree">splay tree</a> represented using plain |
| JavaScript objects. JetStream also reports the throughput score for this test |
| as <a href="#splay">splay</a>. This benchmark was previously published in Octane version 2, but JetStream uses a |
| <a href="http://trac.webkit.org/changeset/185425">different latency metric</a> |
| based on the average of the <a href="http://trac.webkit.org/changeset/186041">worst 0.5%</a> |
| samples. |
| Source code: <a href="sources/splay.js">splay.js</a></dd> |
| |
| <a name="tagcloud"> |
| <dt>tagcloud</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. |
| This benchmark was originally published in SunSpider. |
| Source code: <a href="sources/tagcloud.js">tagcloud.js</a></dd> |
| |
| <a name="typescript"> |
| <dt>typescript</dt> |
| <dd>Tests how quickly Microsoft's <a href="http://www.typescriptlang.org">TypeScript</a> compiler can |
| compile itself. This benchmark sets itself apart from the others due to its sheer size. More |
| than anything else this tests how quickly a JavaScript runtime can optimize a large pile of |
| code. |
| This benchmark was previously published in Octane version 2. |
| Source code: <a href="sources/typescript.js">typescript.js</a>, <a href="sources/typescript-compiler.js">typescript-compiler.js</a>, <a href="sources/typescript-input.js">typescript-input.js</a></dd> |
| |
| <a name="bigfib.cpp"> |
| <dt>bigfib.cpp</dt> |
| <dd>C++ program for computing very large Fibonacci numbers using a BigInt class, compiled to JavaScript with |
| Emscripten. Tests asm.js performance, with a focus on complex C++ data structures. |
| The original C++ version of this benchmark was previously published in the LLVM test suite. |
| Source code: <a href="sources/bigfib.cpp">bigfib.cpp</a>, <a href="sources/bigfib.cpp.js">bigfib.cpp.js</a></dd> |
| |
| <a name="box2d"> |
| <dt>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. |
| This benchmark was previously published in Octane version 2. |
| Source code: <a href="sources/box2d.js">box2d.js</a></dd> |
| |
| <a name="container.cpp"> |
| <dt>container.cpp</dt> |
| <dd>Stepanov and Stroustrup's Standard |
| Container Benchmark compiled to JavaScript with |
| Emscripten. Tests asm.js performance, with a focus on complex C++ data structures. |
| The original C++ version of this benchmark was previously published in the LLVM test suite. |
| Source code: <a href="sources/container.cpp">container.cpp</a>, <a href="sources/container.cpp.js">container.cpp.js</a></dd> |
| |
| <a name="crypto"> |
| <dt>crypto</dt> |
| <dd>RSA cypher implemented in JavaScript by Tom Wu. Tests integer math and arrays. |
| This benchmark was previously published in Octane version 2. |
| Source code: <a href="sources/crypto.js">crypto.js</a></dd> |
| |
| <a name="delta-blue"> |
| <dt>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. |
| This benchmark was previously published in Octane version 2. |
| Source code: <a href="sources/deltablue.js">deltablue.js</a></dd> |
| |
| <a name="dry.c"> |
| <dt>dry.c</dt> |
| <dd>The classic Dhrystone benchmark program by Reinhold P. Weicker, translated from Ada to C |
| by Rick Richardson, and then compiled to JavaScript with Emscripten. Measures basic |
| integer arithmetic in asm.js code. |
| The original C version of this benchmark was previously published in the LLVM test suite. |
| Source code: <a href="sources/dry.c">dry.c</a>, <a href="sources/dry.c.js">dry.c.js</a></dd> |
| |
| <a name="earley-boyer"> |
| <dt>earley-boyer</dt> |
| <dd>Tests two classic Scheme benchmarks translated to JavaScript using scheme2js. The first |
| benchmark is Earley, is a chart parser algorithm due to Jay Earley. The second is |
| Boyer, a logic programming benchmark by Bob Boyer. Measures variadic functions and object |
| construction. |
| This benchmark was previously published in Octane version 2. |
| Source code: <a href="sources/earley-boyer.js">earley-boyer.js</a></dd> |
| |
| <a name="float-mm.c"> |
| <dt>float-mm.c</dt> |
| <dd>Floating point matrix multiply benchmark, compiled to JavaScript with Emscripten. |
| The original C version of this benchmark was previously published in the LLVM test suite. |
| Source code: <a href="sources/float-mm.c">float-mm.c</a>, <a href="sources/float-mm.c.js">float-mm.c.js</a></dd> |
| |
| <a name="gbemu"> |
| <dt>gbemu</dt> |
| <dd>Gameboy emulator written in JavaScript. Tests typed array and |
| property access performance. This benchmark was previously published in Octane version 2. |
| |
| Source code: <a href="sources/gbemu-part1.js">gbemu-part1.js</a>, <a href="sources/gbemu-part2.js">gbemu-part2.js</a></dd> |
| |
| <a name="gcc-loops.cpp"> |
| <dt>gcc-loops.cpp</dt> |
| <dd>Example loops used to tune the GCC and LLVM vectorizers, compiled to JavaScript with |
| Emscripten. The original C++ version of this benchmark was previously published in the LLVM test suite. |
| Source code: <a href="sources/gcc-loops.cpp">gcc-loops.cpp</a></dd> |
| |
| <a name="hash-map"> |
| <dt>hash-map</dt> |
| <dd>Apache Harmony java.util.HashMap implementation ported to JavaScript and benchmarked by |
| doing 500,000 inserts, 2,500,000 queries, and then iterating the associated entrySet. Tests |
| object-oriented JavaScript idioms and object construction. The JavaScript version of this benchmark |
| was originally published as part of the WebKit test suite. |
| Source code: <a href="sources/hash-map.js">hash-map.js</a></dd> |
| |
| <a name="mandreel"> |
| <dt>mandreel</dt> |
| <dd>Tests the <a href="http://bulletphysics.org/">Bullet</a> physics engine's throughput. |
| The physics engine is compiled to JavaScript with |
| <a href="http://www.mandreel.com">Mandreel</a>. JetStream also reports the worst-case |
| performance score |
| for this test as <a href="#mandreel-latency">mandreel-latency</a>. |
| This benchmark was previously published in Octane version 2. |
| Source code: <a href="sources/mandreel.js">mandreel.js</a></dd> |
| |
| <a name="n-body.c"> |
| <dt>n-body.c</dt> |
| <dd>Christoph Bauer's version of the classic solar system simulation benchmark from |
| <a href="http://shootout.alioth.debian.org/">The Great Computer Language Shootout</a>, written |
| in C and compiled to JavaScript with Emscripten. The original C version of this benchmark was previously published in the LLVM test suite. |
| Source code: <a href="sources/n-body.c">n-body.c</a>, <a href="sources/n-body.c.js">n-body.c.js</a></dd> |
| |
| <a name="navier-stokes"> |
| <dt>navier-stokes</dt> |
| <dd>Fluid simulation written by Oliver Hunt of the WebKit team. Emphasizes floating point array performance. |
| This benchmark was previously published in Octane version 2. |
| Source code: <a href="sources/navier-stokes.js">navier-stokes.js</a></dd> |
| |
| <a name="pdfjs"> |
| <dt>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. |
| This benchmark was previously published in Octane version 2. |
| Source code: <a href="sources/pdfjs.js">pdfjs.js</a></dd> |
| |
| <a name="proto-raytracer"> |
| <dt>proto-raytracer</dt> |
| <dd>Ray tracer written in JavaScript using prototype.js. Tests object construction performance |
| and floating point math. |
| This benchmark was previously published in Octane version 2. |
| Source code: <a href="sources/raytrace.js">raytrace.js</a></dd> |
| |
| <a name="quicksort.c"> |
| <dt>quicksort.c</dt> |
| <dd>Quicksort benchmark, compiled to JavaScript with Emscripten. |
| The original C version of this benchmark was previously published in the LLVM test suite. |
| Source code: <a href="sources/quicksort.c">quicksort.c</a>, <a href="sources/quicksort.c.js">quicksort.c.js</a></dd> |
| |
| <a name="regexp-2010"> |
| <dt>regexp-2010</dt> |
| <dd>Collection of regular expressions found by the V8 team in 2010, curated into a benchmark. |
| This benchmark was previously published in Octane version 2. |
| Source code: <a href="sources/regexp.js">regexp.js</a></dd> |
| |
| <a name="richards"> |
| <dt>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. |
| This benchmark was previously published in Octane version 2. |
| Source code: <a href="sources/richards.js">richards.js</a></dd> |
| |
| <a name="splay"> |
| <dt>splay</dt> |
| <dd>Tests the throughput of manipulating a |
| <a href="http://en.wikipedia.org/wiki/Splay_tree">splay tree</a> represented using plain |
| JavaScript objects. JetStream also reports the worst-case performance score for this test |
| as <a href="#splay-latency">splay-latency</a>. |
| This benchmark was previously published in Octane version 2. |
| Source code: <a href="sources/splay.js">splay.js</a></dd> |
| |
| <a name="towers.c"> |
| <dt>towers.c</dt> |
| <dd>Towers of Hanoi benchmark from the LLVM test suite, compiled to JavaScript with Emscripten. |
| The original C version of this benchmark was previously published in the LLVM test suite. |
| Source code: <a href="sources/towers.c">towers.c</a>, <a href="sources/towers.c.js">towers.c.js</a></dd> |
| |
| <a name="zlib"> |
| <dt>zlib</dt> |
| <dd>A benchmark based on compiling <a href="http://zlib.net">zlib</a> to JavaScript using |
| Emscripten. 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. |
| This benchmark was previously published in Octane version 2. |
| Source code: <a href="sources/zlib.js">zlib.js</a>, <a href="sources/zlib-data.js">zlib-data.js</a></dd> |
| </dl> |
| </main> |
| </body> |
| </html> |
| |