Octane sub-scores and overall score. Higher is better, highest of 10 runs. Omits a few Octane tests which fail to run (see Duktape repo tests/octane).
Test | duk.O2.230 | duk.O2.220 |
---|---|---|
Box2D | 1005 | 994 |
CodeLoad | 7386 | 7562 |
Crypto | 311 | 297 |
DeltaBlue | 232 | 232 |
EarleyBoyer | 564 | 492 |
Gameboy | 1818 | 1757 |
NavierStokes | 775 | 779 |
PdfJS | 910 | 918 |
RayTrace | 427 | 429 |
Richards | 181 | 178 |
Splay | 1173 | 1163 |
SplayLatency | 2753 | 3759 |
SCORE | 823 | 830 |
Baseline is duk.O2.220, compared to duk.O2.230. Lower is better, lowest of 5 runs.
duk.O2.230 | duk.O2.220 | |
---|---|---|
test-add-fastint | 0.63 ▲ | 0.71 |
test-add-float | 0.61 ⇑ | 0.66 |
test-add-int | 0.63 | 0.67 |
test-add-nan-fastint | 0.66 | 0.68 |
test-add-nan | 0.61 ⇑ | 0.66 |
test-add-string | 11.83 | 11.63 |
test-arith-add | 2.47 ⇑ | 2.69 |
test-arith-add-string | 1.16 | 1.17 |
test-arith-div | 7.37 | 7.36 |
test-arith-mod | 6.61 | 6.58 |
test-arith-mul | 3.34 | 3.33 |
test-arith-sub | 2.59 | 2.69 |
test-array-append | 0.43 | 0.43 |
test-array-cons-list | 0.47 | 0.48 |
test-array-foreach | 2.12 | 2.09 |
test-array-literal-100 | 2.29 | 2.33 |
test-array-literal-20 | 0.54 | 0.54 |
test-array-literal-3 | 0.20 | 0.21 |
test-array-pop | 1.42 | 1.47 |
test-array-push | 1.72 | 1.72 |
test-array-read | 1.65 | 1.67 |
test-array-read-lenloop | 1.70 | 1.77 |
test-array-sort | 2.99 | 3.07 |
test-array-write | 1.60 | 1.60 |
test-array-write-length | 1.42 | 1.45 |
test-assign-add | 3.70 | 3.78 |
test-assign-addto | 3.69 | 3.78 |
test-assign-addto-nan | 1.06 | 1.08 |
test-assign-boolean | 4.68 | 4.70 |
test-assign-const-int2 | 4.69 ⇑ | 5.12 |
test-assign-const-int | 2.38 | 2.41 |
test-assign-const | 3.33 ⇑ | 3.66 |
test-assign-literal | 3.62 | 3.63 |
test-assign-proplhs-reg | 2.50 | 2.47 |
test-assign-proprhs | 2.66 | 2.62 |
test-assign-reg | 2.74 | 2.73 |
test-base64-decode | 1.37 | 1.47 |
test-base64-decode-whitespace | 1.67 | 1.77 |
test-base64-encode | 1.62 ▲ | 1.89 |
test-bitwise-ops | 1.59 | 1.67 |
test-break-fast | 0.89 | 0.91 |
test-break-slow | 6.47 | 6.65 |
test-buffer-float32array-write | 2.78 | 2.79 |
test-buffer-nodejs-read | 2.10 | 2.14 |
test-buffer-nodejs-write | 2.76 | 2.72 |
test-buffer-object-read | 2.08 | 2.16 |
test-buffer-object-write | 2.75 | 2.71 |
test-buffer-plain-read | 1.76 | 1.74 |
test-buffer-plain-write | 1.61 | 1.65 |
test-call-apply | 2.14 | 2.18 |
test-call-basic-1 | 5.86 | 5.87 |
test-call-basic-2 | 5.88 | 5.87 |
test-call-basic-3 | 7.70 | 7.74 |
test-call-basic-4 | 15.65 | 16.52 |
test-call-bound-deep | 2.43 | 2.42 |
test-call-bound | 2.31 | 2.27 |
test-call-call | 1.91 | 1.95 |
test-call-native | 10.58 | 10.41 |
test-call-prop | 3.66 | 3.59 |
test-call-proxy-apply-1 | 24.78 | 24.89 |
test-call-proxy-pass-1 | 12.97 | 13.06 |
test-call-reg | 2.35 | 2.35 |
test-call-reg-new | 4.14 | 4.11 |
test-call-tail-1 | (0.98) | 0.95 |
test-call-tail-2 | (1.13) | 1.07 |
test-call-var | (5.38) | 5.16 |
test-closure-inner-functions | 1.01 | 0.99 |
test-compile-mandel | 11.64 | 11.50 |
test-compile-mandel-nofrac | 8.77 | 8.72 |
test-compile-short | 4.37 | 4.50 |
test-compile-string-ascii | 7.00 | 7.12 |
test-continue-fast | 1.21 | 1.26 |
test-continue-slow | 6.82 | 6.87 |
test-empty-loop | 1.40 | 1.49 |
test-empty-loop-slowpath | (0.93) | 0.89 |
test-empty-loop-step3 | 1.50 | 1.58 |
test-enum-basic | 2.73 | 2.73 |
test-equals-fastint | 0.50 | 0.51 |
test-equals-nonfastint | 0.58 | 0.57 |
test-error-create | 1.34 | 1.34 |
test-fib-2 | 2.88 | 2.91 |
test-fib | 5.48 | 5.34 |
test-func-bind | 1.64 | 1.65 |
test-func-tostring | 3.05 | 3.05 |
test-global-lookup | 6.18 | 6.16 |
test-hello-world | 0.00 | 0.00 |
test-hex-decode | 3.83 | 3.83 |
test-hex-encode | 2.78 | 2.74 |
test-jc-serialize-indented | 2.61 | 2.60 |
test-jc-serialize | 1.81 | 1.78 |
test-json-parse-hex | 3.20 | 3.19 |
test-json-parse-integer | 2.52 | 2.53 |
test-json-parse-number | 4.60 | 4.71 |
test-json-parse-string | 4.61 | 4.64 |
test-json-serialize-fastpath-loop | 2.83 | 2.82 |
test-json-serialize-forceslow | (7.59) | 7.32 |
test-json-serialize-hex | 1.36 | 1.37 |
test-json-serialize-indented-deep100 | (1.25) ⇓ | 1.16 |
test-json-serialize-indented-deep25 | 2.60 | 2.61 |
test-json-serialize-indented-deep500 | 0.76 | 0.78 |
test-json-serialize-indented | 4.55 | 4.54 |
test-json-serialize | (5.56) | 5.29 |
test-json-serialize-jsonrpc-message | 1.80 | 1.86 |
test-json-serialize-nofrac | 0.51 | 0.50 |
test-json-serialize-plainbuf | 2.37 | 2.42 |
test-json-serialize-slowpath-loop | 2.91 | 2.93 |
test-json-string-bench | 2.53 | 2.50 |
test-json-string-stringify | 5.31 | 5.36 |
test-jx-serialize-bufobj-forceslow | 3.27 | 3.30 |
test-jx-serialize-bufobj | 1.19 | 1.20 |
test-jx-serialize-indented | 2.56 | 2.59 |
test-jx-serialize | 1.74 | 1.74 |
test-mandel-iter10-normal | 0.03 | 0.03 |
test-mandel-iter10-promise | - | - |
test-mandel | 2.49 ⇑ | 2.70 |
test-mandel-promise | - | - |
test-math-clz32 | 1.90 | 2.03 |
test-misc-1dcell | 3.32 | 3.39 |
test-object-garbage-2 | 2.12 | 2.19 |
test-object-garbage | (3.10) | 2.90 |
test-object-literal-100 | 6.50 | 6.79 |
test-object-literal-20 | 1.38 | 1.42 |
test-object-literal-3 | 0.30 | 0.30 |
test-prop-read-1024 | 2.95 | 2.97 |
test-prop-read-16 | 2.96 | 2.97 |
test-prop-read-256 | 2.97 | 2.98 |
test-prop-read-32 | 2.99 | 2.97 |
test-prop-read-48 | 2.96 | 2.97 |
test-prop-read-4 | (3.15) | 3.02 |
test-prop-read-64 | 2.97 | 2.98 |
test-prop-read-8 | 2.98 | 2.98 |
test-prop-read-inherited | 4.31 | 4.28 |
test-prop-read | (3.20) | 3.07 |
test-prop-write-1024 | 2.91 | 2.90 |
test-prop-write-16 | 2.93 | 2.93 |
test-prop-write-256 | 2.91 | 2.89 |
test-prop-write-32 | 2.91 | 2.90 |
test-prop-write-48 | 2.91 | 2.89 |
test-prop-write-4 | 2.83 | 2.97 |
test-prop-write-64 | 2.91 | 2.90 |
test-prop-write-8 | 2.91 | 2.89 |
test-prop-write | 2.93 | 2.98 |
test-proxy-get | 1.50 | 1.52 |
test-random | 1.43 | 1.43 |
test-reflect-ownkeys-sorted | 0.79 | 0.78 |
test-reflect-ownkeys-unsorted | (0.83) | 0.80 |
test-regexp-case-insensitive-compile | 0.64 | 0.65 |
test-regexp-case-insensitive-execute | 1.42 | 1.42 |
test-regexp-case-sensitive-compile | 1.19 | 1.21 |
test-regexp-case-sensitive-execute | 1.04 | 1.04 |
test-regexp-compile | 1.64 | 1.64 |
test-regexp-execute | 1.11 | 1.12 |
test-regexp-string-parse | 5.55 | 5.73 |
test-reg-readwrite-object | 3.11 | 3.09 |
test-reg-readwrite-plain | 2.00 | 2.01 |
test-strict-equals-fastint | 0.51 | 0.51 |
test-strict-equals-nonfastint | 0.57 | 0.57 |
test-string-array-concat | 4.54 | 4.58 |
test-string-arridx | 1.18 | 1.19 |
test-string-charlen-ascii | 1.08 | 1.05 |
test-string-charlen-nonascii | 2.60 | 2.57 |
test-string-compare | 1.83 | 1.92 |
test-string-decodeuri | 3.54 | 3.53 |
test-string-encodeuri | 3.59 | 3.56 |
test-string-garbage | 2.63 | 2.75 |
test-string-intern-grow2 | (0.54) | 0.52 |
test-string-intern-grow | 5.14 | 5.15 |
test-string-intern-grow-short2 | 3.06 | 3.06 |
test-string-intern-grow-short | 3.11 | 3.12 |
test-string-intern-match | 0.16 | 0.16 |
test-string-intern-match-short | 1.23 | 1.25 |
test-string-intern-miss | 0.27 | 0.27 |
test-string-intern-miss-short | 1.49 | 1.49 |
test-string-literal-intern | (2.72) | 2.58 |
test-string-number-list | (0.58) | 0.56 |
test-string-plain-concat | 0.41 | 0.40 |
test-string-scan-nonascii | 3.02 | 3.02 |
test-string-uppercase | 2.12 | 2.15 |
test-symbol-tostring | 3.32 ▲ | 3.99 |
test-textdecoder-ascii | 1.86 ▲ | 2.13 |
test-textdecoder-nonascii | 2.63 | 2.64 |
test-textencoder-ascii | 4.31 | 4.23 |
test-textencoder-nonascii | 9.77 | 10.45 |
test-try-catch-nothrow | 3.15 | 3.16 |
test-try-catch-throw | (24.07) | 22.88 |
test-try-finally-nothrow | 3.71 | 3.74 |
test-try-finally-throw | (32.48) ⇓ | 30.13 |
Measurement host:
- "Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz" laptop
Duktape is compiled with:
- gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)
gcc -O2
- duk.O2: defaults + debugger and executor interrupt enabled, fastints enabled
Note that:
-
These are microbenchmarks, and don't necessarily represent application performance very well. Microbenchmarks are useful for measuring how well different parts of the engine work.
-
Only relative numbers matter. Loop counts differ between test cases so the numbers for two tests are not directly comparable. Absolute numbers may also change between test runs if test target is different.
-
The measurement process is not very accurate: it's based on running the test multiple times and measuring time using the
time
command.