Duktape 2.1.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). Overall score for MuJS and Jerryscript omitted because some sub-scores are missing so an overall score would not be comparable.
Test | duk-pgo.O2.210 | duk.O2.210 | duk.O2.200 | duk.O2.150 | mujs | jerry |
---|---|---|---|---|---|---|
Box2D | 1180 | 830 | 756 | 586 | 311 | - |
CodeLoad | 6127 | 6310 | 5676 | 4579 | - | - |
Crypto | 285 | 242 | 185 | 183 | - | 193 |
DeltaBlue | 295 | 192 | 178 | 138 | 78 | 166 |
EarleyBoyer | 530 | 529 | 342 | 291 | - | - |
Gameboy | 2197 | 1491 | 1324 | 1119 | - | - |
NavierStokes | 778 | 687 | 557 | 503 | - | - |
PdfJS | 831 | 754 | 390 | 352 | - | - |
RayTrace | 427 | 352 | 241 | 209 | 330 | 234 |
Richards | 220 | 150 | 144 | 112 | 115 | 166 |
Splay | 1083 | 930 | 696 | 635 | 29 | - |
SplayLatency | 2813 | 4240 | 3344 | 2288 | 266 | - |
SCORE | 844 | 724 | 568 | 475 | - | - |
Duktape microbenchmarks, comparison to other engines
Baseline is duk.O2.210, compared to a few other engines. Lower is better, lowest of 5 runs.
duk.O2.210 | mujs | jerry | |
---|---|---|---|
test-add-fastint.js | 0.73 | (4.38) ▼ | (2.95) ▼ |
test-add-float.js | 0.70 | (4.38) ▼ | (4.16) ▼ |
test-add-nan-fastint.js | 0.76 | (4.38) ▼ | (3.50) ▼ |
test-add-nan.js | 0.70 | (4.40) ▼ | (4.17) ▼ |
test-arith-add.js | 2.96 | (17.48) ▼ | (16.58) ▼ |
test-arith-div.js | 7.94 | (12.20) ▼ | (20.96) ▼ |
test-arith-mod.js | 7.36 | (14.76) ▼ | (25.26) ▼ |
test-arith-mul.js | 4.00 | (12.03) ▼ | (16.46) ▼ |
test-arith-sub.js | 2.98 | (12.13) ▼ | (16.91) ▼ |
test-array-append.js | 0.52 | (51.66) ▼ | - |
test-array-cons-list.js | 0.72 | (9.07) ▼ | (2.19) ▼ |
test-array-foreach.js | 2.60 | (3.56) ▼ | 1.65 ▲ |
test-array-literal.js | 1.10 | (60.52) ▼ | 0.88 ▲ |
test-array-pop.js | 2.06 | (51.36) ▼ | (7.08) ▼ |
test-array-push.js | 2.30 | (8.55) ▼ | (4.06) ▼ |
test-array-read-lenloop.js | 2.16 | (123.04) ▼ | (4.57) ▼ |
test-array-read.js | 2.03 | (232.08) ▼ | (5.70) ▼ |
test-array-sort.js | 3.35 | - | (4.26) ▼ |
test-array-write-length.js | 1.81 | (3.70) ▼ | (2.70) ▼ |
test-array-write.js | 1.97 | (248.86) ▼ | (6.51) ▼ |
test-assign-add.js | 4.21 | (37.42) ▼ | (25.02) ▼ |
test-assign-add.js | 4.20 | (37.40) ▼ | (25.02) ▼ |
test-assign-addto-nan.js | 1.20 | (8.04) ▼ | (6.45) ▼ |
test-assign-addto.js | 4.20 | (38.39) ▼ | (30.42) ▼ |
test-assign-boolean.js | 5.16 | (10.36) ▼ | (20.73) ▼ |
test-assign-const-int.js | 3.01 | (10.56) ▼ | (12.80) ▼ |
test-assign-const-int2.js | 6.08 | (10.91) ▼ | (12.98) ▼ |
test-assign-const.js | 5.18 | (10.88) ▼ | (19.16) ▼ |
test-assign-literal.js | 4.21 | (10.95) ▼ | (23.22) ▼ |
test-assign-proplhs-reg.js | 2.90 | 2.70 | (5.58) ▼ |
test-assign-proprhs.js | 3.05 | 2.67 ▲ | (3.99) ▼ |
test-assign-reg.js | 3.42 | (9.68) ▼ | (17.14) ▼ |
test-base64-decode-whitespace.js | 2.20 | - | - |
test-base64-decode.js | 1.73 | - | - |
test-base64-encode.js | 1.86 | - | - |
test-bitwise-ops.js | 2.04 | (14.97) ▼ | (21.76) ▼ |
test-break-fast.js | 1.54 | 1.26 ▲ | 1.40 ⇑ |
test-break-slow.js | 8.29 | 2.82 ▲ | 4.57 ▲ |
test-buffer-nodejs-read.js | 2.50 | - | - |
test-buffer-nodejs-write.js | 3.28 | - | - |
test-buffer-object-read.js | 2.53 | - | - |
test-buffer-object-write.js | 3.28 | - | - |
test-buffer-plain-read.js | 2.04 | - | - |
test-buffer-plain-write.js | 2.00 | - | - |
test-call-basic-1.js | 7.69 | 7.30 | (10.44) ▼ |
test-call-basic-2.js | 7.70 | 5.28 ▲ | (9.14) ▼ |
test-call-basic-3.js | 9.85 | (13.68) ▼ | (15.58) ▼ |
test-call-basic-4.js | 19.48 | (37.95) ▼ | (39.20) ▼ |
test-call-native.js | 12.95 | (17.36) ▼ | 8.52 ▲ |
test-call-prop.js | 4.43 | 3.14 ▲ | (4.68) |
test-call-reg-new.js | 5.90 | 3.00 ▲ | 3.38 ▲ |
test-call-reg.js | 2.99 | 2.48 ▲ | (3.84) ▼ |
test-call-var.js | 6.20 | 4.79 ▲ | 4.32 ▲ |
test-closure-inner-functions.js | 1.33 | 0.66 ▲ | 0.26 ▲ |
test-compile-mandel-nofrac.js | 10.40 | 6.50 ▲ | 2.41 ▲ |
test-compile-mandel.js | 13.47 | 6.49 ▲ | 2.40 ▲ |
test-compile-short.js | 5.77 | 2.43 ▲ | 0.98 ▲ |
test-compile-string-ascii.js | 7.06 | 6.99 | - |
test-continue-fast.js | 2.06 | (2.20) | (2.56) ▼ |
test-continue-slow.js | 8.82 | 3.65 ▲ | 6.56 ▲ |
test-empty-loop-slowpath.js | 1.10 | 1.09 | 0.71 ▲ |
test-empty-loop.js | 1.84 | (6.38) ▼ | (3.60) ▼ |
test-enum-basic.js | 3.35 | 0.71 ▲ | 1.17 ▲ |
test-equals-fastint.js | 0.62 | (2.59) ▼ | (3.36) ▼ |
test-equals-nonfastint.js | 0.66 | (2.58) ▼ | (4.72) ▼ |
test-error-create.js | 1.71 | (5.12) ▼ | 0.82 ▲ |
test-fib.js | 6.34 | 3.60 ▲ | 5.71 ⇑ |
test-global-lookup.js | 6.79 | 4.51 ▲ | 2.74 ▲ |
test-hello-world.js | 0.00 | 0.00 | 0.00 |
test-hex-decode.js | 4.00 | - | - |
test-hex-encode.js | 3.08 | - | - |
test-jc-serialize-indented.js | 3.82 | - | - |
test-jc-serialize.js | 2.39 | - | - |
test-json-parse-hex.js | 3.60 | - | - |
test-json-parse-integer.js | 2.87 | (23.34) ▼ | - |
test-json-parse-number.js | 5.22 | 2.68 ▲ | - |
test-json-parse-string.js | 5.17 | (48.75) ▼ | - |
test-json-serialize-fastpath-loop.js | 3.62 | (13.40) ▼ | (582.05) ▼ |
test-json-serialize-forceslow.js | 9.78 | 2.39 ▲ | 9.10 |
test-json-serialize-hex.js | 1.51 | - | - |
test-json-serialize-indented-deep100.js | 1.43 | (1.62) ▼ | (147.40) ▼ |
test-json-serialize-indented-deep25.js | 3.60 | (11.21) ▼ | (265.65) ▼ |
test-json-serialize-indented-deep500.js | 0.93 | - | - |
test-json-serialize-indented.js | 6.12 | (16.42) ▼ | (108.06) ▼ |
test-json-serialize-jsonrpc-message.js | 3.27 | - | - |
test-json-serialize-nofrac.js | 0.66 | (1.72) ▼ | (7.26) ▼ |
test-json-serialize-plainbuf.js | 2.48 | - | - |
test-json-serialize-slowpath-loop.js | 3.72 | - | (6.34) ▼ |
test-json-serialize.js | 6.48 | 2.38 ▲ | (9.04) ▼ |
test-json-string-bench.js | 3.18 | (53.90) ▼ | - |
test-json-string-stringify.js | 10.16 | (11.77) ▼ | - |
test-jx-serialize-bufobj-forceslow.js | 4.47 | - | - |
test-jx-serialize-bufobj.js | 1.71 | - | - |
test-jx-serialize-indented.js | 3.45 | - | - |
test-jx-serialize.js | 2.24 | - | - |
test-mandel.js | 3.15 | (15.26) ▼ | (14.52) ▼ |
test-object-garbage-2.js | 3.62 | (54.81) ▼ | 3.29 ⇑ |
test-object-garbage.js | 3.31 | 2.70 ▲ | 2.77 ▲ |
test-object-literal.js | 2.53 | (4.43) ▼ | 2.29 ⇑ |
test-prop-read-1024.js | 3.64 | (6.74) ▼ | (4.46) ▼ |
test-prop-read-16.js | 3.69 | (4.55) ▼ | (4.44) ▼ |
test-prop-read-256.js | 3.62 | (8.29) ▼ | (4.42) ▼ |
test-prop-read-32.js | 3.65 | (5.58) ▼ | (4.43) ▼ |
test-prop-read-4.js | 3.54 | (3.99) ▼ | (4.41) ▼ |
test-prop-read-48.js | 3.64 | (6.52) ▼ | (4.42) ▼ |
test-prop-read-64.js | 3.62 | (6.56) ▼ | (4.43) ▼ |
test-prop-read-8.js | 3.75 | (5.00) ▼ | (4.46) ▼ |
test-prop-read.js | 3.83 | (4.03) | (4.54) ▼ |
test-prop-write-1024.js | 3.32 | (10.37) ▼ | (5.29) ▼ |
test-prop-write-16.js | 3.30 | (4.42) ▼ | (5.30) ▼ |
test-prop-write-256.js | 3.38 | (8.24) ▼ | (5.30) ▼ |
test-prop-write-32.js | 3.30 | (5.59) ▼ | (5.32) ▼ |
test-prop-write-4.js | 3.53 | (3.95) ▼ | (5.28) ▼ |
test-prop-write-48.js | 3.33 | (6.50) ▼ | (5.26) ▼ |
test-prop-write-64.js | 3.31 | (6.51) ▼ | (5.31) ▼ |
test-prop-write-8.js | 3.30 | (4.90) ▼ | (5.27) ▼ |
test-prop-write.js | 3.65 | (3.95) ⇓ | (5.29) ▼ |
test-random.js | 2.26 | 1.12 ▲ | 2.00 ▲ |
test-reg-readwrite-object.js | 3.73 | (8.57) ▼ | (15.01) ▼ |
test-reg-readwrite-plain.js | 2.51 | (8.44) ▼ | (12.16) ▼ |
test-regexp-case-insensitive.js | 28.48 | 0.00 ▲ | 0.00 ▲ |
test-regexp-compile.js | 2.08 | 1.62 ▲ | 0.46 ▲ |
test-regexp-execute.js | 1.49 | (1.84) ▼ | 1.25 ▲ |
test-regexp-string-parse.js | 6.41 | - | - |
test-strict-equals-fastint.js | 0.63 | (2.66) ▼ | (3.46) ▼ |
test-strict-equals-nonfastint.js | 0.66 | (2.65) ▼ | (4.50) ▼ |
test-string-array-concat.js | 5.31 | (270.24) ▼ | - |
test-string-arridx.js | 1.69 | 1.02 ▲ | 1.65 |
test-string-charlen-ascii.js | 1.17 | (5.14) ▼ | 0.80 ▲ |
test-string-charlen-nonascii.js | 3.07 | (7.73) ▼ | 0.54 ▲ |
test-string-compare.js | 2.40 | (790.20) ▼ | - |
test-string-decodeuri.js | 4.51 | 2.26 ▲ | - |
test-string-encodeuri.js | 4.68 | 3.97 ▲ | - |
test-string-garbage.js | 4.04 | 1.90 ▲ | 2.08 ▲ |
test-string-intern-grow-short.js | 3.78 | - | - |
test-string-intern-grow-short2.js | 3.73 | - | - |
test-string-intern-grow.js | 4.09 | - | - |
test-string-intern-grow2.js | 0.64 | - | - |
test-string-intern-match-short.js | 1.81 | - | - |
test-string-intern-match.js | 0.22 | - | - |
test-string-intern-miss-short.js | 2.16 | - | - |
test-string-intern-miss.js | 0.34 | - | - |
test-string-number-list.js | 0.66 | (7.78) ▼ | - |
test-string-plain-concat.js | 0.46 | (1.04) ▼ | (0.54) ▼ |
test-string-scan-nonascii.js | 4.25 | (50.74) ▼ | (15.79) ▼ |
test-string-uppercase.js | 2.82 | (4.86) ▼ | - |
test-textdecoder-ascii.js | 2.65 | - | - |
test-textdecoder-nonascii.js | 2.78 | - | - |
test-textencoder-ascii.js | 5.48 | - | - |
test-textencoder-nonascii.js | 11.26 | - | - |
test-try-catch-nothrow.js | 3.32 | 2.42 ▲ | (3.58) ⇓ |
test-try-catch-throw.js | 30.96 | 23.70 ▲ | 16.34 ▲ |
test-try-finally-nothrow.js | 4.02 | 2.29 ▲ | 4.06 |
test-try-finally-throw.js | 46.12 | 26.29 ▲ | 19.72 ▲ |
Duktape microbenchmarks, pruned
Baseline is duk.O2.200, compared to duk.O2.210, i.e. improvement or regression from 2.0.x -> 2.1.x. Lower is better, lowest of 5 runs.
duk.O2.210 | duk.O2.200 | duk.O2.150 | mujs | jerry | lua | python | |
---|---|---|---|---|---|---|---|
test-add-fastint.js | 0.73 ▲ | 0.85 | 0.91 | 4.38 | 2.95 | - | - |
test-add-float.js | 0.70 ▲ | 0.87 | 0.94 | 4.38 | 4.16 | - | - |
test-add-nan-fastint.js | 0.76 ▲ | 0.90 | 1.00 | 4.38 | 3.50 | - | - |
test-add-nan.js | 0.70 ▲ | 0.87 | 0.91 | 4.40 | 4.17 | - | - |
test-arith-add.js | 2.96 ▲ | 3.43 | 3.66 | 17.48 | 16.58 | - | - |
test-arith-div.js | 7.94 | 8.38 | 9.19 | 12.20 | 20.96 | - | - |
test-arith-mod.js | 7.36 | 7.50 | 8.73 | 14.76 | 25.26 | - | - |
test-arith-mul.js | 4.00 ⇑ | 4.36 | 5.14 | 12.03 | 16.46 | - | - |
test-arith-sub.js | 2.98 ▲ | 3.50 | 3.95 | 12.13 | 16.91 | - | - |
test-array-append.js | 0.52 ▲ | 0.72 | 0.76 | 51.66 | - | - | - |
test-array-cons-list.js | 0.72 ▲ | 0.96 | 2.50 | 9.07 | 2.19 | - | - |
test-array-foreach.js | 2.60 | 2.78 | 2.92 | 3.56 | 1.65 | - | - |
test-array-literal.js | 1.10 ▲ | 1.76 | 1.98 | 60.52 | 0.88 | - | - |
test-array-pop.js | 2.06 ▲ | 2.45 | 8.08 | 51.36 | 7.08 | 1.16 | 1.18 |
test-array-push.js | 2.30 ▲ | 2.74 | 5.38 | 8.55 | 4.06 | 1.02 | 0.60 |
test-array-read-lenloop.js | 2.16 ▲ | 2.41 | 2.75 | 123.04 | 4.57 | - | - |
test-array-read.js | 2.03 ▲ | 2.26 | 2.60 | 232.08 | 5.70 | 1.12 | 2.18 |
test-array-sort.js | 3.35 | 3.48 | 3.51 | - | 4.26 | - | - |
test-array-write-length.js | 1.81 ⇑ | 2.00 | 2.94 | 3.70 | 2.70 | - | - |
test-array-write.js | 1.97 ▲ | 2.24 | 3.01 | 248.86 | 6.51 | 1.34 | 3.02 |
test-assign-add.js | 4.21 ▲ | 5.36 | 6.04 | 37.42 | 25.02 | 3.49 | 15.83 |
test-assign-add.js | 4.20 ▲ | 5.36 | 6.04 | 37.40 | 25.02 | 3.51 | 15.87 |
test-assign-addto-nan.js | 1.20 ▲ | 1.45 | 1.64 | 8.04 | 6.45 | - | - |
test-assign-addto.js | 4.20 ▲ | 5.36 | 6.04 | 38.39 | 30.42 | 3.50 | 17.13 |
test-assign-boolean.js | 5.16 | 5.20 | 5.22 | 10.36 | 20.73 | - | - |
test-assign-const-int.js | 3.01 ▲ | 4.18 | 3.08 | 10.56 | 12.80 | 2.56 | 6.03 |
test-assign-const-int2.js | 6.08 ▲ | 8.52 | 10.18 | 10.91 | 12.98 | - | - |
test-assign-const.js | 5.18 ▲ | 5.77 | 4.50 | 10.88 | 19.16 | 2.55 | 6.06 |
test-assign-literal.js | 4.21 ▲ | 5.44 | 4.76 | 10.95 | 23.22 | 2.74 | 13.56 |
test-assign-proplhs-reg.js | 2.90 ⇑ | 3.19 | 3.92 | 2.70 | 5.58 | - | - |
test-assign-proprhs.js | 3.05 | 3.21 | 4.30 | 2.67 | 3.99 | - | - |
test-assign-reg.js | 3.42 ▲ | 4.80 | 3.35 | 9.68 | 17.14 | 2.52 | 5.96 |
test-base64-decode-whitespace.js | (2.20) ⇓ | 2.01 | - | - | - | - | 8.63 |
test-base64-decode.js | (1.73) | 1.66 | - | - | - | - | 8.62 |
test-base64-encode.js | 1.86 | 1.87 | - | - | - | - | 20.42 |
test-bitwise-ops.js | 2.04 ▲ | 2.38 | 2.46 | 14.97 | 21.76 | - | - |
test-break-fast.js | 1.54 ▲ | 1.81 | 1.57 | 1.26 | 1.40 | - | - |
test-break-slow.js | 8.29 ▲ | 9.37 | 8.93 | 2.82 | 4.57 | - | - |
test-buffer-nodejs-read.js | 2.50 ▲ | 2.81 | 2.80 | - | - | - | - |
test-buffer-nodejs-write.js | 3.28 | 3.47 | 3.40 | - | - | - | - |
test-buffer-object-read.js | 2.53 ⇑ | 2.81 | 2.81 | - | - | - | - |
test-buffer-object-write.js | 3.28 | 3.50 | 3.40 | - | - | - | - |
test-buffer-plain-read.js | 2.04 ▲ | 2.37 | 2.34 | - | - | - | - |
test-buffer-plain-write.js | 2.00 ▲ | 2.29 | 2.14 | - | - | - | - |
test-call-basic-1.js | 7.69 ▲ | 8.73 | 9.95 | 7.30 | 10.44 | 2.27 | 6.16 |
test-call-basic-2.js | 7.70 ▲ | 8.66 | 10.00 | 5.28 | 9.14 | - | - |
test-call-basic-3.js | 9.85 ⇑ | 10.94 | 16.15 | 13.68 | 15.58 | - | - |
test-call-basic-4.js | 19.48 ⇑ | 21.02 | 38.63 | 37.95 | 39.20 | - | - |
test-call-native.js | 12.95 | 13.88 | 14.60 | 17.36 | 8.52 | - | - |
test-call-prop.js | 4.43 ⇑ | 4.90 | 6.02 | 3.14 | 4.68 | - | - |
test-call-reg-new.js | 5.90 ▲ | 6.99 | 7.24 | 3.00 | 3.38 | - | - |
test-call-reg.js | 2.99 ▲ | 3.37 | 3.84 | 2.48 | 3.84 | - | - |
test-call-var.js | 6.20 ▲ | 8.64 | 8.58 | 4.79 | 4.32 | - | - |
test-closure-inner-functions.js | 1.33 ▲ | 1.80 | 2.59 | 0.66 | 0.26 | - | - |
test-compile-mandel-nofrac.js | 10.40 ⇑ | 11.36 | 14.08 | 6.50 | 2.41 | - | - |
test-compile-mandel.js | 13.47 | 14.45 | 16.91 | 6.49 | 2.40 | - | - |
test-compile-short.js | 5.77 ▲ | 7.02 | 9.67 | 2.43 | 0.98 | - | - |
test-compile-string-ascii.js | 7.06 | 7.12 | 9.93 | 6.99 | - | - | - |
test-continue-fast.js | 2.06 ⇑ | 2.24 | 2.06 | 2.20 | 2.56 | - | - |
test-continue-slow.js | 8.82 ▲ | 9.92 | 9.30 | 3.65 | 6.56 | - | - |
test-empty-loop-slowpath.js | 1.10 ▲ | 1.77 | 2.38 | 1.09 | 0.71 | - | - |
test-empty-loop.js | 1.84 ▲ | 2.40 | 2.34 | 6.38 | 3.60 | 1.14 | 5.13 |
test-enum-basic.js | 3.35 ▲ | 4.33 | 4.92 | 0.71 | 1.17 | - | - |
test-equals-fastint.js | 0.62 ▲ | 0.72 | 1.23 | 2.59 | 3.36 | - | - |
test-equals-nonfastint.js | 0.66 ▲ | 0.76 | 1.33 | 2.58 | 4.72 | - | - |
test-error-create.js | 1.71 ▲ | 2.30 | 3.64 | 5.12 | 0.82 | - | - |
test-fib.js | 6.34 ▲ | 7.57 | 8.34 | 3.60 | 5.71 | 1.43 | 2.91 |
test-global-lookup.js | 6.79 ▲ | 8.96 | 11.60 | 4.51 | 2.74 | - | - |
test-hello-world.js | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
test-hex-decode.js | 4.00 | 3.98 | 4.04 | - | - | - | 13.45 |
test-hex-encode.js | 3.08 | 3.29 | - | - | - | - | 1.68 |
test-jc-serialize-indented.js | (3.82) | 3.69 | 3.98 | - | - | - | - |
test-jc-serialize.js | 2.39 | 2.48 | 2.78 | - | - | - | - |
test-json-parse-hex.js | 3.60 | 3.60 | - | - | - | - | - |
test-json-parse-integer.js | 2.87 ▲ | 4.06 | 4.19 | 23.34 | - | - | 0.08 |
test-json-parse-number.js | 5.22 | 5.26 | 5.35 | 2.68 | - | - | 0.40 |
test-json-parse-string.js | 5.17 ⇑ | 5.68 | 5.43 | 48.75 | - | - | - |
test-json-serialize-fastpath-loop.js | 3.62 ⇑ | 3.99 | 4.03 | 13.40 | 582.05 | - | - |
test-json-serialize-forceslow.js | 9.78 | 9.98 | 11.98 | 2.39 | 9.10 | - | - |
test-json-serialize-hex.js | 1.51 | 1.52 | - | - | - | - | - |
test-json-serialize-indented-deep100.js | 1.43 ▲ | 1.93 | 2.72 | 1.62 | 147.40 | - | - |
test-json-serialize-indented-deep25.js | 3.60 | 3.56 | 3.76 | 11.21 | 265.65 | - | - |
test-json-serialize-indented-deep500.js | 0.93 ▲ | 1.27 | 1.61 | - | - | - | - |
test-json-serialize-indented.js | 6.12 ⇑ | 6.67 | 7.16 | 16.42 | 108.06 | - | - |
test-json-serialize-jsonrpc-message.js | 3.27 | 3.32 | 3.32 | - | - | - | - |
test-json-serialize-nofrac.js | 0.66 ▲ | 0.75 | 0.79 | 1.72 | 7.26 | - | - |
test-json-serialize-plainbuf.js | 2.48 ▲ | 30.95 | 0.07 | - | - | - | - |
test-json-serialize-slowpath-loop.js | 3.72 ▲ | 4.65 | 6.60 | - | 6.34 | - | - |
test-json-serialize.js | 6.48 | 6.49 | 6.62 | 2.38 | 9.04 | - | 0.65 |
test-json-string-bench.js | 3.18 ▲ | 3.85 | 5.59 | 53.90 | - | - | - |
test-json-string-stringify.js | 10.16 | 10.36 | 10.44 | 11.77 | - | - | 0.53 |
test-jx-serialize-bufobj-forceslow.js | 4.47 ▲ | 5.05 | 6.17 | - | - | - | - |
test-jx-serialize-bufobj.js | 1.71 | 1.73 | 1.79 | - | - | - | - |
test-jx-serialize-indented.js | 3.45 | 3.51 | 3.80 | - | - | - | - |
test-jx-serialize.js | 2.24 | 2.36 | 2.62 | - | - | - | - |
test-mandel.js | 3.15 ▲ | 3.73 | 4.37 | 15.26 | 14.52 | 1.96 | - |
test-object-garbage-2.js | 3.62 ▲ | 5.43 | 5.38 | 54.81 | 3.29 | - | - |
test-object-garbage.js | 3.31 ▲ | 5.05 | 5.49 | 2.70 | 2.77 | 4.15 | 0.85 |
test-object-literal.js | 2.53 ▲ | 3.21 | 2.88 | 4.43 | 2.29 | - | - |
test-prop-read-1024.js | 3.64 ▲ | 4.20 | 5.26 | 6.74 | 4.46 | - | - |
test-prop-read-16.js | 3.69 ⇑ | 4.07 | 5.61 | 4.55 | 4.44 | - | - |
test-prop-read-256.js | 3.62 ⇑ | 4.02 | 5.21 | 8.29 | 4.42 | - | - |
test-prop-read-32.js | 3.65 ⇑ | 4.00 | 5.19 | 5.58 | 4.43 | - | - |
test-prop-read-4.js | 3.54 | 3.61 | 4.79 | 3.99 | 4.41 | - | - |
test-prop-read-48.js | 3.64 ▲ | 7.31 | 5.86 | 6.52 | 4.42 | - | - |
test-prop-read-64.js | 3.62 ▲ | 4.05 | 5.24 | 6.56 | 4.43 | - | - |
test-prop-read-8.js | 3.75 | 3.76 | 5.01 | 5.00 | 4.46 | - | - |
test-prop-read.js | 3.83 | 3.76 | 4.98 | 4.03 | 4.54 | 1.14 | 2.62 |
test-prop-write-1024.js | 3.32 ▲ | 4.09 | 4.97 | 10.37 | 5.29 | - | - |
test-prop-write-16.js | 3.30 ▲ | 4.15 | 5.02 | 4.42 | 5.30 | - | - |
test-prop-write-256.js | 3.38 ▲ | 4.10 | 5.02 | 8.24 | 5.30 | - | - |
test-prop-write-32.js | 3.30 ▲ | 4.07 | 5.03 | 5.59 | 5.32 | - | - |
test-prop-write-4.js | 3.53 | 3.66 | 4.40 | 3.95 | 5.28 | - | - |
test-prop-write-48.js | 3.33 ▲ | 4.01 | 8.10 | 6.50 | 5.26 | - | - |
test-prop-write-64.js | 3.31 ▲ | 4.03 | 5.07 | 6.51 | 5.31 | - | - |
test-prop-write-8.js | 3.30 ▲ | 3.82 | 4.60 | 4.90 | 5.27 | - | - |
test-prop-write.js | 3.65 | 3.74 | 4.42 | 3.95 | 5.29 | 1.41 | 2.72 |
test-random.js | 2.26 ▲ | 2.56 | 6.86 | 1.12 | 2.00 | - | - |
test-reg-readwrite-object.js | 3.73 ▲ | 4.27 | 3.86 | 8.57 | 15.01 | 1.92 | - |
test-reg-readwrite-plain.js | 2.51 ▲ | 3.59 | 2.48 | 8.44 | 12.16 | 1.91 | 5.50 |
test-regexp-case-insensitive.js | 28.48 | 27.76 | 25.69 | 0.00 | 0.00 | - | - |
test-regexp-compile.js | 2.08 ⇑ | 2.28 | 2.90 | 1.62 | 0.46 | - | - |
test-regexp-execute.js | 1.49 ▲ | 1.72 | 2.18 | 1.84 | 1.25 | - | - |
test-regexp-string-parse.js | 6.41 | 6.42 | 10.70 | - | - | - | 0.59 |
test-strict-equals-fastint.js | 0.63 ▲ | 0.71 | 1.23 | 2.66 | 3.46 | - | - |
test-strict-equals-nonfastint.js | 0.66 ▲ | 0.76 | 1.33 | 2.65 | 4.50 | - | - |
test-string-array-concat.js | 5.31 ▲ | 6.25 | 6.63 | 270.24 | - | 2.22 | 3.54 |
test-string-arridx.js | 1.69 ⇑ | 1.82 | 1.96 | 1.02 | 1.65 | - | - |
test-string-charlen-ascii.js | 1.17 | 1.20 | 1.45 | 5.14 | 0.80 | - | - |
test-string-charlen-nonascii.js | (3.07) | 2.87 | 2.90 | 7.73 | 0.54 | - | - |
test-string-compare.js | 2.40 | 2.56 | 3.86 | 790.20 | - | 3.49 | 5.95 |
test-string-decodeuri.js | 4.51 | 4.40 | 4.13 | 2.26 | - | - | - |
test-string-encodeuri.js | 4.68 | 4.85 | 4.47 | 3.97 | - | - | - |
test-string-garbage.js | 4.04 ▲ | 5.56 | 5.36 | 1.90 | 2.08 | 1.77 | 1.82 |
test-string-intern-grow-short.js | 3.78 ▲ | 13.04 | 12.72 | - | - | - | - |
test-string-intern-grow-short2.js | 3.73 ▲ | 5.06 | 5.31 | - | - | - | - |
test-string-intern-grow.js | 4.09 ▲ | 21.42 | 21.73 | - | - | - | - |
test-string-intern-grow2.js | 0.64 ▲ | 1.84 | 1.88 | - | - | - | - |
test-string-intern-match-short.js | 1.81 ▲ | 2.74 | 2.68 | - | - | - | - |
test-string-intern-match.js | 0.22 ▲ | 0.26 | 0.26 | - | - | - | - |
test-string-intern-miss-short.js | 2.16 ▲ | 3.40 | 3.57 | - | - | - | - |
test-string-intern-miss.js | 0.34 ▲ | 1.22 | 1.24 | - | - | - | - |
test-string-number-list.js | 0.66 ▲ | 1.25 | 1.74 | 7.78 | - | - | - |
test-string-plain-concat.js | 0.46 ▲ | 0.90 | 1.07 | 1.04 | 0.54 | 0.60 | 0.00 |
test-string-scan-nonascii.js | (4.25) ⇓ | 3.96 | 4.38 | 50.74 | 15.79 | - | - |
test-string-uppercase.js | 2.82 | 2.83 | 2.86 | 4.86 | - | - | 1.34 |
test-textdecoder-ascii.js | (2.65) ⇓ | 2.42 | - | - | - | - | - |
test-textdecoder-nonascii.js | 2.78 ▲ | 3.41 | - | - | - | - | - |
test-textencoder-ascii.js | 5.48 | 5.47 | - | - | - | - | - |
test-textencoder-nonascii.js | 11.26 | 11.92 | - | - | - | - | - |
test-try-catch-nothrow.js | 3.32 | 3.38 | 2.97 | 2.42 | 3.58 | - | - |
test-try-catch-throw.js | 30.96 ▲ | 43.04 | 45.43 | 23.70 | 16.34 | - | - |
test-try-finally-nothrow.js | 4.02 | 4.08 | 3.88 | 2.29 | 4.06 | - | - |
test-try-finally-throw.js | 46.12 ▲ | 53.72 | 55.95 | 26.29 | 19.72 | - | - |
Duktape microbenchmarks, full
Baseline is duk.O2.200, compared to duk.O2.210. Lower is better, lowest of 5 runs.
duk-perf-pgo.O2.210 | duk-pgo.O2.210 | duk-perf.O2.210 | duk-perf.O2.200 | duk.O2.210 | duk.O2.200 | duk.O2.150 | mujs | jerry | lua | python | perl | ruby | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
test-add-fastint.js | 0.71 | 0.60 | 0.65 | 0.65 | 0.73 ▲ | 0.85 | 0.91 | 4.38 | 2.95 | - | - | - | - |
test-add-float.js | 0.60 | 0.66 | 0.68 | 0.67 | 0.70 ▲ | 0.87 | 0.94 | 4.38 | 4.16 | - | - | - | - |
test-add-nan-fastint.js | 0.71 | 0.82 | 0.76 | 0.73 | 0.76 ▲ | 0.90 | 1.00 | 4.38 | 3.50 | - | - | - | - |
test-add-nan.js | 0.60 | 0.66 | 0.67 | 0.67 | 0.70 ▲ | 0.87 | 0.91 | 4.40 | 4.17 | - | - | - | - |
test-arith-add.js | 2.87 | 2.40 | 2.62 | 2.58 | 2.96 ▲ | 3.43 | 3.66 | 17.48 | 16.58 | - | - | - | - |
test-arith-div.js | 7.81 | 7.18 | 7.44 | 7.62 | 7.94 | 8.38 | 9.19 | 12.20 | 20.96 | - | - | - | - |
test-arith-mod.js | 6.78 | 7.21 | 6.56 | 6.40 | 7.36 | 7.50 | 8.73 | 14.76 | 25.26 | - | - | - | - |
test-arith-mul.js | 3.94 | 4.01 | 3.36 | 3.44 | 4.00 ⇑ | 4.36 | 5.14 | 12.03 | 16.46 | - | - | - | - |
test-arith-sub.js | 2.01 | 3.03 | 2.68 | 2.70 | 2.98 ▲ | 3.50 | 3.95 | 12.13 | 16.91 | - | - | - | - |
test-array-append.js | 0.45 | 0.48 | 0.52 | 0.61 | 0.52 ▲ | 0.72 | 0.76 | 51.66 | - | - | - | - | - |
test-array-cons-list.js | 0.66 | 0.68 | 0.70 | 0.90 | 0.72 ▲ | 0.96 | 2.50 | 9.07 | 2.19 | - | - | - | - |
test-array-foreach.js | 2.48 | 2.66 | 2.46 | 2.65 | 2.60 | 2.78 | 2.92 | 3.56 | 1.65 | - | - | - | - |
test-array-literal.js | 1.08 | 1.12 | 1.10 | 1.64 | 1.10 ▲ | 1.76 | 1.98 | 60.52 | 0.88 | - | - | - | - |
test-array-pop.js | 1.51 | 1.60 | 2.08 | 2.35 | 2.06 ▲ | 2.45 | 8.08 | 51.36 | 7.08 | 1.16 | 1.18 | - | - |
test-array-push.js | 1.72 | 1.84 | 2.20 | 2.63 | 2.30 ▲ | 2.74 | 5.38 | 8.55 | 4.06 | 1.02 | 0.60 | - | - |
test-array-read-lenloop.js | 1.52 | 1.62 | 2.11 | 2.07 | 2.16 ▲ | 2.41 | 2.75 | 123.04 | 4.57 | - | - | - | - |
test-array-read.js | 1.62 | 1.64 | 1.94 | 1.97 | 2.03 ▲ | 2.26 | 2.60 | 232.08 | 5.70 | 1.12 | 2.18 | 3.52 | 1.66 |
test-array-sort.js | 3.68 | 3.61 | 3.31 | 3.58 | 3.35 | 3.48 | 3.51 | - | 4.26 | - | - | - | - |
test-array-write-length.js | 1.44 | 1.50 | 1.67 | 1.64 | 1.81 ⇑ | 2.00 | 2.94 | 3.70 | 2.70 | - | - | - | - |
test-array-write.js | 1.78 | 1.84 | 1.96 | 1.94 | 1.97 ▲ | 2.24 | 3.01 | 248.86 | 6.51 | 1.34 | 3.02 | 3.57 | 2.34 |
test-assign-add.js | 3.68 | 4.02 | 3.81 | 3.83 | 4.21 ▲ | 5.36 | 6.04 | 37.42 | 25.02 | 3.49 | 15.83 | 25.65 | 9.58 |
test-assign-add.js | 3.71 | 4.02 | 3.83 | 3.87 | 4.20 ▲ | 5.36 | 6.04 | 37.40 | 25.02 | 3.51 | 15.87 | 40.47 | 9.82 |
test-assign-addto-nan.js | 1.16 | 1.43 | 1.22 | 1.17 | 1.20 ▲ | 1.45 | 1.64 | 8.04 | 6.45 | - | - | - | - |
test-assign-addto.js | 3.68 | 4.02 | 3.86 | 3.85 | 4.20 ▲ | 5.36 | 6.04 | 38.39 | 30.42 | 3.50 | 17.13 | 24.90 | 9.64 |
test-assign-boolean.js | 5.12 | 5.13 | 5.12 | 5.11 | 5.16 | 5.20 | 5.22 | 10.36 | 20.73 | - | - | - | - |
test-assign-const-int.js | 2.32 | 2.93 | 2.91 | 2.85 | 3.01 ▲ | 4.18 | 3.08 | 10.56 | 12.80 | 2.56 | 6.03 | 24.98 | 4.87 |
test-assign-const-int2.js | 4.68 | 5.94 | 5.56 | 5.58 | 6.08 ▲ | 8.52 | 10.18 | 10.91 | 12.98 | - | - | - | - |
test-assign-const.js | 4.19 | 4.49 | 3.95 | 3.90 | 5.18 ▲ | 5.77 | 4.50 | 10.88 | 19.16 | 2.55 | 6.06 | 26.31 | 4.95 |
test-assign-literal.js | 3.87 | 4.11 | 3.75 | 3.78 | 4.21 ▲ | 5.44 | 4.76 | 10.95 | 23.22 | 2.74 | 13.56 | - | 4.82 |
test-assign-proplhs-reg.js | 2.79 | 2.70 | 3.00 | 2.87 | 2.90 ⇑ | 3.19 | 3.92 | 2.70 | 5.58 | - | - | - | - |
test-assign-proprhs.js | 1.92 | 1.91 | 3.06 | 3.01 | 3.05 | 3.21 | 4.30 | 2.67 | 3.99 | - | - | - | - |
test-assign-reg.js | 2.65 | 3.04 | 3.28 | 3.18 | 3.42 ▲ | 4.80 | 3.35 | 9.68 | 17.14 | 2.52 | 5.96 | 25.49 | 5.15 |
test-base64-decode-whitespace.js | 2.21 | 2.21 | 1.92 | 1.94 | (2.20) ⇓ | 2.01 | - | - | - | - | 8.63 | - | - |
test-base64-decode.js | 1.73 | 1.73 | 1.73 | 1.72 | (1.73) | 1.66 | - | - | - | - | 8.62 | - | - |
test-base64-encode.js | 2.07 | 2.08 | 1.86 | 1.86 | 1.86 | 1.87 | - | - | - | - | 20.42 | - | - |
test-bitwise-ops.js | 1.66 | 1.82 | 1.73 | 1.71 | 2.04 ▲ | 2.38 | 2.46 | 14.97 | 21.76 | - | - | - | - |
test-break-fast.js | 1.26 | 1.42 | 1.23 | 1.27 | 1.54 ▲ | 1.81 | 1.57 | 1.26 | 1.40 | - | - | - | - |
test-break-slow.js | 7.47 | 8.06 | 7.46 | 7.31 | 8.29 ▲ | 9.37 | 8.93 | 2.82 | 4.57 | - | - | - | - |
test-buffer-nodejs-read.js | 2.25 | 2.34 | 2.42 | 2.40 | 2.50 ▲ | 2.81 | 2.80 | - | - | - | - | - | - |
test-buffer-nodejs-write.js | 3.93 | 3.99 | 3.12 | 3.20 | 3.28 | 3.47 | 3.40 | - | - | - | - | - | - |
test-buffer-object-read.js | 2.26 | 2.34 | 2.47 | 2.43 | 2.53 ⇑ | 2.81 | 2.81 | - | - | - | - | - | - |
test-buffer-object-write.js | 3.93 | 3.98 | 3.13 | 3.20 | 3.28 | 3.50 | 3.40 | - | - | - | - | - | - |
test-buffer-plain-read.js | 1.80 | 1.95 | 2.02 | 2.00 | 2.04 ▲ | 2.37 | 2.34 | - | - | - | - | - | - |
test-buffer-plain-write.js | 1.84 | 1.90 | 1.98 | 1.97 | 2.00 ▲ | 2.29 | 2.14 | - | - | - | - | - | - |
test-call-basic-1.js | 4.55 | 4.99 | 7.12 | 7.77 | 7.69 ▲ | 8.73 | 9.95 | 7.30 | 10.44 | 2.27 | 6.16 | 8.61 | 2.86 |
test-call-basic-2.js | 4.55 | 4.99 | 7.11 | 7.75 | 7.70 ▲ | 8.66 | 10.00 | 5.28 | 9.14 | - | - | - | - |
test-call-basic-3.js | 6.47 | 7.10 | 9.08 | 9.76 | 9.85 ⇑ | 10.94 | 16.15 | 13.68 | 15.58 | - | - | - | - |
test-call-basic-4.js | 14.30 | 15.30 | 17.43 | 18.70 | 19.48 ⇑ | 21.02 | 38.63 | 37.95 | 39.20 | - | - | - | - |
test-call-native.js | 12.38 | 13.32 | 12.21 | 13.14 | 12.95 | 13.88 | 14.60 | 17.36 | 8.52 | - | - | - | - |
test-call-prop.js | 2.58 | 2.80 | 4.13 | 4.43 | 4.43 ⇑ | 4.90 | 6.02 | 3.14 | 4.68 | - | - | - | - |
test-call-reg-new.js | 5.38 | 5.59 | 5.75 | 6.93 | 5.90 ▲ | 6.99 | 7.24 | 3.00 | 3.38 | - | - | - | - |
test-call-reg.js | 1.78 | 2.03 | 2.82 | 3.02 | 2.99 ▲ | 3.37 | 3.84 | 2.48 | 3.84 | - | - | - | - |
test-call-var.js | 3.26 | 3.48 | 6.00 | 8.39 | 6.20 ▲ | 8.64 | 8.58 | 4.79 | 4.32 | - | - | - | - |
test-closure-inner-functions.js | 1.12 | 1.24 | 1.20 | 1.76 | 1.33 ▲ | 1.80 | 2.59 | 0.66 | 0.26 | - | - | - | - |
test-compile-mandel-nofrac.js | 10.30 | 10.59 | 10.37 | 11.58 | 10.40 ⇑ | 11.36 | 14.08 | 6.50 | 2.41 | - | - | - | - |
test-compile-mandel.js | 13.36 | 13.76 | 13.59 | 14.64 | 13.47 | 14.45 | 16.91 | 6.49 | 2.40 | - | - | - | - |
test-compile-short.js | 5.43 | 5.78 | 5.71 | 6.80 | 5.77 ▲ | 7.02 | 9.67 | 2.43 | 0.98 | - | - | - | - |
test-compile-string-ascii.js | 7.01 | 7.46 | 7.15 | 7.22 | 7.06 | 7.12 | 9.93 | 6.99 | - | - | - | - | - |
test-continue-fast.js | 1.70 | 1.92 | 1.81 | 1.81 | 2.06 ⇑ | 2.24 | 2.06 | 2.20 | 2.56 | - | - | - | - |
test-continue-slow.js | 8.11 | 8.39 | 7.96 | 7.99 | 8.82 ▲ | 9.92 | 9.30 | 3.65 | 6.56 | - | - | - | - |
test-empty-loop-slowpath.js | 0.86 | 0.88 | 0.98 | 1.71 | 1.10 ▲ | 1.77 | 2.38 | 1.09 | 0.71 | - | - | - | - |
test-empty-loop.js | 1.38 | 1.52 | 1.98 | 1.98 | 1.84 ▲ | 2.40 | 2.34 | 6.38 | 3.60 | 1.14 | 5.13 | 3.64 | 4.32 |
test-enum-basic.js | 3.12 | 3.23 | 3.35 | 4.24 | 3.35 ▲ | 4.33 | 4.92 | 0.71 | 1.17 | - | - | - | - |
test-equals-fastint.js | 0.58 | 0.59 | 0.58 | 0.59 | 0.62 ▲ | 0.72 | 1.23 | 2.59 | 3.36 | - | - | - | - |
test-equals-nonfastint.js | 0.66 | 0.69 | 0.62 | 0.63 | 0.66 ▲ | 0.76 | 1.33 | 2.58 | 4.72 | - | - | - | - |
test-error-create.js | 1.20 | 1.23 | 1.65 | 2.35 | 1.71 ▲ | 2.30 | 3.64 | 5.12 | 0.82 | - | - | - | - |
test-fib.js | 2.86 | 3.06 | 6.01 | 7.08 | 6.34 ▲ | 7.57 | 8.34 | 3.60 | 5.71 | 1.43 | 2.91 | 7.38 | 1.27 |
test-global-lookup.js | 4.86 | 4.70 | 6.38 | 8.82 | 6.79 ▲ | 8.96 | 11.60 | 4.51 | 2.74 | - | - | - | - |
test-hello-world.js | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.02 |
test-hex-decode.js | 4.00 | 4.00 | 4.01 | 4.01 | 4.00 | 3.98 | 4.04 | - | - | - | 13.45 | - | - |
test-hex-encode.js | 3.24 | 3.28 | 3.20 | 3.12 | 3.08 | 3.29 | - | - | - | - | 1.68 | - | - |
test-jc-serialize-indented.js | 7.74 | 7.67 | 3.82 | 3.66 | (3.82) | 3.69 | 3.98 | - | - | - | - | - | - |
test-jc-serialize.js | 2.57 | 2.55 | 2.31 | 2.46 | 2.39 | 2.48 | 2.78 | - | - | - | - | - | - |
test-json-parse-hex.js | 4.50 | 4.46 | 4.06 | 3.59 | 3.60 | 3.60 | - | - | - | - | - | - | - |
test-json-parse-integer.js | 3.20 | 3.18 | 2.89 | 4.26 | 2.87 ▲ | 4.06 | 4.19 | 23.34 | - | - | 0.08 | - | - |
test-json-parse-number.js | 5.70 | 5.57 | 5.23 | 5.31 | 5.22 | 5.26 | 5.35 | 2.68 | - | - | 0.40 | - | - |
test-json-parse-string.js | 5.16 | 5.14 | 5.25 | 5.40 | 5.17 ⇑ | 5.68 | 5.43 | 48.75 | - | - | - | - | - |
test-json-serialize-fastpath-loop.js | 6.92 | 6.90 | 3.54 | 3.97 | 3.62 ⇑ | 3.99 | 4.03 | 13.40 | 582.05 | - | - | - | - |
test-json-serialize-forceslow.js | 10.93 | 11.07 | 9.68 | 10.08 | 9.78 | 9.98 | 11.98 | 2.39 | 9.10 | - | - | - | - |
test-json-serialize-hex.js | 1.59 | 1.56 | 1.52 | 1.51 | 1.51 | 1.52 | - | - | - | - | - | - | - |
test-json-serialize-indented-deep100.js | 1.76 | 1.79 | 1.43 | 1.94 | 1.43 ▲ | 1.93 | 2.72 | 1.62 | 147.40 | - | - | - | - |
test-json-serialize-indented-deep25.js | 7.76 | 7.72 | 3.52 | 3.45 | 3.60 | 3.56 | 3.76 | 11.21 | 265.65 | - | - | - | - |
test-json-serialize-indented-deep500.js | 1.07 | 1.08 | 0.94 | 1.28 | 0.93 ▲ | 1.27 | 1.61 | - | - | - | - | - | - |
test-json-serialize-indented.js | 13.56 | 13.34 | 6.19 | 6.52 | 6.12 ⇑ | 6.67 | 7.16 | 16.42 | 108.06 | - | - | - | - |
test-json-serialize-jsonrpc-message.js | 2.08 | 2.11 | 3.13 | 3.33 | 3.27 | 3.32 | 3.32 | - | - | - | - | - | - |
test-json-serialize-nofrac.js | 0.67 | 0.68 | 0.66 | 0.66 | 0.66 ▲ | 0.75 | 0.79 | 1.72 | 7.26 | - | - | - | - |
test-json-serialize-plainbuf.js | 2.50 | 2.48 | 2.52 | 31.13 | 2.48 ▲ | 30.95 | 0.07 | - | - | - | - | - | - |
test-json-serialize-slowpath-loop.js | 4.13 | 4.30 | 3.72 | 4.57 | 3.72 ▲ | 4.65 | 6.60 | - | 6.34 | - | - | - | - |
test-json-serialize.js | 7.90 | 7.88 | 6.41 | 6.54 | 6.48 | 6.49 | 6.62 | 2.38 | 9.04 | - | 0.65 | - | - |
test-json-string-bench.js | 2.46 | 2.52 | 3.14 | 3.66 | 3.18 ▲ | 3.85 | 5.59 | 53.90 | - | - | - | - | - |
test-json-string-stringify.js | 5.34 | 5.37 | 9.32 | 10.34 | 10.16 | 10.36 | 10.44 | 11.77 | - | - | 0.53 | - | - |
test-jx-serialize-bufobj-forceslow.js | 4.10 | 4.22 | 4.38 | 5.16 | 4.47 ▲ | 5.05 | 6.17 | - | - | - | - | - | - |
test-jx-serialize-bufobj.js | 1.68 | 1.78 | 1.66 | 1.66 | 1.71 | 1.73 | 1.79 | - | - | - | - | - | - |
test-jx-serialize-indented.js | 7.45 | 7.50 | 3.40 | 3.48 | 3.45 | 3.51 | 3.80 | - | - | - | - | - | - |
test-jx-serialize.js | 2.50 | 2.52 | 2.17 | 2.30 | 2.24 | 2.36 | 2.62 | - | - | - | - | - | - |
test-mandel.js | 2.38 | 2.68 | 2.93 | 2.93 | 3.15 ▲ | 3.73 | 4.37 | 15.26 | 14.52 | 1.96 | - | - | - |
test-object-garbage-2.js | 3.52 | 3.64 | 3.58 | 5.31 | 3.62 ▲ | 5.43 | 5.38 | 54.81 | 3.29 | - | - | - | - |
test-object-garbage.js | 3.11 | 3.36 | 3.36 | 4.86 | 3.31 ▲ | 5.05 | 5.49 | 2.70 | 2.77 | 4.15 | 0.85 | - | - |
test-object-literal.js | 2.44 | 2.40 | 2.48 | 3.08 | 2.53 ▲ | 3.21 | 2.88 | 4.43 | 2.29 | - | - | - | - |
test-prop-read-1024.js | 2.43 | 2.49 | 3.49 | 3.76 | 3.64 ▲ | 4.20 | 5.26 | 6.74 | 4.46 | - | - | - | - |
test-prop-read-16.js | 2.46 | 2.46 | 3.50 | 3.88 | 3.69 ⇑ | 4.07 | 5.61 | 4.55 | 4.44 | - | - | - | - |
test-prop-read-256.js | 2.43 | 2.48 | 3.51 | 3.80 | 3.62 ⇑ | 4.02 | 5.21 | 8.29 | 4.42 | - | - | - | - |
test-prop-read-32.js | 2.41 | 2.45 | 3.50 | 4.54 | 3.65 ⇑ | 4.00 | 5.19 | 5.58 | 4.43 | - | - | - | - |
test-prop-read-4.js | 2.36 | 2.33 | 3.50 | 3.33 | 3.54 | 3.61 | 4.79 | 3.99 | 4.41 | - | - | - | - |
test-prop-read-48.js | 2.41 | 2.45 | 3.50 | 5.52 | 3.64 ▲ | 7.31 | 5.86 | 6.52 | 4.42 | - | - | - | - |
test-prop-read-64.js | 2.42 | 2.48 | 3.51 | 3.82 | 3.62 ▲ | 4.05 | 5.24 | 6.56 | 4.43 | - | - | - | - |
test-prop-read-8.js | 2.42 | 2.47 | 3.49 | 3.72 | 3.75 | 3.76 | 5.01 | 5.00 | 4.46 | - | - | - | - |
test-prop-read.js | 2.48 | 2.41 | 3.55 | 3.38 | 3.83 | 3.76 | 4.98 | 4.03 | 4.54 | 1.14 | 2.62 | 4.77 | 3.97 |
test-prop-write-1024.js | 3.13 | 3.15 | 3.36 | 4.46 | 3.32 ▲ | 4.09 | 4.97 | 10.37 | 5.29 | - | - | - | - |
test-prop-write-16.js | 3.12 | 3.13 | 3.35 | 3.80 | 3.30 ▲ | 4.15 | 5.02 | 4.42 | 5.30 | - | - | - | - |
test-prop-write-256.js | 3.11 | 3.14 | 3.40 | 3.99 | 3.38 ▲ | 4.10 | 5.02 | 8.24 | 5.30 | - | - | - | - |
test-prop-write-32.js | 3.18 | 3.14 | 3.35 | 3.80 | 3.30 ▲ | 4.07 | 5.03 | 5.59 | 5.32 | - | - | - | - |
test-prop-write-4.js | 3.24 | 3.20 | 3.29 | 3.29 | 3.53 | 3.66 | 4.40 | 3.95 | 5.28 | - | - | - | - |
test-prop-write-48.js | 3.12 | 3.13 | 3.34 | 3.87 | 3.33 ▲ | 4.01 | 8.10 | 6.50 | 5.26 | - | - | - | - |
test-prop-write-64.js | 3.08 | 3.14 | 3.38 | 3.83 | 3.31 ▲ | 4.03 | 5.07 | 6.51 | 5.31 | - | - | - | - |
test-prop-write-8.js | 3.12 | 3.18 | 3.32 | 3.40 | 3.30 ▲ | 3.82 | 4.60 | 4.90 | 5.27 | - | - | - | - |
test-prop-write.js | 3.26 | 3.22 | 3.32 | 3.32 | 3.65 | 3.74 | 4.42 | 3.95 | 5.29 | 1.41 | 2.72 | 4.96 | 5.24 |
test-random.js | 1.45 | 1.64 | 2.10 | 2.36 | 2.26 ▲ | 2.56 | 6.86 | 1.12 | 2.00 | - | - | - | - |
test-reg-readwrite-object.js | 3.28 | 3.40 | 3.36 | 3.34 | 3.73 ▲ | 4.27 | 3.86 | 8.57 | 15.01 | 1.92 | - | 33.29 | 4.23 |
test-reg-readwrite-plain.js | 1.92 | 2.24 | 2.37 | 2.36 | 2.51 ▲ | 3.59 | 2.48 | 8.44 | 12.16 | 1.91 | 5.50 | 35.91 | 4.28 |
test-regexp-case-insensitive.js | 0.00 | 38.23 | 0.00 | 0.00 | 28.48 | 27.76 | 25.69 | 0.00 | 0.00 | - | - | - | - |
test-regexp-compile.js | 2.10 | 2.23 | 2.02 | 2.33 | 2.08 ⇑ | 2.28 | 2.90 | 1.62 | 0.46 | - | - | - | - |
test-regexp-execute.js | 1.42 | 1.45 | 1.48 | 1.74 | 1.49 ▲ | 1.72 | 2.18 | 1.84 | 1.25 | - | - | - | - |
test-regexp-string-parse.js | 11.59 | 11.47 | 6.56 | 6.46 | 6.41 | 6.42 | 10.70 | - | - | - | 0.59 | - | - |
test-strict-equals-fastint.js | 0.59 | 0.63 | 0.58 | 0.58 | 0.63 ▲ | 0.71 | 1.23 | 2.66 | 3.46 | - | - | - | - |
test-strict-equals-nonfastint.js | 0.69 | 0.69 | 0.64 | 0.62 | 0.66 ▲ | 0.76 | 1.33 | 2.65 | 4.50 | - | - | - | - |
test-string-array-concat.js | 5.05 | 5.31 | 5.57 | 6.01 | 5.31 ▲ | 6.25 | 6.63 | 270.24 | - | 2.22 | 3.54 | 8.01 | 6.48 |
test-string-arridx.js | 1.70 | 1.74 | 1.70 | 1.78 | 1.69 ⇑ | 1.82 | 1.96 | 1.02 | 1.65 | - | - | - | - |
test-string-charlen-ascii.js | 1.18 | 1.14 | 1.16 | 1.20 | 1.17 | 1.20 | 1.45 | 5.14 | 0.80 | - | - | - | - |
test-string-charlen-nonascii.js | 2.78 | 2.78 | 2.82 | 2.78 | (3.07) | 2.87 | 2.90 | 7.73 | 0.54 | - | - | - | - |
test-string-compare.js | 2.11 | 2.13 | 2.11 | 2.12 | 2.40 | 2.56 | 3.86 | 790.20 | - | 3.49 | 5.95 | 18.94 | 5.09 |
test-string-decodeuri.js | 4.72 | 4.74 | 4.37 | 4.28 | 4.51 | 4.40 | 4.13 | 2.26 | - | - | - | - | - |
test-string-encodeuri.js | 5.31 | 5.22 | 4.78 | 4.75 | 4.68 | 4.85 | 4.47 | 3.97 | - | - | - | - | - |
test-string-garbage.js | 4.17 | 4.32 | 4.12 | 5.31 | 4.04 ▲ | 5.56 | 5.36 | 1.90 | 2.08 | 1.77 | 1.82 | - | - |
test-string-intern-grow-short.js | 3.51 | 3.57 | 3.64 | 12.44 | 3.78 ▲ | 13.04 | 12.72 | - | - | - | - | - | - |
test-string-intern-grow-short2.js | 3.44 | 3.54 | 3.54 | 4.96 | 3.73 ▲ | 5.06 | 5.31 | - | - | - | - | - | - |
test-string-intern-grow.js | 4.22 | 4.12 | 4.13 | 21.34 | 4.09 ▲ | 21.42 | 21.73 | - | - | - | - | - | - |
test-string-intern-grow2.js | 0.62 | 0.62 | 0.65 | 1.84 | 0.64 ▲ | 1.84 | 1.88 | - | - | - | - | - | - |
test-string-intern-match-short.js | 1.62 | 1.66 | 1.69 | 2.76 | 1.81 ▲ | 2.74 | 2.68 | - | - | - | - | - | - |
test-string-intern-match.js | 0.19 | 0.20 | 0.20 | 0.23 | 0.22 ▲ | 0.26 | 0.26 | - | - | - | - | - | - |
test-string-intern-miss-short.js | 1.96 | 1.99 | 2.00 | 3.30 | 2.16 ▲ | 3.40 | 3.57 | - | - | - | - | - | - |
test-string-intern-miss.js | 0.31 | 0.32 | 0.32 | 1.18 | 0.34 ▲ | 1.22 | 1.24 | - | - | - | - | - | - |
test-string-number-list.js | 0.53 | 0.54 | 0.66 | 1.27 | 0.66 ▲ | 1.25 | 1.74 | 7.78 | - | - | - | - | - |
test-string-plain-concat.js | 0.44 | 0.47 | 0.44 | 0.92 | 0.46 ▲ | 0.90 | 1.07 | 1.04 | 0.54 | 0.60 | 0.00 | 0.44 | 0.48 |
test-string-scan-nonascii.js | 4.54 | 4.34 | 4.19 | 3.94 | (4.25) ⇓ | 3.96 | 4.38 | 50.74 | 15.79 | - | - | - | - |
test-string-uppercase.js | 3.20 | 3.56 | 2.78 | 2.84 | 2.82 | 2.83 | 2.86 | 4.86 | - | - | 1.34 | - | - |
test-textdecoder-ascii.js | 2.38 | 2.64 | 2.62 | 2.72 | (2.65) ⇓ | 2.42 | - | - | - | - | - | - | - |
test-textdecoder-nonascii.js | 3.25 | 3.30 | 2.78 | 3.31 | 2.78 ▲ | 3.41 | - | - | - | - | - | - | - |
test-textencoder-ascii.js | 6.04 | 6.02 | 5.73 | 5.73 | 5.48 | 5.47 | - | - | - | - | - | - | - |
test-textencoder-nonascii.js | 14.34 | 13.89 | 10.52 | 10.49 | 11.26 | 11.92 | - | - | - | - | - | - | - |
test-try-catch-nothrow.js | 2.98 | 3.22 | 3.12 | 2.74 | 3.32 | 3.38 | 2.97 | 2.42 | 3.58 | - | - | - | - |
test-try-catch-throw.js | 28.60 | 30.58 | 29.23 | 41.56 | 30.96 ▲ | 43.04 | 45.43 | 23.70 | 16.34 | - | - | - | - |
test-try-finally-nothrow.js | 3.74 | 4.05 | 3.48 | 3.16 | 4.02 | 4.08 | 3.88 | 2.29 | 4.06 | - | - | - | - |
test-try-finally-throw.js | 44.27 | 46.10 | 43.85 | 52.37 | 46.12 ▲ | 53.72 | 55.95 | 26.29 | 19.72 | - | - | - | - |
Setup
Measurement host:
- "Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz" laptop
Duktape is compiled with:
- gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
gcc -O2
- duk.O2: defaults + debugger and executor interrupt enabled, fastints enabled
- duk-perf.O2: performance-sensitive.yaml as baseline, no debugger or executor interrupt support, fastints enabled
- Profile guided optimization (PGO) uses a dummy training set, https://github.com/svaarala/duktape/blob/d73b35e788660a9a7424f8bbafe8f220d8e99970/Makefile#L92-L97
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.