Duktape 2.3.0 performance measurement
Octane
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 |
Duktape microbenchmarks, comparison to 2.2.0
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 |
Setup
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.