Duktape 2.0.0 performance measurement
Performance summary
duk-perf.O2.200 | duk.O2.200 | duk.O2.150 | mujs | jerry | lua | python | perl | ruby | |
---|---|---|---|---|---|---|---|---|---|
test-add-fastint.js | 0.55 | 0.65 | 0.88 | 4.04 | 2.55 | n/a | n/a | n/a | n/a |
test-add-float.js | 0.56 | 0.71 | 0.85 | 4.04 | 3.87 | n/a | n/a | n/a | n/a |
test-add-nan-fastint.js | 0.63 | 0.77 | 0.99 | 4.04 | 3.14 | n/a | n/a | n/a | n/a |
test-add-nan.js | 0.55 | 0.64 | 0.82 | 4.03 | 3.86 | n/a | n/a | n/a | n/a |
test-arith-add.js | 2.24 | 2.58 | 3.30 | 15.93 | 15.35 | n/a | n/a | n/a | n/a |
test-arith-div.js | 6.95 | 7.28 | 8.23 | 11.17 | 19.73 | n/a | n/a | n/a | n/a |
test-arith-mod.js | 6.32 | 6.66 | 7.84 | 13.40 | 23.35 | n/a | n/a | n/a | n/a |
test-arith-mul.js | 3.35 | 3.66 | 4.37 | 10.98 | 15.89 | n/a | n/a | n/a | n/a |
test-arith-sub.js | 2.33 | 2.74 | 3.56 | 11.09 | 15.83 | n/a | n/a | n/a | n/a |
test-array-append.js | 0.53 | 0.53 | 0.72 | 43.56 | n/a | n/a | n/a | n/a | n/a |
test-array-cons-list.js | 0.81 | 0.92 | 2.33 | 8.18 | 2.10 | n/a | n/a | n/a | n/a |
test-array-foreach.js | 2.52 | 2.70 | 2.73 | 2.82 | 1.53 | n/a | n/a | n/a | n/a |
test-array-literal.js | 1.49 | 1.58 | 1.80 | 54.91 | 0.84 | n/a | n/a | n/a | n/a |
test-array-pop.js | 2.13 | 2.21 | 7.35 | 46.67 | 6.71 | 1.10 | 0.88 | n/a | n/a |
test-array-push.js | 2.40 | 2.54 | 4.93 | 7.85 | 3.63 | 0.99 | 0.52 | n/a | n/a |
test-array-read-lenloop.js | 1.75 | 1.88 | 2.68 | 113.66 | 3.94 | n/a | n/a | n/a | n/a |
test-array-read.js | 1.66 | 1.73 | 2.10 | 216.37 | 4.98 | 0.94 | 1.73 | 3.23 | 1.44 |
test-array-sort.js | 3.57 | 3.49 | 3.46 | n/a | 3.73 | n/a | n/a | n/a | n/a |
test-array-write-length.js | 1.49 | 1.70 | 2.83 | 3.37 | 2.52 | n/a | n/a | n/a | n/a |
test-array-write.js | 1.66 | 1.78 | 2.64 | 233.38 | 5.71 | 1.13 | 2.48 | 3.22 | 4.02 |
test-assign-add.js | 3.32 | 3.74 | 5.21 | 34.13 | 22.74 | 3.19 | 13.84 | 24.98 | 10.17 |
test-assign-addto-nan.js | 1.01 | 1.25 | 1.59 | 7.38 | 5.56 | n/a | n/a | n/a | n/a |
test-assign-addto.js | 3.34 | 3.67 | 5.29 | 34.43 | 27.36 | 3.25 | 16.20 | 24.07 | 10.21 |
test-assign-boolean.js | 4.69 | 4.68 | 4.84 | 9.44 | 19.35 | n/a | n/a | n/a | n/a |
test-assign-const-int.js | 1.93 | 2.53 | 2.57 | 9.65 | 11.07 | 2.10 | 5.53 | 22.37 | 4.02 |
test-assign-const-int2.js | 3.92 | 5.77 | 9.00 | 9.61 | 11.08 | n/a | n/a | n/a | n/a |
test-assign-const.js | 3.29 | 4.28 | 4.28 | 9.86 | 15.58 | 2.14 | 5.46 | 22.73 | 4.06 |
test-assign-literal.js | 3.33 | 3.75 | 4.21 | 9.97 | 21.68 | 2.60 | 12.04 | n/a | 4.46 |
test-assign-proplhs-reg.js | 2.47 | 2.67 | 3.74 | 2.41 | 4.91 | n/a | n/a | n/a | n/a |
test-assign-proprhs.js | 2.63 | 2.92 | 4.25 | 2.51 | 3.54 | n/a | n/a | n/a | n/a |
test-assign-reg.js | 2.46 | 2.84 | 2.79 | 8.90 | 14.84 | 2.26 | 5.75 | 23.32 | 4.08 |
test-base64-decode-whitespace.js | 1.89 | 1.88 | n/a | n/a | n/a | n/a | 8.73 | n/a | n/a |
test-base64-decode.js | 1.53 | 1.53 | n/a | n/a | n/a | n/a | 8.69 | n/a | n/a |
test-base64-encode.js | 1.68 | 1.68 | n/a | n/a | n/a | n/a | 17.08 | n/a | n/a |
test-bitwise-ops.js | 1.53 | 1.89 | 2.61 | 14.40 | 21.07 | n/a | n/a | n/a | n/a |
test-break-fast.js | 1.30 | 1.52 | 1.61 | 1.22 | 1.14 | n/a | n/a | n/a | n/a |
test-break-slow.js | 6.76 | 7.43 | 8.00 | 2.55 | 4.15 | n/a | n/a | n/a | n/a |
test-buffer-nodejs-read.js | 2.10 | 2.31 | 2.64 | n/a | n/a | n/a | n/a | n/a | n/a |
test-buffer-nodejs-write.js | 2.79 | 3.03 | 3.14 | n/a | n/a | n/a | n/a | n/a | n/a |
test-buffer-object-read.js | 2.09 | 2.30 | 2.60 | n/a | n/a | n/a | n/a | n/a | n/a |
test-buffer-object-write.js | 2.79 | 3.05 | 3.15 | n/a | n/a | n/a | n/a | n/a | n/a |
test-buffer-plain-read.js | 1.73 | 1.89 | 2.25 | n/a | n/a | n/a | n/a | n/a | n/a |
test-buffer-plain-write.js | 1.72 | 1.79 | 1.82 | n/a | n/a | n/a | n/a | n/a | n/a |
test-call-basic-1.js | 7.29 | 7.72 | 9.25 | 6.53 | 9.09 | 2.23 | 5.29 | 7.87 | 3.40 |
test-call-basic-2.js | 7.41 | 7.73 | 9.21 | 4.90 | 8.18 | n/a | n/a | n/a | n/a |
test-call-basic-3.js | 9.09 | 9.77 | 15.00 | 12.43 | 14.31 | n/a | n/a | n/a | n/a |
test-call-basic-4.js | 16.02 | 17.89 | 37.31 | 34.48 | 35.17 | n/a | n/a | n/a | n/a |
test-call-native.js | 12.44 | 13.39 | 13.92 | 17.19 | 7.69 | n/a | n/a | n/a | n/a |
test-call-prop.js | 3.99 | 4.22 | 5.78 | 2.87 | 4.13 | n/a | n/a | n/a | n/a |
test-call-reg-new.js | 6.28 | 6.40 | 6.70 | 2.73 | 3.22 | n/a | n/a | n/a | n/a |
test-call-reg.js | 2.83 | 3.00 | 3.60 | 2.28 | 3.36 | n/a | n/a | n/a | n/a |
test-call-var.js | 7.77 | 8.26 | 8.05 | 4.36 | 3.79 | n/a | n/a | n/a | n/a |
test-compile-mandel-nofrac.js | 10.90 | 10.69 | 13.29 | 5.90 | 2.22 | n/a | n/a | n/a | n/a |
test-compile-mandel.js | 13.96 | 13.72 | 16.50 | 5.84 | 2.24 | n/a | n/a | n/a | n/a |
test-compile-short.js | 6.38 | 6.80 | 9.88 | 2.11 | 0.86 | n/a | n/a | n/a | n/a |
test-compile-string-ascii.js | 6.66 | 6.70 | 9.17 | 6.32 | n/a | n/a | n/a | n/a | n/a |
test-continue-fast.js | 1.68 | 1.84 | 2.23 | 1.96 | 2.20 | n/a | n/a | n/a | n/a |
test-continue-slow.js | 7.49 | 7.88 | 8.35 | 3.32 | 5.91 | n/a | n/a | n/a | n/a |
test-empty-loop-slowpath.js | 1.49 | 1.68 | 2.01 | 0.99 | 0.68 | n/a | n/a | n/a | n/a |
test-empty-loop.js | 1.62 | 1.65 | 2.27 | 5.87 | 3.16 | 1.00 | 4.54 | 3.44 | 3.34 |
test-enum-basic.js | 3.98 | 3.99 | 4.53 | 0.68 | 1.06 | n/a | n/a | n/a | n/a |
test-equals-fastint.js | 0.51 | 0.61 | 1.17 | 2.37 | 2.87 | n/a | n/a | n/a | n/a |
test-equals-nonfastint.js | 0.51 | 0.62 | 1.23 | 2.35 | 3.93 | n/a | n/a | n/a | n/a |
test-error-create.js | 2.13 | 2.12 | 3.31 | 4.76 | 0.80 | n/a | n/a | n/a | n/a |
test-fib.js | 6.32 | 6.96 | 7.78 | 3.30 | 4.98 | 1.40 | 2.45 | 6.45 | 1.54 |
test-global-lookup.js | 7.80 | 7.87 | 10.26 | 4.15 | 2.20 | n/a | n/a | n/a | n/a |
test-hello-world.js | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
test-hex-decode.js | 3.59 | 3.65 | 3.68 | n/a | n/a | n/a | 12.71 | n/a | n/a |
test-hex-encode.js | 2.81 | 2.82 | n/a | n/a | n/a | n/a | 1.42 | n/a | n/a |
test-jc-serialize-indented.js | 3.33 | 3.40 | 3.56 | n/a | n/a | n/a | n/a | n/a | n/a |
test-jc-serialize.js | 2.09 | 2.22 | 2.46 | n/a | n/a | n/a | n/a | n/a | n/a |
test-json-parse-hex.js | 3.16 | 3.23 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
test-json-parse-integer.js | 3.93 | 3.82 | 4.08 | 21.09 | n/a | n/a | 0.07 | n/a | n/a |
test-json-parse-number.js | 5.23 | 5.15 | 5.23 | 2.41 | n/a | n/a | 0.29 | n/a | n/a |
test-json-parse-string.js | 5.57 | 5.82 | 5.80 | 45.21 | n/a | n/a | n/a | n/a | n/a |
test-json-serialize-fastpath-loop.js | 3.66 | 3.61 | 3.61 | 12.61 | 532.24 | n/a | n/a | n/a | n/a |
test-json-serialize-forceslow.js | 9.70 | 9.08 | 11.19 | 2.19 | 8.86 | n/a | n/a | n/a | n/a |
test-json-serialize-hex.js | 1.44 | 1.49 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
test-json-serialize-indented-deep100.js | 1.77 | 1.77 | 2.45 | 1.52 | 135.92 | n/a | n/a | n/a | n/a |
test-json-serialize-indented-deep25.js | 3.11 | 3.25 | 3.31 | 10.34 | 240.02 | n/a | n/a | n/a | n/a |
test-json-serialize-indented-deep500.js | 1.24 | 1.17 | 1.57 | n/a | n/a | n/a | n/a | n/a | n/a |
test-json-serialize-indented.js | 5.80 | 5.91 | 6.34 | 14.83 | 106.53 | n/a | n/a | n/a | n/a |
test-json-serialize-jsonrpc-message.js | 1.98 | 1.97 | 1.99 | n/a | n/a | n/a | n/a | n/a | n/a |
test-json-serialize-nofrac.js | 0.59 | 0.61 | 0.67 | 1.56 | 7.26 | n/a | n/a | n/a | n/a |
test-json-serialize-slowpath-loop.js | 4.27 | 4.28 | 6.04 | n/a | 6.08 | n/a | n/a | n/a | n/a |
test-json-serialize.js | 6.25 | 5.87 | 6.18 | 2.20 | 8.78 | n/a | 0.51 | n/a | n/a |
test-json-string-bench.js | 3.41 | 3.49 | 5.29 | 49.96 | n/a | n/a | n/a | n/a | n/a |
test-json-string-stringify.js | 5.12 | 5.17 | 5.19 | 10.73 | n/a | n/a | 0.48 | n/a | n/a |
test-jx-serialize-bufobj-forceslow.js | 4.66 | 4.83 | 5.61 | n/a | n/a | n/a | n/a | n/a | n/a |
test-jx-serialize-bufobj.js | 1.50 | 1.57 | 1.65 | n/a | n/a | n/a | n/a | n/a | n/a |
test-jx-serialize-indented.js | 3.20 | 3.40 | 3.50 | n/a | n/a | n/a | n/a | n/a | n/a |
test-jx-serialize.js | 2.15 | 2.23 | 2.44 | n/a | n/a | n/a | n/a | n/a | n/a |
test-mandel.js | 2.48 | 2.98 | 4.36 | 13.94 | 13.15 | 1.60 | n/a | n/a | n/a |
test-object-garbage-2.js | 4.71 | 4.91 | 4.87 | 49.95 | 2.59 | n/a | n/a | n/a | n/a |
test-object-garbage.js | 4.47 | 4.51 | 4.37 | 2.37 | 2.76 | 3.44 | 0.66 | n/a | n/a |
test-object-literal.js | 2.80 | 2.88 | 2.54 | 3.89 | 2.28 | n/a | n/a | n/a | n/a |
test-prop-read-4.js | 3.14 | 3.52 | 4.75 | 3.65 | 3.95 | n/a | n/a | n/a | n/a |
test-prop-read-8.js | 3.27 | 3.83 | 4.96 | 4.52 | 3.93 | n/a | n/a | n/a | n/a |
test-prop-read.js | 3.15 | 3.64 | 4.80 | 3.81 | 3.94 | 1.08 | 2.37 | 4.89 | 11.20 |
test-prop-write-1024.js | 3.73 | 3.33 | 5.12 | 9.93 | 4.48 | n/a | n/a | n/a | n/a |
test-prop-write-16.js | 3.18 | 3.78 | 4.58 | 4.48 | 4.49 | n/a | n/a | n/a | n/a |
test-prop-write-256.js | 3.35 | 3.92 | 4.96 | 8.36 | 4.68 | n/a | n/a | n/a | n/a |
test-prop-write-32.js | 3.82 | 3.44 | 6.82 | 5.55 | 4.66 | n/a | n/a | n/a | n/a |
test-prop-write-4.js | 2.87 | 3.13 | 4.37 | 3.75 | 4.68 | n/a | n/a | n/a | n/a |
test-prop-write-48.js | 5.56 | 4.62 | 5.40 | 6.62 | 4.61 | n/a | n/a | n/a | n/a |
test-prop-write-64.js | 4.41 | 4.15 | 4.97 | 6.75 | 4.75 | n/a | n/a | n/a | n/a |
test-prop-write-8.js | 3.09 | 3.53 | 4.50 | 4.66 | 4.65 | n/a | n/a | n/a | n/a |
test-prop-write.js | 2.92 | 3.23 | 4.39 | 3.89 | 4.65 | 1.22 | 2.56 | 5.12 | 15.57 |
test-random.js | 2.20 | 2.30 | 6.49 | 1.06 | 1.93 | n/a | n/a | n/a | n/a |
test-reg-readwrite-object.js | 3.00 | 3.09 | 3.21 | 7.80 | 13.44 | 1.77 | n/a | 29.13 | 3.97 |
test-reg-readwrite-plain.js | 1.78 | 2.03 | 2.05 | 7.73 | 10.82 | 1.73 | 4.83 | 30.80 | 4.00 |
test-regexp-case-insensitive.js | 0.00 | 24.82 | 24.51 | 0.00 | 0.00 | n/a | n/a | n/a | n/a |
test-regexp-compile.js | 2.14 | 2.17 | 2.69 | 1.50 | 0.43 | n/a | n/a | n/a | n/a |
test-regexp-execute.js | 1.54 | 1.49 | 1.89 | 1.57 | 1.08 | n/a | n/a | n/a | n/a |
test-regexp-string-parse.js | 5.94 | 5.99 | 9.70 | n/a | n/a | n/a | 0.51 | n/a | n/a |
test-strict-equals-fastint.js | 0.49 | 0.58 | 1.17 | 2.45 | 3.04 | n/a | n/a | n/a | n/a |
test-strict-equals-nonfastint.js | 0.57 | 0.63 | 1.24 | 2.43 | 3.84 | n/a | n/a | n/a | n/a |
test-string-array-concat.js | 5.43 | 5.52 | 6.67 | 256.24 | n/a | 2.11 | 2.84 | 7.56 | 7.90 |
test-string-charlen-ascii.js | 1.12 | 1.07 | 1.34 | 4.72 | 0.75 | n/a | n/a | n/a | n/a |
test-string-charlen-nonascii.js | 2.65 | 2.67 | 2.82 | 7.11 | 0.50 | n/a | n/a | n/a | n/a |
test-string-compare.js | 1.85 | 2.13 | 3.84 | 769.37 | n/a | 2.82 | 4.93 | 16.59 | 5.43 |
test-string-decodeuri.js | 3.61 | 3.60 | 3.72 | 2.13 | n/a | n/a | n/a | n/a | n/a |
test-string-encodeuri.js | 4.06 | 4.05 | 4.04 | 3.61 | n/a | n/a | n/a | n/a | n/a |
test-string-garbage.js | 5.15 | 4.94 | 5.38 | 1.72 | 1.81 | 1.54 | 1.49 | n/a | n/a |
test-string-intern-grow-short.js | 11.74 | 11.57 | 11.91 | n/a | n/a | n/a | n/a | n/a | n/a |
test-string-intern-grow-short2.js | 4.61 | 4.59 | 5.00 | n/a | n/a | n/a | n/a | n/a | n/a |
test-string-intern-grow.js | 20.53 | 20.26 | 19.92 | n/a | n/a | n/a | n/a | n/a | n/a |
test-string-intern-grow2.js | 1.79 | 1.79 | 1.79 | n/a | n/a | n/a | n/a | n/a | n/a |
test-string-intern-match-short.js | 2.59 | 2.64 | 2.50 | n/a | n/a | n/a | n/a | n/a | n/a |
test-string-intern-match.js | 0.22 | 0.23 | 0.26 | n/a | n/a | n/a | n/a | n/a | n/a |
test-string-intern-miss-short.js | 2.97 | 3.09 | 3.28 | n/a | n/a | n/a | n/a | n/a | n/a |
test-string-intern-miss.js | 1.14 | 1.20 | 1.19 | n/a | n/a | n/a | n/a | n/a | n/a |
test-string-plain-concat.js | 0.89 | 0.86 | 1.09 | 1.03 | 0.52 | 0.63 | 0.00 | 0.40 | 0.77 |
test-string-uppercase.js | 2.32 | 2.21 | 2.23 | 4.48 | n/a | n/a | 1.27 | n/a | n/a |
test-textdecoder-ascii.js | 2.84 | 2.79 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
test-textdecoder-nonascii.js | 2.79 | 2.77 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
test-textencoder-ascii.js | 3.98 | 4.19 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
test-textencoder-nonascii.js | 11.27 | 11.21 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
test-try-catch-nothrow.js | 2.65 | 2.59 | 2.93 | 2.21 | 3.18 | n/a | n/a | n/a | n/a |
test-try-catch-throw.js | 37.57 | 38.32 | 38.83 | 20.59 | 14.89 | n/a | n/a | n/a | n/a |
test-try-finally-nothrow.js | 2.97 | 3.39 | 3.71 | 2.06 | 3.63 | n/a | n/a | n/a | n/a |
test-try-finally-throw.js | 47.16 | 48.88 | 48.66 | 22.93 | 17.85 | n/a | n/a | n/a | n/a |
Setup
Measurement host:
- "Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz" laptop
Duktape is compiled with:
- gcc-4.8.4 (Ubuntu 14.04.3) on x64
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
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.