Skip to content

Latest commit

 

History

History
651 lines (630 loc) · 199 KB

Performance210.md

File metadata and controls

651 lines (630 loc) · 199 KB

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.210mujsjerry
test-add-fastint.js0.73(4.38)(2.95)
test-add-float.js0.70(4.38)(4.16)
test-add-nan-fastint.js0.76(4.38)(3.50)
test-add-nan.js0.70(4.40)(4.17)
test-arith-add.js2.96(17.48)(16.58)
test-arith-div.js7.94(12.20)(20.96)
test-arith-mod.js7.36(14.76)(25.26)
test-arith-mul.js4.00(12.03)(16.46)
test-arith-sub.js2.98(12.13)(16.91)
test-array-append.js0.52(51.66)-
test-array-cons-list.js0.72(9.07)(2.19)
test-array-foreach.js2.60(3.56)1.65
test-array-literal.js1.10(60.52)0.88
test-array-pop.js2.06(51.36)(7.08)
test-array-push.js2.30(8.55)(4.06)
test-array-read-lenloop.js2.16(123.04)(4.57)
test-array-read.js2.03(232.08)(5.70)
test-array-sort.js3.35-(4.26)
test-array-write-length.js1.81(3.70)(2.70)
test-array-write.js1.97(248.86)(6.51)
test-assign-add.js4.21(37.42)(25.02)
test-assign-add.js4.20(37.40)(25.02)
test-assign-addto-nan.js1.20(8.04)(6.45)
test-assign-addto.js4.20(38.39)(30.42)
test-assign-boolean.js5.16(10.36)(20.73)
test-assign-const-int.js3.01(10.56)(12.80)
test-assign-const-int2.js6.08(10.91)(12.98)
test-assign-const.js5.18(10.88)(19.16)
test-assign-literal.js4.21(10.95)(23.22)
test-assign-proplhs-reg.js2.902.70(5.58)
test-assign-proprhs.js3.052.67(3.99)
test-assign-reg.js3.42(9.68)(17.14)
test-base64-decode-whitespace.js2.20--
test-base64-decode.js1.73--
test-base64-encode.js1.86--
test-bitwise-ops.js2.04(14.97)(21.76)
test-break-fast.js1.541.261.40
test-break-slow.js8.292.824.57
test-buffer-nodejs-read.js2.50--
test-buffer-nodejs-write.js3.28--
test-buffer-object-read.js2.53--
test-buffer-object-write.js3.28--
test-buffer-plain-read.js2.04--
test-buffer-plain-write.js2.00--
test-call-basic-1.js7.697.30(10.44)
test-call-basic-2.js7.705.28(9.14)
test-call-basic-3.js9.85(13.68)(15.58)
test-call-basic-4.js19.48(37.95)(39.20)
test-call-native.js12.95(17.36)8.52
test-call-prop.js4.433.14(4.68)
test-call-reg-new.js5.903.003.38
test-call-reg.js2.992.48(3.84)
test-call-var.js6.204.794.32
test-closure-inner-functions.js1.330.660.26
test-compile-mandel-nofrac.js10.406.502.41
test-compile-mandel.js13.476.492.40
test-compile-short.js5.772.430.98
test-compile-string-ascii.js7.066.99-
test-continue-fast.js2.06(2.20)(2.56)
test-continue-slow.js8.823.656.56
test-empty-loop-slowpath.js1.101.090.71
test-empty-loop.js1.84(6.38)(3.60)
test-enum-basic.js3.350.711.17
test-equals-fastint.js0.62(2.59)(3.36)
test-equals-nonfastint.js0.66(2.58)(4.72)
test-error-create.js1.71(5.12)0.82
test-fib.js6.343.605.71
test-global-lookup.js6.794.512.74
test-hello-world.js0.000.000.00
test-hex-decode.js4.00--
test-hex-encode.js3.08--
test-jc-serialize-indented.js3.82--
test-jc-serialize.js2.39--
test-json-parse-hex.js3.60--
test-json-parse-integer.js2.87(23.34)-
test-json-parse-number.js5.222.68-
test-json-parse-string.js5.17(48.75)-
test-json-serialize-fastpath-loop.js3.62(13.40)(582.05)
test-json-serialize-forceslow.js9.782.399.10
test-json-serialize-hex.js1.51--
test-json-serialize-indented-deep100.js1.43(1.62)(147.40)
test-json-serialize-indented-deep25.js3.60(11.21)(265.65)
test-json-serialize-indented-deep500.js0.93--
test-json-serialize-indented.js6.12(16.42)(108.06)
test-json-serialize-jsonrpc-message.js3.27--
test-json-serialize-nofrac.js0.66(1.72)(7.26)
test-json-serialize-plainbuf.js2.48--
test-json-serialize-slowpath-loop.js3.72-(6.34)
test-json-serialize.js6.482.38(9.04)
test-json-string-bench.js3.18(53.90)-
test-json-string-stringify.js10.16(11.77)-
test-jx-serialize-bufobj-forceslow.js4.47--
test-jx-serialize-bufobj.js1.71--
test-jx-serialize-indented.js3.45--
test-jx-serialize.js2.24--
test-mandel.js3.15(15.26)(14.52)
test-object-garbage-2.js3.62(54.81)3.29
test-object-garbage.js3.312.702.77
test-object-literal.js2.53(4.43)2.29
test-prop-read-1024.js3.64(6.74)(4.46)
test-prop-read-16.js3.69(4.55)(4.44)
test-prop-read-256.js3.62(8.29)(4.42)
test-prop-read-32.js3.65(5.58)(4.43)
test-prop-read-4.js3.54(3.99)(4.41)
test-prop-read-48.js3.64(6.52)(4.42)
test-prop-read-64.js3.62(6.56)(4.43)
test-prop-read-8.js3.75(5.00)(4.46)
test-prop-read.js3.83(4.03)(4.54)
test-prop-write-1024.js3.32(10.37)(5.29)
test-prop-write-16.js3.30(4.42)(5.30)
test-prop-write-256.js3.38(8.24)(5.30)
test-prop-write-32.js3.30(5.59)(5.32)
test-prop-write-4.js3.53(3.95)(5.28)
test-prop-write-48.js3.33(6.50)(5.26)
test-prop-write-64.js3.31(6.51)(5.31)
test-prop-write-8.js3.30(4.90)(5.27)
test-prop-write.js3.65(3.95)(5.29)
test-random.js2.261.122.00
test-reg-readwrite-object.js3.73(8.57)(15.01)
test-reg-readwrite-plain.js2.51(8.44)(12.16)
test-regexp-case-insensitive.js28.480.000.00
test-regexp-compile.js2.081.620.46
test-regexp-execute.js1.49(1.84)1.25
test-regexp-string-parse.js6.41--
test-strict-equals-fastint.js0.63(2.66)(3.46)
test-strict-equals-nonfastint.js0.66(2.65)(4.50)
test-string-array-concat.js5.31(270.24)-
test-string-arridx.js1.691.021.65
test-string-charlen-ascii.js1.17(5.14)0.80
test-string-charlen-nonascii.js3.07(7.73)0.54
test-string-compare.js2.40(790.20)-
test-string-decodeuri.js4.512.26-
test-string-encodeuri.js4.683.97-
test-string-garbage.js4.041.902.08
test-string-intern-grow-short.js3.78--
test-string-intern-grow-short2.js3.73--
test-string-intern-grow.js4.09--
test-string-intern-grow2.js0.64--
test-string-intern-match-short.js1.81--
test-string-intern-match.js0.22--
test-string-intern-miss-short.js2.16--
test-string-intern-miss.js0.34--
test-string-number-list.js0.66(7.78)-
test-string-plain-concat.js0.46(1.04)(0.54)
test-string-scan-nonascii.js4.25(50.74)(15.79)
test-string-uppercase.js2.82(4.86)-
test-textdecoder-ascii.js2.65--
test-textdecoder-nonascii.js2.78--
test-textencoder-ascii.js5.48--
test-textencoder-nonascii.js11.26--
test-try-catch-nothrow.js3.322.42(3.58)
test-try-catch-throw.js30.9623.7016.34
test-try-finally-nothrow.js4.022.294.06
test-try-finally-throw.js46.1226.2919.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.210duk.O2.200duk.O2.150mujsjerryluapython
test-add-fastint.js0.730.850.914.382.95--
test-add-float.js0.700.870.944.384.16--
test-add-nan-fastint.js0.760.901.004.383.50--
test-add-nan.js0.700.870.914.404.17--
test-arith-add.js2.963.433.6617.4816.58--
test-arith-div.js7.948.389.1912.2020.96--
test-arith-mod.js7.367.508.7314.7625.26--
test-arith-mul.js4.004.365.1412.0316.46--
test-arith-sub.js2.983.503.9512.1316.91--
test-array-append.js0.520.720.7651.66---
test-array-cons-list.js0.720.962.509.072.19--
test-array-foreach.js2.602.782.923.561.65--
test-array-literal.js1.101.761.9860.520.88--
test-array-pop.js2.062.458.0851.367.081.161.18
test-array-push.js2.302.745.388.554.061.020.60
test-array-read-lenloop.js2.162.412.75123.044.57--
test-array-read.js2.032.262.60232.085.701.122.18
test-array-sort.js3.353.483.51-4.26--
test-array-write-length.js1.812.002.943.702.70--
test-array-write.js1.972.243.01248.866.511.343.02
test-assign-add.js4.215.366.0437.4225.023.4915.83
test-assign-add.js4.205.366.0437.4025.023.5115.87
test-assign-addto-nan.js1.201.451.648.046.45--
test-assign-addto.js4.205.366.0438.3930.423.5017.13
test-assign-boolean.js5.165.205.2210.3620.73--
test-assign-const-int.js3.014.183.0810.5612.802.566.03
test-assign-const-int2.js6.088.5210.1810.9112.98--
test-assign-const.js5.185.774.5010.8819.162.556.06
test-assign-literal.js4.215.444.7610.9523.222.7413.56
test-assign-proplhs-reg.js2.903.193.922.705.58--
test-assign-proprhs.js3.053.214.302.673.99--
test-assign-reg.js3.424.803.359.6817.142.525.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.js1.861.87----20.42
test-bitwise-ops.js2.042.382.4614.9721.76--
test-break-fast.js1.541.811.571.261.40--
test-break-slow.js8.299.378.932.824.57--
test-buffer-nodejs-read.js2.502.812.80----
test-buffer-nodejs-write.js3.283.473.40----
test-buffer-object-read.js2.532.812.81----
test-buffer-object-write.js3.283.503.40----
test-buffer-plain-read.js2.042.372.34----
test-buffer-plain-write.js2.002.292.14----
test-call-basic-1.js7.698.739.957.3010.442.276.16
test-call-basic-2.js7.708.6610.005.289.14--
test-call-basic-3.js9.8510.9416.1513.6815.58--
test-call-basic-4.js19.4821.0238.6337.9539.20--
test-call-native.js12.9513.8814.6017.368.52--
test-call-prop.js4.434.906.023.144.68--
test-call-reg-new.js5.906.997.243.003.38--
test-call-reg.js2.993.373.842.483.84--
test-call-var.js6.208.648.584.794.32--
test-closure-inner-functions.js1.331.802.590.660.26--
test-compile-mandel-nofrac.js10.4011.3614.086.502.41--
test-compile-mandel.js13.4714.4516.916.492.40--
test-compile-short.js5.777.029.672.430.98--
test-compile-string-ascii.js7.067.129.936.99---
test-continue-fast.js2.062.242.062.202.56--
test-continue-slow.js8.829.929.303.656.56--
test-empty-loop-slowpath.js1.101.772.381.090.71--
test-empty-loop.js1.842.402.346.383.601.145.13
test-enum-basic.js3.354.334.920.711.17--
test-equals-fastint.js0.620.721.232.593.36--
test-equals-nonfastint.js0.660.761.332.584.72--
test-error-create.js1.712.303.645.120.82--
test-fib.js6.347.578.343.605.711.432.91
test-global-lookup.js6.798.9611.604.512.74--
test-hello-world.js0.000.000.000.000.000.000.00
test-hex-decode.js4.003.984.04---13.45
test-hex-encode.js3.083.29----1.68
test-jc-serialize-indented.js(3.82)3.693.98----
test-jc-serialize.js2.392.482.78----
test-json-parse-hex.js3.603.60-----
test-json-parse-integer.js2.874.064.1923.34--0.08
test-json-parse-number.js5.225.265.352.68--0.40
test-json-parse-string.js5.175.685.4348.75---
test-json-serialize-fastpath-loop.js3.623.994.0313.40582.05--
test-json-serialize-forceslow.js9.789.9811.982.399.10--
test-json-serialize-hex.js1.511.52-----
test-json-serialize-indented-deep100.js1.431.932.721.62147.40--
test-json-serialize-indented-deep25.js3.603.563.7611.21265.65--
test-json-serialize-indented-deep500.js0.931.271.61----
test-json-serialize-indented.js6.126.677.1616.42108.06--
test-json-serialize-jsonrpc-message.js3.273.323.32----
test-json-serialize-nofrac.js0.660.750.791.727.26--
test-json-serialize-plainbuf.js2.4830.950.07----
test-json-serialize-slowpath-loop.js3.724.656.60-6.34--
test-json-serialize.js6.486.496.622.389.04-0.65
test-json-string-bench.js3.183.855.5953.90---
test-json-string-stringify.js10.1610.3610.4411.77--0.53
test-jx-serialize-bufobj-forceslow.js4.475.056.17----
test-jx-serialize-bufobj.js1.711.731.79----
test-jx-serialize-indented.js3.453.513.80----
test-jx-serialize.js2.242.362.62----
test-mandel.js3.153.734.3715.2614.521.96-
test-object-garbage-2.js3.625.435.3854.813.29--
test-object-garbage.js3.315.055.492.702.774.150.85
test-object-literal.js2.533.212.884.432.29--
test-prop-read-1024.js3.644.205.266.744.46--
test-prop-read-16.js3.694.075.614.554.44--
test-prop-read-256.js3.624.025.218.294.42--
test-prop-read-32.js3.654.005.195.584.43--
test-prop-read-4.js3.543.614.793.994.41--
test-prop-read-48.js3.647.315.866.524.42--
test-prop-read-64.js3.624.055.246.564.43--
test-prop-read-8.js3.753.765.015.004.46--
test-prop-read.js3.833.764.984.034.541.142.62
test-prop-write-1024.js3.324.094.9710.375.29--
test-prop-write-16.js3.304.155.024.425.30--
test-prop-write-256.js3.384.105.028.245.30--
test-prop-write-32.js3.304.075.035.595.32--
test-prop-write-4.js3.533.664.403.955.28--
test-prop-write-48.js3.334.018.106.505.26--
test-prop-write-64.js3.314.035.076.515.31--
test-prop-write-8.js3.303.824.604.905.27--
test-prop-write.js3.653.744.423.955.291.412.72
test-random.js2.262.566.861.122.00--
test-reg-readwrite-object.js3.734.273.868.5715.011.92-
test-reg-readwrite-plain.js2.513.592.488.4412.161.915.50
test-regexp-case-insensitive.js28.4827.7625.690.000.00--
test-regexp-compile.js2.082.282.901.620.46--
test-regexp-execute.js1.491.722.181.841.25--
test-regexp-string-parse.js6.416.4210.70---0.59
test-strict-equals-fastint.js0.630.711.232.663.46--
test-strict-equals-nonfastint.js0.660.761.332.654.50--
test-string-array-concat.js5.316.256.63270.24-2.223.54
test-string-arridx.js1.691.821.961.021.65--
test-string-charlen-ascii.js1.171.201.455.140.80--
test-string-charlen-nonascii.js(3.07)2.872.907.730.54--
test-string-compare.js2.402.563.86790.20-3.495.95
test-string-decodeuri.js4.514.404.132.26---
test-string-encodeuri.js4.684.854.473.97---
test-string-garbage.js4.045.565.361.902.081.771.82
test-string-intern-grow-short.js3.7813.0412.72----
test-string-intern-grow-short2.js3.735.065.31----
test-string-intern-grow.js4.0921.4221.73----
test-string-intern-grow2.js0.641.841.88----
test-string-intern-match-short.js1.812.742.68----
test-string-intern-match.js0.220.260.26----
test-string-intern-miss-short.js2.163.403.57----
test-string-intern-miss.js0.341.221.24----
test-string-number-list.js0.661.251.747.78---
test-string-plain-concat.js0.460.901.071.040.540.600.00
test-string-scan-nonascii.js(4.25)3.964.3850.7415.79--
test-string-uppercase.js2.822.832.864.86--1.34
test-textdecoder-ascii.js(2.65)2.42-----
test-textdecoder-nonascii.js2.783.41-----
test-textencoder-ascii.js5.485.47-----
test-textencoder-nonascii.js11.2611.92-----
test-try-catch-nothrow.js3.323.382.972.423.58--
test-try-catch-throw.js30.9643.0445.4323.7016.34--
test-try-finally-nothrow.js4.024.083.882.294.06--
test-try-finally-throw.js46.1253.7255.9526.2919.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.210duk-pgo.O2.210duk-perf.O2.210duk-perf.O2.200duk.O2.210duk.O2.200duk.O2.150mujsjerryluapythonperlruby
test-add-fastint.js0.710.600.650.650.730.850.914.382.95----
test-add-float.js0.600.660.680.670.700.870.944.384.16----
test-add-nan-fastint.js0.710.820.760.730.760.901.004.383.50----
test-add-nan.js0.600.660.670.670.700.870.914.404.17----
test-arith-add.js2.872.402.622.582.963.433.6617.4816.58----
test-arith-div.js7.817.187.447.627.948.389.1912.2020.96----
test-arith-mod.js6.787.216.566.407.367.508.7314.7625.26----
test-arith-mul.js3.944.013.363.444.004.365.1412.0316.46----
test-arith-sub.js2.013.032.682.702.983.503.9512.1316.91----
test-array-append.js0.450.480.520.610.520.720.7651.66-----
test-array-cons-list.js0.660.680.700.900.720.962.509.072.19----
test-array-foreach.js2.482.662.462.652.602.782.923.561.65----
test-array-literal.js1.081.121.101.641.101.761.9860.520.88----
test-array-pop.js1.511.602.082.352.062.458.0851.367.081.161.18--
test-array-push.js1.721.842.202.632.302.745.388.554.061.020.60--
test-array-read-lenloop.js1.521.622.112.072.162.412.75123.044.57----
test-array-read.js1.621.641.941.972.032.262.60232.085.701.122.183.521.66
test-array-sort.js3.683.613.313.583.353.483.51-4.26----
test-array-write-length.js1.441.501.671.641.812.002.943.702.70----
test-array-write.js1.781.841.961.941.972.243.01248.866.511.343.023.572.34
test-assign-add.js3.684.023.813.834.215.366.0437.4225.023.4915.8325.659.58
test-assign-add.js3.714.023.833.874.205.366.0437.4025.023.5115.8740.479.82
test-assign-addto-nan.js1.161.431.221.171.201.451.648.046.45----
test-assign-addto.js3.684.023.863.854.205.366.0438.3930.423.5017.1324.909.64
test-assign-boolean.js5.125.135.125.115.165.205.2210.3620.73----
test-assign-const-int.js2.322.932.912.853.014.183.0810.5612.802.566.0324.984.87
test-assign-const-int2.js4.685.945.565.586.088.5210.1810.9112.98----
test-assign-const.js4.194.493.953.905.185.774.5010.8819.162.556.0626.314.95
test-assign-literal.js3.874.113.753.784.215.444.7610.9523.222.7413.56-4.82
test-assign-proplhs-reg.js2.792.703.002.872.903.193.922.705.58----
test-assign-proprhs.js1.921.913.063.013.053.214.302.673.99----
test-assign-reg.js2.653.043.283.183.424.803.359.6817.142.525.9625.495.15
test-base64-decode-whitespace.js2.212.211.921.94(2.20)2.01----8.63--
test-base64-decode.js1.731.731.731.72(1.73)1.66----8.62--
test-base64-encode.js2.072.081.861.861.861.87----20.42--
test-bitwise-ops.js1.661.821.731.712.042.382.4614.9721.76----
test-break-fast.js1.261.421.231.271.541.811.571.261.40----
test-break-slow.js7.478.067.467.318.299.378.932.824.57----
test-buffer-nodejs-read.js2.252.342.422.402.502.812.80------
test-buffer-nodejs-write.js3.933.993.123.203.283.473.40------
test-buffer-object-read.js2.262.342.472.432.532.812.81------
test-buffer-object-write.js3.933.983.133.203.283.503.40------
test-buffer-plain-read.js1.801.952.022.002.042.372.34------
test-buffer-plain-write.js1.841.901.981.972.002.292.14------
test-call-basic-1.js4.554.997.127.777.698.739.957.3010.442.276.168.612.86
test-call-basic-2.js4.554.997.117.757.708.6610.005.289.14----
test-call-basic-3.js6.477.109.089.769.8510.9416.1513.6815.58----
test-call-basic-4.js14.3015.3017.4318.7019.4821.0238.6337.9539.20----
test-call-native.js12.3813.3212.2113.1412.9513.8814.6017.368.52----
test-call-prop.js2.582.804.134.434.434.906.023.144.68----
test-call-reg-new.js5.385.595.756.935.906.997.243.003.38----
test-call-reg.js1.782.032.823.022.993.373.842.483.84----
test-call-var.js3.263.486.008.396.208.648.584.794.32----
test-closure-inner-functions.js1.121.241.201.761.331.802.590.660.26----
test-compile-mandel-nofrac.js10.3010.5910.3711.5810.4011.3614.086.502.41----
test-compile-mandel.js13.3613.7613.5914.6413.4714.4516.916.492.40----
test-compile-short.js5.435.785.716.805.777.029.672.430.98----
test-compile-string-ascii.js7.017.467.157.227.067.129.936.99-----
test-continue-fast.js1.701.921.811.812.062.242.062.202.56----
test-continue-slow.js8.118.397.967.998.829.929.303.656.56----
test-empty-loop-slowpath.js0.860.880.981.711.101.772.381.090.71----
test-empty-loop.js1.381.521.981.981.842.402.346.383.601.145.133.644.32
test-enum-basic.js3.123.233.354.243.354.334.920.711.17----
test-equals-fastint.js0.580.590.580.590.620.721.232.593.36----
test-equals-nonfastint.js0.660.690.620.630.660.761.332.584.72----
test-error-create.js1.201.231.652.351.712.303.645.120.82----
test-fib.js2.863.066.017.086.347.578.343.605.711.432.917.381.27
test-global-lookup.js4.864.706.388.826.798.9611.604.512.74----
test-hello-world.js0.000.000.000.000.000.000.000.000.000.000.000.000.02
test-hex-decode.js4.004.004.014.014.003.984.04---13.45--
test-hex-encode.js3.243.283.203.123.083.29----1.68--
test-jc-serialize-indented.js7.747.673.823.66(3.82)3.693.98------
test-jc-serialize.js2.572.552.312.462.392.482.78------
test-json-parse-hex.js4.504.464.063.593.603.60-------
test-json-parse-integer.js3.203.182.894.262.874.064.1923.34--0.08--
test-json-parse-number.js5.705.575.235.315.225.265.352.68--0.40--
test-json-parse-string.js5.165.145.255.405.175.685.4348.75-----
test-json-serialize-fastpath-loop.js6.926.903.543.973.623.994.0313.40582.05----
test-json-serialize-forceslow.js10.9311.079.6810.089.789.9811.982.399.10----
test-json-serialize-hex.js1.591.561.521.511.511.52-------
test-json-serialize-indented-deep100.js1.761.791.431.941.431.932.721.62147.40----
test-json-serialize-indented-deep25.js7.767.723.523.453.603.563.7611.21265.65----
test-json-serialize-indented-deep500.js1.071.080.941.280.931.271.61------
test-json-serialize-indented.js13.5613.346.196.526.126.677.1616.42108.06----
test-json-serialize-jsonrpc-message.js2.082.113.133.333.273.323.32------
test-json-serialize-nofrac.js0.670.680.660.660.660.750.791.727.26----
test-json-serialize-plainbuf.js2.502.482.5231.132.4830.950.07------
test-json-serialize-slowpath-loop.js4.134.303.724.573.724.656.60-6.34----
test-json-serialize.js7.907.886.416.546.486.496.622.389.04-0.65--
test-json-string-bench.js2.462.523.143.663.183.855.5953.90-----
test-json-string-stringify.js5.345.379.3210.3410.1610.3610.4411.77--0.53--
test-jx-serialize-bufobj-forceslow.js4.104.224.385.164.475.056.17------
test-jx-serialize-bufobj.js1.681.781.661.661.711.731.79------
test-jx-serialize-indented.js7.457.503.403.483.453.513.80------
test-jx-serialize.js2.502.522.172.302.242.362.62------
test-mandel.js2.382.682.932.933.153.734.3715.2614.521.96---
test-object-garbage-2.js3.523.643.585.313.625.435.3854.813.29----
test-object-garbage.js3.113.363.364.863.315.055.492.702.774.150.85--
test-object-literal.js2.442.402.483.082.533.212.884.432.29----
test-prop-read-1024.js2.432.493.493.763.644.205.266.744.46----
test-prop-read-16.js2.462.463.503.883.694.075.614.554.44----
test-prop-read-256.js2.432.483.513.803.624.025.218.294.42----
test-prop-read-32.js2.412.453.504.543.654.005.195.584.43----
test-prop-read-4.js2.362.333.503.333.543.614.793.994.41----
test-prop-read-48.js2.412.453.505.523.647.315.866.524.42----
test-prop-read-64.js2.422.483.513.823.624.055.246.564.43----
test-prop-read-8.js2.422.473.493.723.753.765.015.004.46----
test-prop-read.js2.482.413.553.383.833.764.984.034.541.142.624.773.97
test-prop-write-1024.js3.133.153.364.463.324.094.9710.375.29----
test-prop-write-16.js3.123.133.353.803.304.155.024.425.30----
test-prop-write-256.js3.113.143.403.993.384.105.028.245.30----
test-prop-write-32.js3.183.143.353.803.304.075.035.595.32----
test-prop-write-4.js3.243.203.293.293.533.664.403.955.28----
test-prop-write-48.js3.123.133.343.873.334.018.106.505.26----
test-prop-write-64.js3.083.143.383.833.314.035.076.515.31----
test-prop-write-8.js3.123.183.323.403.303.824.604.905.27----
test-prop-write.js3.263.223.323.323.653.744.423.955.291.412.724.965.24
test-random.js1.451.642.102.362.262.566.861.122.00----
test-reg-readwrite-object.js3.283.403.363.343.734.273.868.5715.011.92-33.294.23
test-reg-readwrite-plain.js1.922.242.372.362.513.592.488.4412.161.915.5035.914.28
test-regexp-case-insensitive.js0.0038.230.000.0028.4827.7625.690.000.00----
test-regexp-compile.js2.102.232.022.332.082.282.901.620.46----
test-regexp-execute.js1.421.451.481.741.491.722.181.841.25----
test-regexp-string-parse.js11.5911.476.566.466.416.4210.70---0.59--
test-strict-equals-fastint.js0.590.630.580.580.630.711.232.663.46----
test-strict-equals-nonfastint.js0.690.690.640.620.660.761.332.654.50----
test-string-array-concat.js5.055.315.576.015.316.256.63270.24-2.223.548.016.48
test-string-arridx.js1.701.741.701.781.691.821.961.021.65----
test-string-charlen-ascii.js1.181.141.161.201.171.201.455.140.80----
test-string-charlen-nonascii.js2.782.782.822.78(3.07)2.872.907.730.54----
test-string-compare.js2.112.132.112.122.402.563.86790.20-3.495.9518.945.09
test-string-decodeuri.js4.724.744.374.284.514.404.132.26-----
test-string-encodeuri.js5.315.224.784.754.684.854.473.97-----
test-string-garbage.js4.174.324.125.314.045.565.361.902.081.771.82--
test-string-intern-grow-short.js3.513.573.6412.443.7813.0412.72------
test-string-intern-grow-short2.js3.443.543.544.963.735.065.31------
test-string-intern-grow.js4.224.124.1321.344.0921.4221.73------
test-string-intern-grow2.js0.620.620.651.840.641.841.88------
test-string-intern-match-short.js1.621.661.692.761.812.742.68------
test-string-intern-match.js0.190.200.200.230.220.260.26------
test-string-intern-miss-short.js1.961.992.003.302.163.403.57------
test-string-intern-miss.js0.310.320.321.180.341.221.24------
test-string-number-list.js0.530.540.661.270.661.251.747.78-----
test-string-plain-concat.js0.440.470.440.920.460.901.071.040.540.600.000.440.48
test-string-scan-nonascii.js4.544.344.193.94(4.25)3.964.3850.7415.79----
test-string-uppercase.js3.203.562.782.842.822.832.864.86--1.34--
test-textdecoder-ascii.js2.382.642.622.72(2.65)2.42-------
test-textdecoder-nonascii.js3.253.302.783.312.783.41-------
test-textencoder-ascii.js6.046.025.735.735.485.47-------
test-textencoder-nonascii.js14.3413.8910.5210.4911.2611.92-------
test-try-catch-nothrow.js2.983.223.122.743.323.382.972.423.58----
test-try-catch-throw.js28.6030.5829.2341.5630.9643.0445.4323.7016.34----
test-try-finally-nothrow.js3.744.053.483.164.024.083.882.294.06----
test-try-finally-throw.js44.2746.1043.8552.3746.1253.7255.9526.2919.72----

Setup

Measurement host:

  • "Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz" laptop

Duktape is compiled with:

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.