Skip to content

Latest commit

 

History

History
757 lines (736 loc) · 299 KB

Performance220.md

File metadata and controls

757 lines (736 loc) · 299 KB

Duktape 2.2.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.220 duk.O2.220 duk-pgo.O2.210 duk.O2.210 duk.O2.200 duk.O2.150 mujs jerry
Box2D 1208 928 1180 830 756 586 311 -
CodeLoad 6276 6542 6127 6310 5676 4579 - -
Crypto 293 280 285 242 185 183 - 193
DeltaBlue 305 220 295 192 178 138 78 166
EarleyBoyer 586 589 530 529 342 291 - -
Gameboy 2209 1783 2197 1491 1324 1119 - -
NavierStokes 843 749 778 687 557 503 - -
PdfJS 855 808 831 754 390 352 - -
RayTrace 468 396 427 352 241 209 330 234
Richards 225 178 220 150 144 112 115 166
Splay 1261 1118 1083 930 696 635 29 -
SplayLatency 2865 5719 2813 4240 3344 2288 266 -
SCORE 888 830 844 724 568 475 - -

Duktape microbenchmarks, comparison to other engines

Baseline is duk.O2.220, compared to a few other engines. Lower is better, lowest of 5 runs.

duk.O2.220mujsjerry
test-add-fastint0.67(4.37)(2.96)
test-add-float0.71(4.40)(4.14)
test-add-int0.70(4.47)(4.74)
test-add-nan-fastint0.89(4.38)(3.49)
test-add-nan0.70(4.38)(4.15)
test-add-string14.269.9713.22
test-arith-add2.72(17.45)(16.58)
test-arith-add-string1.401.001.31
test-arith-div7.69(12.20)(21.04)
test-arith-mod6.87(14.80)(25.42)
test-arith-mul3.93(12.05)(16.42)
test-arith-sub2.82(12.21)(16.92)
test-array-append0.53(48.00)-
test-array-cons-list0.63(8.79)(2.22)
test-array-foreach2.23(3.69)1.66
test-array-literal-1002.61(446.78)(3.92)
test-array-literal-200.66(59.65)(0.91)
test-array-literal-30.26(6.15)0.24
test-array-pop1.66(51.24)(7.07)
test-array-push2.02(8.52)(4.02)
test-array-read1.96(236.50)(5.73)
test-array-read-lenloop2.14(123.30)(4.57)
test-array-sort3.22-(4.26)
test-array-write1.90(255.16)(6.62)
test-array-write-length1.60(3.67)(2.71)
test-assign-add4.17(38.24)(25.02)
test-assign-addto4.18(37.46)(30.29)
test-assign-addto-nan1.43(8.07)(6.44)
test-assign-boolean5.14(10.35)(20.94)
test-assign-const-int26.15(10.61)(12.75)
test-assign-const-int3.01(10.53)(12.80)
test-assign-const4.18(10.74)(18.82)
test-assign-literal4.42(10.89)(23.24)
test-assign-proplhs-reg2.682.65(5.62)
test-assign-proprhs2.852.66(3.98)
test-assign-reg3.27(9.68)(17.20)
test-base64-decode1.73--
test-base64-decode-whitespace1.94--
test-base64-encode1.87--
test-bitwise-ops1.90(14.86)(21.80)
test-break-fast1.23(1.31)(1.41)
test-break-slow7.442.844.60
test-buffer-nodejs-read2.39--
test-buffer-nodejs-write3.12--
test-buffer-object-read2.41--
test-buffer-object-write3.18--
test-buffer-plain-read1.96--
test-buffer-plain-write1.93--
test-call-apply2.37(2.52)(2.50)
test-call-basic-16.366.27(9.65)
test-call-basic-26.514.60(8.83)
test-call-basic-38.34(12.96)(15.18)
test-call-basic-417.56(42.82)(40.11)
test-call-bound-deep2.98-(4.45)
test-call-bound2.84-2.02
test-call-call2.131.571.73
test-call-native11.31(16.99)8.60
test-call-prop3.923.16(4.69)
test-call-proxy-apply-126.93--
test-call-proxy-pass-113.81--
test-call-reg2.542.48(3.84)
test-call-reg-new4.923.003.38
test-call-tail-11.04-(1.82)
test-call-tail-21.16-(1.99)
test-call-var5.504.874.33
test-closure-inner-functions1.270.700.26
test-compile-mandel13.126.452.40
test-compile-mandel-nofrac10.066.462.40
test-compile-short5.672.320.97
test-compile-string-ascii7.936.89-
test-continue-fast1.55(2.16)(2.60)
test-continue-slow7.743.666.56
test-empty-loop1.78(6.40)(3.59)
test-empty-loop-slowpath0.97(1.08)0.71
test-empty-loop-step31.82(8.05)(7.07)
test-enum-basic3.260.711.16
test-equals-fastint0.57(2.58)(3.36)
test-equals-nonfastint0.64(2.58)(4.75)
test-error-create1.60(5.09)0.86
test-fib-23.20(3.68)(5.95)
test-fib5.903.625.75
test-func-bind2.18-1.01
test-global-lookup6.164.532.75
test-hello-world0.000.000.00
test-hex-decode4.01--
test-hex-encode3.21--
test-jc-serialize-indented3.17--
test-jc-serialize2.15--
test-json-parse-hex3.47--
test-json-parse-integer2.90(23.51)-
test-json-parse-number5.092.70-
test-json-parse-string5.23(51.66)-
test-json-serialize-fastpath-loop3.32(13.44)(581.44)
test-json-serialize-forceslow9.512.409.14
test-json-serialize-hex1.54--
test-json-serialize-indented-deep1001.38(1.60)(149.64)
test-json-serialize-indented-deep253.17(11.84)(280.97)
test-json-serialize-indented-deep5000.94--
test-json-serialize-indented5.57(16.33)(108.33)
test-json-serialize6.402.37(9.06)
test-json-serialize-jsonrpc-message3.11--
test-json-serialize-nofrac0.62(1.74)(7.26)
test-json-serialize-plainbuf2.55--
test-json-serialize-slowpath-loop3.42-(11.18)
test-json-string-bench2.80(53.98)-
test-json-string-stringify10.05(11.67)-
test-jx-serialize-bufobj-forceslow4.11--
test-jx-serialize-bufobj1.52--
test-jx-serialize-indented3.04--
test-jx-serialize2.08--
test-mandel2.94(15.22)(14.56)
test-math-clz322.21--
test-misc-1dcell3.70(127.98)(8.58)
test-object-garbage-22.61(54.54)(3.31)
test-object-garbage4.052.682.78
test-object-literal-1007.10(30.28)(12.54)
test-object-literal-201.62(4.30)(2.27)
test-object-literal-30.36(0.52)(0.39)
test-prop-read-10243.31(6.82)(4.46)
test-prop-read-163.32(4.48)(4.43)
test-prop-read-2563.27(8.29)(4.43)
test-prop-read-323.32(5.62)(4.44)
test-prop-read-483.34(6.52)(4.42)
test-prop-read-43.43(4.00)(4.42)
test-prop-read-643.31(6.52)(4.34)
test-prop-read-83.32(4.93)(4.43)
test-prop-read-inherited4.764.75(9.40)
test-prop-read3.44(3.96)(4.43)
test-prop-write-10243.14(10.39)(5.26)
test-prop-write-163.20(4.46)(5.27)
test-prop-write-2563.14(8.21)(5.32)
test-prop-write-323.18(5.52)(5.32)
test-prop-write-483.22(6.57)(5.29)
test-prop-write-43.20(3.93)(5.30)
test-prop-write-643.21(6.55)(5.32)
test-prop-write-83.16(4.92)(5.26)
test-prop-write3.25(3.95)(5.28)
test-proxy-get1.62--
test-random1.611.14(2.14)
test-reflect-ownkeys-sorted1.11--
test-reflect-ownkeys-unsorted1.12--
test-regexp-case-insensitive-compile0.710.000.00
test-regexp-case-insensitive-execute1.69(46.32)0.12
test-regexp-case-sensitive-compile1.820.900.66
test-regexp-case-sensitive-execute1.590.651.60
test-regexp-compile2.452.020.57
test-regexp-execute1.81(2.30)1.54
test-regexp-string-parse8.08--
test-reg-readwrite-object4.54(10.75)(18.71)
test-reg-readwrite-plain2.87(10.85)(14.85)
test-strict-equals-fastint0.70(3.37)(4.18)
test-strict-equals-nonfastint0.76(3.38)(5.62)
test-string-array-concat6.66(320.63)-
test-string-arridx1.811.32(2.00)
test-string-charlen-ascii1.42(6.20)0.99
test-string-charlen-nonascii3.38(9.84)0.68
test-string-compare2.63--
test-string-decodeuri5.532.98-
test-string-encodeuri5.405.06-
test-string-garbage4.492.412.55
test-string-intern-grow20.78--
test-string-intern-grow5.10--
test-string-intern-grow-short24.29--
test-string-intern-grow-short4.45--
test-string-intern-match0.22--
test-string-intern-match-short1.98--
test-string-intern-miss0.39--
test-string-intern-miss-short2.34--
test-string-number-list0.72(9.56)-
test-string-plain-concat0.60(1.26)(0.66)
test-string-scan-nonascii4.96(63.81)(19.89)
test-string-uppercase3.33(6.19)-
test-textdecoder-ascii4.03--
test-textdecoder-nonascii3.56--
test-textencoder-ascii6.87--
test-textencoder-nonascii13.27--
test-try-catch-nothrow4.343.084.37
test-try-catch-throw36.5530.0420.73
test-try-finally-nothrow5.182.904.93
test-try-finally-throw46.4633.7226.64

Duktape microbenchmarks, pruned

Baseline is duk.O2.210, compared to duk.O2.220, i.e. improvement or regression from 2.1.x -> 2.2.x. Lower is better, lowest of 5 runs.

duk.O2.220duk.O2.210duk.O2.200duk.O2.150mujsjerryluapython
test-add-fastint0.670.74(0.86)(0.91)(4.37)(2.96)--
test-add-float0.710.69(0.87)(0.91)(4.40)(4.14)--
test-add-int0.700.72(0.86)(0.94)(4.47)(4.74)--
test-add-nan-fastint(0.89)0.76(0.90)(0.99)(4.38)(3.49)--
test-add-nan0.700.70(0.86)(0.91)(4.38)(4.15)--
test-add-string14.2616.86(17.97)(18.83)9.9713.22--
test-arith-add2.722.95(3.48)(3.74)(17.45)(16.58)--
test-arith-add-string1.401.70(1.82)(1.88)1.001.31--
test-arith-div7.697.92(8.42)(9.29)(12.20)(21.04)--
test-arith-mod6.877.357.52(8.76)(14.80)(25.42)--
test-arith-mul3.934.00(4.30)(5.13)(12.05)(16.42)--
test-arith-sub2.822.98(3.54)(3.96)(12.21)(16.92)--
test-array-append(0.53)0.51(0.69)(0.76)(48.00)---
test-array-cons-list0.630.72(0.96)(2.60)(8.79)(2.22)--
test-array-foreach2.232.63(2.77)(3.00)(3.69)1.66--
test-array-literal-1002.614.42(6.46)(6.72)(446.78)3.92--
test-array-literal-200.661.11(1.73)(1.98)(59.65)0.91--
test-array-literal-30.260.31(0.50)(0.72)(6.15)0.24--
test-array-pop1.662.06(2.44)(7.94)(51.24)(7.07)1.171.19
test-array-push2.022.30(2.70)(5.35)(8.52)(4.02)1.030.62
test-array-read1.962.00(2.30)(3.10)(236.50)(5.73)1.11(2.18)
test-array-read-lenloop2.142.16(2.43)(2.77)(123.30)(4.57)--
test-array-sort3.223.303.31(3.51)-(4.26)--
test-array-write1.901.94(2.24)(3.00)(255.16)(6.62)1.38(3.06)
test-array-write-length1.601.80(1.91)(3.01)(3.67)(2.71)--
test-assign-add4.174.20(5.37)(6.04)(38.24)(25.02)3.48(16.02)
test-assign-addto4.184.19(5.33)(6.08)(37.46)(30.29)3.49(17.09)
test-assign-addto-nan(1.43)1.21(1.44)(1.64)(8.07)(6.44)--
test-assign-boolean5.145.145.185.22(10.35)(20.94)--
test-assign-const-int26.156.05(8.40)(10.02)(10.61)(12.75)--
test-assign-const-int3.013.00(4.20)3.07(10.53)(12.80)2.53(5.95)
test-assign-const4.185.22(5.70)4.43(10.74)(18.82)2.55(5.97)
test-assign-literal(4.42)4.23(5.40)(4.73)(10.89)(23.24)2.74(13.35)
test-assign-proplhs-reg2.682.91(3.21)(4.06)2.65(5.62)--
test-assign-proprhs2.853.04(3.21)(4.29)2.66(3.98)--
test-assign-reg3.273.41(4.80)3.36(9.68)(17.20)2.52(5.97)
test-base64-decode1.731.741.68----(8.71)
test-base64-decode-whitespace1.942.202.10----(8.64)
test-base64-encode1.871.871.86----(20.67)
test-bitwise-ops1.902.05(2.40)(2.50)(14.86)(21.80)--
test-break-fast1.231.54(1.82)(1.59)1.311.41--
test-break-slow7.448.48(9.45)(9.19)2.844.60--
test-buffer-nodejs-read2.392.52(2.83)(2.88)----
test-buffer-nodejs-write3.123.28(3.54)(3.47)----
test-buffer-object-read2.412.52(2.86)(2.90)----
test-buffer-object-write3.183.38(3.55)3.45----
test-buffer-plain-read1.962.04(2.37)(2.40)----
test-buffer-plain-write1.932.02(2.30)(2.19)----
test-call-apply2.374.29(4.72)(5.52)2.522.50--
test-call-basic-16.367.52(8.44)(9.69)6.27(9.65)2.165.60
test-call-basic-26.517.56(8.50)(9.62)4.60(8.83)--
test-call-basic-38.349.65(10.67)(15.86)(12.96)(15.18)--
test-call-basic-417.5619.46(21.38)(38.86)(42.82)(40.11)--
test-call-bound-deep2.9827.79(30.35)(33.85)-4.45--
test-call-bound2.845.53(6.87)(7.64)-2.02--
test-call-call2.133.13(3.59)(4.22)1.571.73--
test-call-native11.3112.90(13.89)(14.66)(16.99)8.60--
test-call-prop3.924.43(4.90)(6.06)3.16(4.69)--
test-call-proxy-apply-126.93-------
test-call-proxy-pass-113.81-------
test-call-reg2.543.00(3.38)(3.85)2.48(3.84)--
test-call-reg-new4.925.96(6.98)(7.23)3.003.38--
test-call-tail-11.041.34(1.67)(2.40)-(1.82)--
test-call-tail-21.162.46(2.80)(3.52)-1.99--
test-call-var5.506.17(8.67)(8.74)4.874.33--
test-closure-inner-functions1.271.33(1.82)(2.59)0.700.26--
test-compile-mandel13.1213.44(14.50)(17.05)6.452.40--
test-compile-mandel-nofrac10.0610.31(11.52)(14.02)6.462.40--
test-compile-short5.675.84(7.04)(9.73)2.320.97--
test-compile-string-ascii(7.93)7.016.99(9.82)6.89---
test-continue-fast1.552.06(2.25)2.06(2.16)(2.60)--
test-continue-slow7.748.78(10.00)(9.26)3.666.56--
test-empty-loop1.781.84(2.42)(2.38)(6.40)(3.59)1.17(5.14)
test-empty-loop-slowpath0.971.10(1.81)(2.39)1.080.71--
test-empty-loop-step31.821.93(2.49)(2.49)(8.05)(7.07)--
test-enum-basic3.263.35(4.34)(4.95)0.711.16--
test-equals-fastint0.570.65(0.71)(1.23)(2.58)(3.36)--
test-equals-nonfastint0.640.66(0.76)(1.34)(2.58)(4.75)--
test-error-create1.601.72(2.37)(3.72)(5.09)0.86--
test-fib-23.203.67(4.08)(4.70)3.68(5.95)--
test-fib5.906.49(8.36)(8.62)3.625.751.442.90
test-func-bind2.183.26(4.14)(4.27)-1.01--
test-global-lookup6.166.89(9.00)(11.81)4.532.75--
test-hello-world0.000.000.000.000.000.000.000.00
test-hex-decode4.014.014.014.01---(13.28)
test-hex-encode3.213.213.22----1.62
test-jc-serialize-indented3.173.843.623.93----
test-jc-serialize2.152.38(2.50)(2.76)----
test-json-parse-hex3.473.523.51-----
test-json-parse-integer2.902.96(4.10)(4.35)(23.51)--0.09
test-json-parse-number5.095.235.135.302.70--0.40
test-json-parse-string5.235.21(5.75)(5.46)(51.66)---
test-json-serialize-fastpath-loop3.323.60(4.02)(4.00)(13.44)(581.44)--
test-json-serialize-forceslow9.519.809.90(12.04)2.409.14--
test-json-serialize-hex1.541.541.57-----
test-json-serialize-indented-deep1001.381.44(1.95)(2.70)(1.60)(149.64)--
test-json-serialize-indented-deep253.173.603.62(3.84)(11.84)(280.97)--
test-json-serialize-indented-deep5000.940.94(1.34)(1.64)----
test-json-serialize-indented5.576.12(6.51)(7.06)(16.33)(108.33)--
test-json-serialize6.406.496.38(6.69)2.37(9.06)-0.65
test-json-serialize-jsonrpc-message3.113.283.333.32----
test-json-serialize-nofrac0.620.66(0.68)(0.78)(1.74)(7.26)--
test-json-serialize-plainbuf2.552.52(31.25)0.07----
test-json-serialize-slowpath-loop3.423.76(4.63)(6.54)-(11.18)--
test-json-string-bench2.803.19(3.76)(5.54)(53.98)---
test-json-string-stringify10.0510.1510.1010.40(11.67)--0.54
test-jx-serialize-bufobj-forceslow4.114.48(5.13)(6.26)----
test-jx-serialize-bufobj1.521.671.72(1.82)----
test-jx-serialize-indented3.043.483.54(3.86)----
test-jx-serialize2.082.24(2.38)(2.63)----
test-mandel2.943.15(3.74)(4.38)(15.22)(14.56)1.96-
test-math-clz322.21-------
test-misc-1dcell3.703.93(4.29)(4.86)(127.98)(8.58)--
test-object-garbage-22.613.63(5.38)(5.43)(54.54)3.31--
test-object-garbage(4.05)3.33(5.17)(5.47)2.682.78(4.18)0.86
test-object-literal-1007.1013.97(22.64)(20.43)(30.28)12.54--
test-object-literal-201.622.51(3.24)(2.82)(4.30)2.27--
test-object-literal-30.360.42(0.61)(0.57)(0.52)0.39--
test-prop-read-10243.313.61(3.97)(5.17)(6.82)(4.46)--
test-prop-read-163.323.65(4.07)(5.48)(4.48)(4.43)--
test-prop-read-2563.273.62(4.38)(5.37)(8.29)(4.43)--
test-prop-read-323.323.63(3.98)(5.19)(5.62)(4.44)--
test-prop-read-483.343.63(3.98)(5.27)(6.52)(4.42)--
test-prop-read-43.433.523.58(4.77)(4.00)(4.42)--
test-prop-read-643.313.62(4.00)(5.34)(6.52)(4.34)--
test-prop-read-83.323.623.70(4.98)(4.93)(4.43)--
test-prop-read-inherited4.765.185.11(6.60)4.75(9.40)--
test-prop-read3.443.703.60(4.79)(3.96)(4.43)1.112.58
test-prop-write-10243.143.30(4.69)(4.97)(10.39)(5.26)--
test-prop-write-163.203.36(4.13)(5.05)(4.46)(5.27)--
test-prop-write-2563.143.30(4.06)(4.96)(8.21)(5.32)--
test-prop-write-323.183.46(4.02)(5.09)(5.52)(5.32)--
test-prop-write-483.223.34(4.04)(4.98)(6.57)(5.29)--
test-prop-write-43.203.45(3.69)(4.38)(3.93)(5.30)--
test-prop-write-643.213.30(4.09)(5.60)(6.55)(5.32)--
test-prop-write-83.163.30(3.84)(4.52)(4.92)(5.26)--
test-prop-write3.253.62(3.83)(4.46)(3.95)(5.28)1.412.71
test-proxy-get1.622.00(2.17)(2.56)----
test-random1.612.25(2.50)(6.86)1.142.14--
test-reflect-ownkeys-sorted1.111.12(1.37)-----
test-reflect-ownkeys-unsorted1.121.14(1.37)-----
test-regexp-case-insensitive-compile0.7128.4027.7025.660.000.00--
test-regexp-case-insensitive-execute1.692.072.051.89(46.32)0.12--
test-regexp-case-sensitive-compile1.821.91(2.25)(2.79)0.900.66--
test-regexp-case-sensitive-execute1.591.64(1.96)(2.55)0.651.60--
test-regexp-compile2.452.56(2.92)(3.67)2.020.57--
test-regexp-execute1.811.91(2.20)(2.81)(2.30)1.54--
test-regexp-string-parse8.088.088.25(13.23)---0.75
test-reg-readwrite-object4.544.60(5.24)4.70(10.75)(18.71)2.31-
test-reg-readwrite-plain2.873.08(4.37)3.05(10.85)(14.85)2.32(7.01)
test-strict-equals-fastint0.700.80(0.89)(1.56)(3.37)(4.18)--
test-strict-equals-nonfastint0.760.85(0.96)(1.67)(3.38)(5.62)--
test-string-array-concat6.666.70(7.74)(8.38)(320.63)-2.724.48
test-string-arridx1.812.15(2.30)(2.44)1.322.00--
test-string-charlen-ascii1.421.44(1.51)(1.69)(6.20)0.99--
test-string-charlen-nonascii3.383.343.32(3.53)(9.84)0.68--
test-string-compare2.633.13(3.30)(5.10)--(6.24)(12.66)
test-string-decodeuri5.535.745.595.332.98---
test-string-encodeuri5.406.086.265.765.06---
test-string-garbage4.495.16(6.46)(7.31)2.412.552.142.31
test-string-intern-grow20.780.80(2.28)(2.29)----
test-string-intern-grow5.105.14(26.30)(25.72)----
test-string-intern-grow-short24.294.73(6.30)(6.73)----
test-string-intern-grow-short4.454.84(15.58)(15.78)----
test-string-intern-match0.220.26(0.31)(0.32)----
test-string-intern-match-short1.982.28(3.42)(3.37)----
test-string-intern-miss0.390.41(1.46)(1.48)----
test-string-intern-miss-short2.342.66(4.22)(4.40)----
test-string-number-list0.720.82(1.39)(1.92)(9.56)---
test-string-plain-concat(0.60)0.56(1.12)(1.29)(1.26)(0.66)(0.76)0.00
test-string-scan-nonascii4.965.294.965.41(63.81)(19.89)--
test-string-uppercase3.333.523.553.58(6.19)--1.68
test-textdecoder-ascii(4.03)3.413.12-----
test-textdecoder-nonascii3.563.48(4.26)-----
test-textencoder-ascii6.876.986.92-----
test-textencoder-nonascii13.2714.28(15.00)-----
test-try-catch-nothrow(4.34)4.204.273.743.08(4.37)--
test-try-catch-throw36.5538.93(54.91)(56.57)30.0420.73--
test-try-finally-nothrow5.185.105.184.872.904.93--
test-try-finally-throw46.4662.60(73.86)(75.10)33.7226.64--

Duktape microbenchmarks, full

Baseline is duk.O2.210, compared to duk.O2.220. Lower is better, lowest of 5 runs.

duk-perf-pgo.O2.220duk-pgo.O2.220duk-perf.O2.220duk.O2.220duk.O2.210duk.O2.200duk.O2.150mujsjerryluapythonperlrubyluajitrhinonodejs
test-add-fastint0.490.590.650.670.74(0.86)(0.91)(4.37)(2.96)-----0.360.04
test-add-float0.560.650.600.710.69(0.87)(0.91)(4.40)(4.14)-----0.340.04
test-add-int0.530.590.660.700.72(0.86)(0.94)(4.47)(4.74)-----0.340.06
test-add-nan-fastint0.67(0.79)0.71(0.89)0.76(0.90)(0.99)(4.38)(3.49)-----0.330.05
test-add-nan0.550.640.600.700.70(0.86)(0.91)(4.38)(4.15)-----0.340.05
test-add-string13.8913.7613.9314.2616.86(17.97)(18.83)9.9713.22-----0.360.05
test-arith-add1.962.362.622.722.95(3.48)(3.74)(17.45)(16.58)-----0.500.05
test-arith-add-string1.371.381.371.401.70(1.82)(1.88)1.001.31-----0.580.04
test-arith-div6.938.127.617.697.92(8.42)(9.29)(12.20)(21.04)-----0.570.05
test-arith-mod6.957.226.326.877.357.52(8.76)(14.80)(25.42)-----5.390.06
test-arith-mul3.80(4.16)3.423.934.00(4.30)(5.13)(12.05)(16.42)-----0.540.05
test-arith-sub1.862.242.622.822.98(3.54)(3.96)(12.21)(16.92)-----0.530.06
test-array-append0.440.480.52(0.53)0.51(0.69)(0.76)(48.00)------(0.62)0.09
test-array-cons-list0.550.570.590.630.72(0.96)(2.60)(8.79)(2.22)-----0.400.08
test-array-foreach2.162.292.042.232.63(2.77)(3.00)(3.69)1.66-----0.840.32
test-array-literal-1002.562.762.602.614.42(6.46)(6.72)(446.78)3.92-----0.460.08
test-array-literal-200.650.690.680.661.11(1.73)(1.98)(59.65)0.91-----0.350.04
test-array-literal-30.260.260.250.260.31(0.50)(0.72)(6.15)0.24-----(0.33)0.04
test-array-pop1.181.341.551.662.06(2.44)(7.94)(51.24)(7.07)1.171.19--0.300.760.06
test-array-push1.611.711.922.022.30(2.70)(5.35)(8.52)(4.02)1.030.62--0.340.860.10
test-array-read1.761.921.841.962.00(2.30)(3.10)(236.50)(5.73)1.11(2.18)(3.48)1.680.000.390.04
test-array-read-lenloop1.511.712.042.142.16(2.43)(2.77)(123.30)(4.57)-----0.960.06
test-array-sort(3.61)(3.53)3.323.223.303.31(3.51)-(4.26)-----1.610.12
test-array-write1.641.821.881.901.94(2.24)(3.00)(255.16)(6.62)1.38(3.06)(3.56)(2.34)0.000.560.07
test-array-write-length1.341.381.631.601.80(1.91)(3.01)(3.67)(2.71)-----1.131.53
test-assign-add3.604.123.854.174.20(5.37)(6.04)(38.24)(25.02)3.48(16.02)(25.70)(9.59)0.003.490.04
test-assign-addto3.634.143.884.184.19(5.33)(6.08)(37.46)(30.29)3.49(17.09)(24.98)(9.58)1.003.880.90
test-assign-addto-nan1.101.211.15(1.43)1.21(1.44)(1.64)(8.07)(6.44)-----0.390.30
test-assign-boolean5.105.135.105.145.145.185.22(10.35)(20.94)-----0.360.05
test-assign-const-int24.65(6.32)5.606.156.05(8.40)(10.02)(10.61)(12.75)-----0.360.05
test-assign-const-int2.272.702.923.013.00(4.20)3.07(10.53)(12.80)2.53(5.95)(25.04)(4.87)0.000.400.04
test-assign-const3.534.484.004.185.22(5.70)4.43(10.74)(18.82)2.55(5.97)(25.72)4.860.000.360.04
test-assign-literal3.88(4.54)3.82(4.42)4.23(5.40)(4.73)(10.89)(23.24)2.74(13.35)-(4.79)0.000.350.04
test-assign-proplhs-reg2.492.512.642.682.91(3.21)(4.06)2.65(5.62)-----2.040.07
test-assign-proprhs2.012.072.812.853.04(3.21)(4.29)2.66(3.98)-----1.110.04
test-assign-reg2.563.033.203.273.41(4.80)3.36(9.68)(17.20)2.52(5.97)(25.75)(5.18)0.000.330.04
test-base64-decode1.741.731.731.731.741.68----(8.71)-----
test-base64-decode-whitespace2.212.262.221.942.202.10----(8.64)-----
test-base64-encode(2.07)(2.08)1.861.871.871.86----(20.67)-----
test-bitwise-ops1.581.881.691.902.05(2.40)(2.50)(14.86)(21.80)-----(33.44)0.04
test-break-fast0.841.141.121.231.54(1.82)(1.59)1.311.41-----0.350.06
test-break-slow6.387.196.627.448.48(9.45)(9.19)2.844.60-----0.300.38
test-buffer-nodejs-read2.36(2.60)2.342.392.52(2.83)(2.88)--------0.04
test-buffer-nodejs-write(3.80)(4.08)3.103.123.28(3.54)(3.47)--------0.08
test-buffer-object-read2.34(2.64)2.362.412.52(2.86)(2.90)--------0.04
test-buffer-object-write(3.82)(4.16)3.133.183.38(3.55)3.45--------0.07
test-buffer-plain-read1.842.041.921.962.04(2.37)(2.40)---------
test-buffer-plain-write1.701.871.891.932.02(2.30)(2.19)---------
test-call-apply1.741.762.232.374.29(4.72)(5.52)2.522.50-----2.180.35
test-call-basic-14.494.706.116.367.52(8.44)(9.69)6.27(9.65)2.165.60(8.24)2.470.001.510.04
test-call-basic-24.484.736.186.517.56(8.50)(9.62)4.60(8.83)-----1.820.03
test-call-basic-36.316.887.958.349.65(10.67)(15.86)(12.96)(15.18)-----1.870.27
test-call-basic-415.8115.1916.4517.5619.46(21.38)(38.86)(42.82)(40.11)-----1.760.63
test-call-bound-deep2.642.742.932.9827.79(30.35)(33.85)-4.45-----4.31-
test-call-bound2.582.622.762.845.53(6.87)(7.64)-2.02-----1.44-
test-call-call1.551.521.942.133.13(3.59)(4.22)1.571.73-----2.020.10
test-call-native10.5711.2310.2411.3112.90(13.89)(14.66)(16.99)8.60-----1.651.54
test-call-prop2.542.643.743.924.43(4.90)(6.06)3.16(4.69)-----1.390.26
test-call-proxy-apply-123.8825.4226.4126.93------------
test-call-proxy-pass-19.4110.2413.0413.81------------
test-call-reg1.791.862.442.543.00(3.38)(3.85)2.48(3.84)-----0.990.04
test-call-reg-new4.254.394.744.925.96(6.98)(7.23)3.003.38-----1.550.13
test-call-tail-11.250.770.921.041.34(1.67)(2.40)-(1.82)-----0.660.08
test-call-tail-21.360.921.011.162.46(2.80)(3.52)-1.99-----0.860.18
test-call-var3.083.165.355.506.17(8.67)(8.74)4.874.33-----1.050.04
test-closure-inner-functions1.101.211.171.271.33(1.82)(2.59)0.700.26-----1.200.03
test-compile-mandel13.3113.3413.1113.1213.44(14.50)(17.05)6.452.40-----9.130.05
test-compile-mandel-nofrac10.2910.3310.0610.0610.31(11.52)(14.02)6.462.40-----8.860.10
test-compile-short5.195.695.305.675.84(7.04)(9.73)2.320.97-----4.210.21
test-compile-string-ascii7.057.02(7.81)(7.93)7.016.99(9.82)6.89------(7.34)0.04
test-continue-fast1.461.581.861.552.06(2.25)2.06(2.16)(2.60)-----0.400.04
test-continue-slow6.987.367.347.748.78(10.00)(9.26)3.666.56-----0.390.45
test-empty-loop1.281.51(1.98)1.781.84(2.42)(2.38)(6.40)(3.59)1.17(5.14)(3.66)(4.26)0.140.650.09
test-empty-loop-slowpath0.800.890.920.971.10(1.81)(2.39)1.080.71-----0.620.06
test-empty-loop-step31.361.56(2.00)1.821.93(2.49)(2.49)(8.05)(7.07)-----0.620.11
test-enum-basic2.963.133.263.263.35(4.34)(4.95)0.711.16-----1.49(5.64)
test-equals-fastint0.550.560.570.570.65(0.71)(1.23)(2.58)(3.36)-----(0.92)0.04
test-equals-nonfastint0.66(0.71)0.570.640.66(0.76)(1.34)(2.58)(4.75)-----(0.87)0.06
test-error-create1.111.161.501.601.72(2.37)(3.72)(5.09)0.86-----1.06(3.58)
test-fib-22.022.273.183.203.67(4.08)(4.70)3.68(5.95)-----0.740.18
test-fib2.703.045.605.906.49(8.36)(8.62)3.625.751.442.90(7.43)1.280.301.030.17
test-func-bind2.072.152.152.183.26(4.14)(4.27)-1.01-----2.122.63
test-global-lookup4.474.466.096.166.89(9.00)(11.81)4.532.75-----1.280.05
test-hello-world0.000.000.000.000.000.000.000.000.000.000.000.000.020.000.240.04
test-hex-decode4.024.044.064.014.014.014.01---(13.28)-----
test-hex-encode(3.36)(3.38)3.183.213.213.22----1.62-----
test-jc-serialize-indented(7.03)(7.02)3.143.173.843.623.93---------
test-jc-serialize2.342.302.202.152.38(2.50)(2.76)---------
test-json-parse-hex(4.56)(4.51)3.523.473.523.51----------
test-json-parse-integer2.97(3.13)2.972.902.96(4.10)(4.35)(23.51)--0.09---2.180.35
test-json-parse-number(5.53)5.365.045.095.235.135.302.70--0.40---1.240.21
test-json-parse-string5.135.165.215.235.21(5.75)(5.46)(51.66)------(34.30)(10.78)
test-json-serialize-fastpath-loop(6.63)(6.66)3.273.323.60(4.02)(4.00)(13.44)(581.44)-----(126.39)(33.02)
test-json-serialize-forceslow(10.86)(10.79)9.489.519.809.90(12.04)2.409.14-----6.270.81
test-json-serialize-hex(1.62)(1.65)1.551.541.541.57----------
test-json-serialize-indented-deep100(1.74)(1.72)1.361.381.44(1.95)(2.70)(1.60)(149.64)-----(43.64)0.80
test-json-serialize-indented-deep25(7.34)(7.48)3.233.173.603.62(3.84)(11.84)(280.97)-----(75.34)(11.56)
test-json-serialize-indented-deep500(1.08)(1.05)0.920.940.94(1.34)(1.64)--------0.82
test-json-serialize-indented(25.14)(21.47)5.575.576.12(6.51)(7.06)(16.33)(108.33)-----(28.72)(26.86)
test-json-serialize(7.76)(7.66)6.426.406.496.38(6.69)2.37(9.06)-0.65---6.520.81
test-json-serialize-jsonrpc-message2.001.992.993.113.283.333.32---------
test-json-serialize-nofrac0.640.660.610.620.66(0.68)(0.78)(1.74)(7.26)-----(5.20)(0.71)
test-json-serialize-plainbuf2.482.492.492.552.52(31.25)0.07---------
test-json-serialize-slowpath-loop3.80(3.90)3.333.423.76(4.63)(6.54)-(11.18)-----(14.26)(3.93)
test-json-string-bench2.252.282.662.803.19(3.76)(5.54)(53.98)------3.020.19
test-json-string-stringify5.145.209.4210.0510.1510.1010.40(11.67)--0.54---(19.05)5.40
test-jx-serialize-bufobj-forceslow3.783.904.014.114.48(5.13)(6.26)---------
test-jx-serialize-bufobj1.561.521.471.521.671.72(1.82)---------
test-jx-serialize-indented(7.22)(7.12)3.073.043.483.54(3.86)---------
test-jx-serialize(2.34)(2.37)1.982.082.24(2.38)(2.63)---------
test-mandel2.292.642.932.943.15(3.74)(4.38)(15.22)(14.56)1.96---0.191.760.24
test-math-clz321.641.792.042.21-----------0.04
test-misc-1dcell3.203.523.703.703.93(4.29)(4.86)(127.98)(8.58)-----3.200.26
test-object-garbage-22.512.592.582.613.63(5.38)(5.43)(54.54)3.31-----2.960.64
test-object-garbage(3.85)(3.98)(3.87)(4.05)3.33(5.17)(5.47)2.682.78(4.18)0.86--0.001.040.46
test-object-literal-1006.777.227.127.1013.97(22.64)(20.43)(30.28)12.54-----7.882.39
test-object-literal-201.531.621.601.622.51(3.24)(2.82)(4.30)2.27-----1.680.57
test-object-literal-30.320.350.350.360.42(0.61)(0.57)(0.52)0.39-----(0.58)0.04
test-prop-read-10242.432.493.253.313.61(3.97)(5.17)(6.82)(4.46)-----0.900.43
test-prop-read-162.442.493.243.323.65(4.07)(5.48)(4.48)(4.43)-----0.760.03
test-prop-read-2562.442.493.253.273.62(4.38)(5.37)(8.29)(4.43)-----0.900.38
test-prop-read-322.432.503.263.323.63(3.98)(5.19)(5.62)(4.44)-----0.830.39
test-prop-read-482.432.513.263.343.63(3.98)(5.27)(6.52)(4.42)-----0.790.39
test-prop-read-42.342.463.213.433.523.58(4.77)(4.00)(4.42)-----0.780.04
test-prop-read-642.432.523.243.313.62(4.00)(5.34)(6.52)(4.34)-----0.860.40
test-prop-read-82.432.483.263.323.623.70(4.98)(4.93)(4.43)-----0.780.05
test-prop-read-inherited2.722.834.484.765.185.11(6.60)4.75(9.40)-----1.220.04
test-prop-read2.362.523.283.443.703.60(4.79)(3.96)(4.43)1.112.58(4.70)(3.95)0.000.660.04
test-prop-write-10242.922.963.143.143.30(4.69)(4.97)(10.39)(5.26)-----2.270.44
test-prop-write-162.983.043.293.203.36(4.13)(5.05)(4.46)(5.27)-----2.120.07
test-prop-write-2562.953.063.203.143.30(4.06)(4.96)(8.21)(5.32)-----2.260.39
test-prop-write-322.922.963.183.183.46(4.02)(5.09)(5.52)(5.32)-----2.090.39
test-prop-write-482.962.973.173.223.34(4.04)(4.98)(6.57)(5.29)-----2.070.39
test-prop-write-42.963.093.213.203.45(3.69)(4.38)(3.93)(5.30)-----2.080.04
test-prop-write-642.902.973.143.213.30(4.09)(5.60)(6.55)(5.32)-----2.290.38
test-prop-write-82.962.963.163.163.30(3.84)(4.52)(4.92)(5.26)-----2.120.08
test-prop-write3.043.123.043.253.62(3.83)(4.46)(3.95)(5.28)1.412.71(4.88)(5.28)0.001.940.08
test-proxy-get1.411.501.531.622.00(2.17)(2.56)---------
test-random1.151.261.541.612.25(2.50)(6.86)1.142.14-----1.690.47
test-reflect-ownkeys-sorted-1.05-1.111.12(1.37)----------
test-reflect-ownkeys-unsorted-1.10-1.121.14(1.37)----------
test-regexp-case-insensitive-compile0.000.830.000.7128.4027.7025.660.000.00-----0.26-
test-regexp-case-insensitive-execute1.752.001.541.692.072.051.89(46.32)0.12-------
test-regexp-case-sensitive-compile(1.99)1.76(2.02)1.821.91(2.25)(2.79)0.900.66-----0.96-
test-regexp-case-sensitive-execute1.661.54(1.72)1.591.64(1.96)(2.55)0.651.60-----1.26-
test-regexp-compile(2.68)2.602.442.452.56(2.92)(3.67)2.020.57-----1.760.22
test-regexp-execute1.681.701.791.811.91(2.20)(2.81)(2.30)1.54-----1.910.10
test-regexp-string-parse(14.20)(14.23)8.008.088.088.25(13.23)---0.75----0.82
test-reg-readwrite-object4.124.514.104.544.60(5.24)4.70(10.75)(18.71)2.31-(42.13)(5.34)0.000.700.04
test-reg-readwrite-plain2.342.732.882.873.08(4.37)3.05(10.85)(14.85)2.32(7.01)(45.25)(5.37)0.000.680.03
test-strict-equals-fastint0.680.700.680.700.80(0.89)(1.56)(3.37)(4.18)-----(1.06)0.04
test-strict-equals-nonfastint0.740.870.730.760.85(0.96)(1.67)(3.38)(5.62)-----(1.08)0.07
test-string-array-concat6.246.486.756.666.70(7.74)(8.38)(320.63)-2.724.48(10.18)(8.36)1.142.750.53
test-string-arridx1.781.761.791.812.15(2.30)(2.44)1.322.00-----0.440.04
test-string-charlen-ascii1.401.401.401.421.44(1.51)(1.69)(6.20)0.99-----0.480.03
test-string-charlen-nonascii(3.51)3.27(3.47)3.383.343.32(3.53)(9.84)0.68-----0.530.04
test-string-compare2.572.732.542.633.13(3.30)(5.10)--(6.24)(12.66)(24.32)(6.70)0.14(6.58)1.14
test-string-decodeuri5.65(6.16)5.235.535.745.595.332.98------3.085.73
test-string-encodeuri6.005.955.265.406.086.265.765.06------(8.07)(30.98)
test-string-garbage4.514.564.384.495.16(6.46)(7.31)2.412.552.142.31--1.791.240.04
test-string-intern-grow20.740.740.750.780.80(2.28)(2.29)---------
test-string-intern-grow5.125.285.145.105.14(26.30)(25.72)---------
test-string-intern-grow-short24.064.184.124.294.73(6.30)(6.73)---------
test-string-intern-grow-short4.204.284.274.454.84(15.58)(15.78)---------
test-string-intern-match0.210.220.220.220.26(0.31)(0.32)---------
test-string-intern-match-short1.841.911.861.982.28(3.42)(3.37)---------
test-string-intern-miss0.350.380.360.390.41(1.46)(1.48)---------
test-string-intern-miss-short2.232.292.222.342.66(4.22)(4.40)---------
test-string-number-list0.580.600.700.720.82(1.39)(1.92)(9.56)------(1.65)0.16
test-string-plain-concat(0.58)(0.59)(0.60)(0.60)0.56(1.12)(1.29)(1.26)(0.66)(0.76)0.000.540.56(0.80)0.450.04
test-string-scan-nonascii5.165.434.804.965.294.965.41(63.81)(19.89)-----2.040.03
test-string-uppercase(3.76)(3.86)3.363.333.523.553.58(6.19)--1.68---2.170.13
test-textdecoder-ascii3.053.063.30(4.03)3.413.12----------
test-textdecoder-nonascii(4.09)(4.08)(3.81)3.563.48(4.26)----------
test-textencoder-ascii(7.21)(7.19)6.566.876.986.92----------
test-textencoder-nonascii(17.04)(17.47)13.1913.2714.28(15.00)----------
test-try-catch-nothrow3.874.184.13(4.34)4.204.273.743.08(4.37)-----0.410.12
test-try-catch-throw33.6035.8135.0536.5538.93(54.91)(56.57)30.0420.73-----(192.82)(103.57)
test-try-finally-nothrow4.425.044.485.185.105.184.872.904.93-----0.410.46
test-try-finally-throw42.9445.1644.7646.4662.60(73.86)(75.10)33.7226.64-----(197.95)(169.44)

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.