diff --git a/Jint.Benchmark/EngineComparisonBenchmark.cs b/Jint.Benchmark/EngineComparisonBenchmark.cs index ecaf7d2aa6..2277284711 100644 --- a/Jint.Benchmark/EngineComparisonBenchmark.cs +++ b/Jint.Benchmark/EngineComparisonBenchmark.cs @@ -1,5 +1,6 @@ using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Configs; +using BenchmarkDotNet.Order; using Esprima; using Esprima.Ast; @@ -7,6 +8,7 @@ namespace Jint.Benchmark; [RankColumn] [MemoryDiagnoser] +[Orderer(SummaryOrderPolicy.FastestToSlowest)] [GroupBenchmarksBy(BenchmarkLogicalGroupRule.ByParams)] [HideColumns("Error", "Gen0", "Gen1", "Gen2")] [BenchmarkCategory("EngineComparison")] diff --git a/Jint.Benchmark/Jint.Benchmark.csproj b/Jint.Benchmark/Jint.Benchmark.csproj index a29e3894d7..fa88bf720e 100644 --- a/Jint.Benchmark/Jint.Benchmark.csproj +++ b/Jint.Benchmark/Jint.Benchmark.csproj @@ -24,10 +24,10 @@ - + - - + + \ No newline at end of file diff --git a/Jint.Benchmark/README.md b/Jint.Benchmark/README.md index a2867e9a37..38bb387ce5 100644 --- a/Jint.Benchmark/README.md +++ b/Jint.Benchmark/README.md @@ -9,91 +9,93 @@ dotnet run -c Release --allCategories EngineComparison * tests are run in global engine strict mode, as YantraJS always uses strict mode which improves performance * `Jint` and `Jint_ParsedScript` shows the difference between always parsing the script source file and reusing parsed `Script` instance. -Last updated 2023-03-26 +Last updated 2023-08-26 * Jint main * Jurassic 3.2.6 -* NiL.JS 2.5.1650 -* YantraJS.Core 1.2.117 +* NiL.JS 2.5.1665 +* YantraJS.Core 1.2.179 -``` ini +``` -BenchmarkDotNet=v0.13.5, OS=Windows 11 (10.0.22621.1483/22H2/2022Update/SunValley2) +BenchmarkDotNet v0.13.7, Windows 11 (10.0.23526.1000) AMD Ryzen 9 5950X, 1 CPU, 32 logical and 16 physical cores -.NET SDK=7.0.202 - [Host] : .NET 6.0.15 (6.0.1523.11507), X64 RyuJIT AVX2 - DefaultJob : .NET 6.0.15 (6.0.1523.11507), X64 RyuJIT AVX2 +.NET SDK 8.0.100-preview.7.23376.3 + [Host] : .NET 6.0.21 (6.0.2123.36311), X64 RyuJIT AVX2 + DefaultJob : .NET 6.0.21 (6.0.2123.36311), X64 RyuJIT AVX2 ``` -| Method | FileName | Mean | StdDev | Rank | Allocated | -|------------------ |--------------------- |-----------------:|---------------:|-----:|--------------:| -| **Jint** | **array-stress** | **10,799.249 μs** | **24.4948 μs** | **4** | **7473326 B** | -| Jint_ParsedScript | array-stress | 10,568.342 μs | 44.6133 μs | 3 | 7446494 B | -| Jurassic | array-stress | 11,280.104 μs | 27.9486 μs | 5 | 11926463 B | -| NilJS | array-stress | 5,600.761 μs | 74.2339 μs | 2 | 4241527 B | -| YantraJS | array-stress | 4,891.973 μs | 18.8130 μs | 1 | 6518316 B | -| | | | | | | -| **Jint** | **dromaeo-3d-cube** | **25,234.322 μs** | **28.3103 μs** | **4** | **6307004 B** | -| Jint_ParsedScript | dromaeo-3d-cube | 24,227.022 μs | 30.4230 μs | 3 | 6000208 B | -| Jurassic | dromaeo-3d-cube | 40,155.874 μs | 83.9446 μs | 5 | 10925739 B | -| NilJS | dromaeo-3d-cube | 9,203.608 μs | 18.2137 μs | 2 | 4671638 B | -| YantraJS | dromaeo-3d-cube | 4,478.599 μs | 35.6857 μs | 1 | 8885293 B | -| | | | | | | -| **Jint** | **dromaeo-core-eval** | **5,496.472 μs** | **20.8861 μs** | **2** | **359439 B** | -| Jint_ParsedScript | dromaeo-core-eval | 5,555.814 μs | 29.8913 μs | 2 | 339647 B | -| Jurassic | dromaeo-core-eval | 13,739.640 μs | 52.5257 μs | 4 | 2971062 B | -| NilJS | dromaeo-core-eval | 2,099.576 μs | 13.3939 μs | 1 | 1637011 B | -| YantraJS | dromaeo-core-eval | 8,068.664 μs | 41.8267 μs | 3 | 37131162 B | -| | | | | | | -| **Jint** | **dromaeo-object-array** | **68,157.350 μs** | **106.5991 μs** | **4** | **103974805 B** | -| Jint_ParsedScript | dromaeo-object-array | 70,379.819 μs | 412.9971 μs | 5 | 103928047 B | -| Jurassic | dromaeo-object-array | 41,917.036 μs | 147.6689 μs | 1 | 26433545 B | -| NilJS | dromaeo-object-array | 50,941.149 μs | 116.1891 μs | 3 | 16518497 B | -| YantraJS | dromaeo-object-array | 43,952.908 μs | 52.7966 μs | 2 | 25538081 B | -| | | | | | | -| **Jint** | **droma(...)egexp [21]** | **202,513.639 μs** | **6,280.4683 μs** | **2** | **169538072 B** | -| Jint_ParsedScript | droma(...)egexp [21] | 194,203.576 μs | 2,648.5440 μs | 1 | 176401621 B | -| Jurassic | droma(...)egexp [21] | 673,099.103 μs | 19,449.6381 μs | 4 | 845159056 B | -| NilJS | droma(...)egexp [21] | 498,404.131 μs | 9,389.0173 μs | 3 | 785342384 B | -| YantraJS | droma(...)egexp [21] | 1,021,021.213 μs | 10,171.5386 μs | 5 | 965363992 B | -| | | | | | | -| **Jint** | **droma(...)tring [21]** | **513,139.116 μs** | **21,598.0545 μs** | **2** | **1353627632 B** | -| Jint_ParsedScript | droma(...)tring [21] | 598,346.054 μs | 62,241.8961 μs | 4 | 1353603760 B | -| Jurassic | droma(...)tring [21] | 547,882.282 μs | 15,131.8012 μs | 3 | 1492956848 B | -| NilJS | droma(...)tring [21] | 380,880.402 μs | 17,953.6040 μs | 1 | 1410785672 B | -| YantraJS | droma(...)tring [21] | 3,146,801.586 μs | 75,534.4740 μs | 5 | 16097426568 B | -| | | | | | | -| **Jint** | **droma(...)ase64 [21]** | **54,972.605 μs** | **123.8465 μs** | **3** | **6764151 B** | -| Jint_ParsedScript | droma(...)ase64 [21] | 53,534.261 μs | 272.9451 μs | 2 | 6665682 B | -| Jurassic | droma(...)ase64 [21] | 69,111.283 μs | 166.1184 μs | 4 | 76105181 B | -| NilJS | droma(...)ase64 [21] | 40,131.392 μs | 385.5791 μs | 1 | 20074818 B | -| YantraJS | droma(...)ase64 [21] | 108,860.979 μs | 697.7800 μs | 5 | 778591469 B | -| | | | | | | -| **Jint** | **evaluation** | **28.773 μs** | **0.0494 μs** | **2** | **36792 B** | -| Jint_ParsedScript | evaluation | 11.296 μs | 0.0295 μs | 1 | 27072 B | -| Jurassic | evaluation | 1,291.843 μs | 3.3295 μs | 5 | 430510 B | -| NilJS | evaluation | 45.473 μs | 0.1385 μs | 3 | 24032 B | -| YantraJS | evaluation | 120.995 μs | 0.3959 μs | 4 | 177876 B | -| | | | | | | -| **Jint** | **linq-js** | **1,774.118 μs** | **8.6162 μs** | **2** | **1303058 B** | -| Jint_ParsedScript | linq-js | 90.567 μs | 0.2234 μs | 1 | 213218 B | -| Jurassic | linq-js | 39,199.309 μs | 614.5447 μs | 4 | 9525761 B | -| NilJS | linq-js | 7,630.382 μs | 11.3679 μs | 3 | 4226480 B | -| YantraJS | linq-js | NA | NA | ? | - | -| | | | | | | -| **Jint** | **minimal** | **4.937 μs** | **0.0103 μs** | **3** | **14664 B** | -| Jint_ParsedScript | minimal | 3.124 μs | 0.0123 μs | 1 | 13168 B | -| Jurassic | minimal | 238.384 μs | 0.6775 μs | 5 | 395506 B | -| NilJS | minimal | 4.751 μs | 0.0103 μs | 2 | 4928 B | -| YantraJS | minimal | 117.579 μs | 0.5920 μs | 4 | 173770 B | -| | | | | | | -| **Jint** | **stopwatch** | **368,697.936 μs** | **1,043.7863 μs** | **4** | **52946080 B** | -| Jint_ParsedScript | stopwatch | 408,149.533 μs | 1,052.2644 μs | 5 | 52912288 B | -| Jurassic | stopwatch | 211,731.362 μs | 544.2606 μs | 2 | 160704435 B | -| NilJS | stopwatch | 238,188.624 μs | 480.6546 μs | 3 | 76378157 B | -| YantraJS | stopwatch | 78,043.391 μs | 228.5660 μs | 1 | 264535415 B | +| Method | FileName | Mean | StdDev | Median | Rank | Allocated | +|------------------ |--------------------- |-----------------:|---------------:|-----------------:|-----:|---------------:| +| YantraJS | array-stress | 6,360.421 μs | 39.2532 μs | 6,346.987 μs | 1 | 6533.08 KB | +| NilJS | array-stress | 7,594.830 μs | 6.8696 μs | 7,594.891 μs | 2 | 4533.76 KB | +| Jint_ParsedScript | array-stress | 12,321.976 μs | 41.5024 μs | 12,311.202 μs | 3 | 7325.34 KB | +| Jint | array-stress | 12,896.109 μs | 24.0839 μs | 12,904.002 μs | 4 | 7351.4 KB | +| Jurassic | array-stress | 13,643.998 μs | 36.4728 μs | 13,645.225 μs | 5 | 11646.95 KB | +| | | | | | | | +| YantraJS | dromaeo-3d-cube | NA | NA | NA | ? | NA | +| NilJS | dromaeo-3d-cube | 11,078.065 μs | 32.6056 μs | 11,078.430 μs | 1 | 4694.63 KB | +| Jint_ParsedScript | dromaeo-3d-cube | 27,538.547 μs | 21.0085 μs | 27,542.325 μs | 2 | 5894.78 KB | +| Jint | dromaeo-3d-cube | 29,227.861 μs | 29.7231 μs | 29,234.744 μs | 3 | 6191.02 KB | +| Jurassic | dromaeo-3d-cube | 49,266.621 μs | 38.0955 μs | 49,275.191 μs | 4 | 10670.07 KB | +| | | | | | | | +| NilJS | dromaeo-core-eval | 2,547.799 μs | 16.9047 μs | 2,544.029 μs | 1 | 1598.78 KB | +| Jint | dromaeo-core-eval | 6,033.234 μs | 23.6963 μs | 6,029.259 μs | 2 | 350.31 KB | +| Jint_ParsedScript | dromaeo-core-eval | 6,354.661 μs | 18.2832 μs | 6,358.318 μs | 3 | 331.04 KB | +| YantraJS | dromaeo-core-eval | 14,868.177 μs | 75.1307 μs | 14,881.377 μs | 4 | 36547.42 KB | +| Jurassic | dromaeo-core-eval | 16,881.914 μs | 72.9966 μs | 16,868.537 μs | 5 | 2901.41 KB | +| | | | | | | | +| Jurassic | dromaeo-object-array | 50,399.972 μs | 121.5049 μs | 50,459.509 μs | 1 | 25814.38 KB | +| YantraJS | dromaeo-object-array | 58,713.845 μs | 154.1033 μs | 58,743.822 μs | 2 | 24746.02 KB | +| NilJS | dromaeo-object-array | 75,795.976 μs | 182.1901 μs | 75,715.586 μs | 3 | 17698.65 KB | +| Jint_ParsedScript | dromaeo-object-array | 79,322.327 μs | 295.9502 μs | 79,192.271 μs | 4 | 101708 KB | +| Jint | dromaeo-object-array | 81,229.940 μs | 237.5029 μs | 81,198.414 μs | 5 | 101752.41 KB | +| | | | | | | | +| Jint | droma(...)egexp [21] | 288,906.167 μs | 1,776.7311 μs | 289,018.300 μs | 1 | 169007.87 KB | +| Jint_ParsedScript | droma(...)egexp [21] | 289,023.327 μs | 1,517.1091 μs | 289,067.800 μs | 1 | 165939.27 KB | +| NilJS | droma(...)egexp [21] | 583,740.110 μs | 20,290.0443 μs | 587,463.500 μs | 2 | 768793.7 KB | +| Jurassic | droma(...)egexp [21] | 785,522.167 μs | 11,926.7512 μs | 788,528.200 μs | 3 | 823080.8 KB | +| YantraJS | droma(...)egexp [21] | 1,178,144.807 μs | 17,865.7500 μs | 1,176,090.200 μs | 4 | 941782.16 KB | +| | | | | | | | +| NilJS | droma(...)tring [21] | 425,905.039 μs | 14,531.9347 μs | 426,035.700 μs | 1 | 1377707.63 KB | +| Jint_ParsedScript | droma(...)tring [21] | 549,029.120 μs | 8,245.6783 μs | 547,989.000 μs | 2 | 1321921.34 KB | +| Jint | droma(...)tring [21] | 553,627.706 μs | 10,819.0707 μs | 552,726.750 μs | 2 | 1322005.7 KB | +| Jurassic | droma(...)tring [21] | 642,206.698 μs | 25,867.5511 μs | 641,335.400 μs | 3 | 1457796.63 KB | +| YantraJS | droma(...)tring [21] | 3,901,597.456 μs | 81,299.4459 μs | 3,916,357.100 μs | 4 | 15718534.71 KB | +| | | | | | | | +| NilJS | droma(...)ase64 [21] | 50,276.768 μs | 1,992.1329 μs | 49,340.727 μs | 1 | 19604.83 KB | +| Jint | droma(...)ase64 [21] | 64,565.981 μs | 230.3955 μs | 64,506.588 μs | 2 | 6772.58 KB | +| Jint_ParsedScript | droma(...)ase64 [21] | 66,338.678 μs | 129.0407 μs | 66,369.438 μs | 3 | 6679.31 KB | +| Jurassic | droma(...)ase64 [21] | 84,508.131 μs | 506.0241 μs | 84,571.917 μs | 4 | 74320.32 KB | +| YantraJS | droma(...)ase64 [21] | 239,032.513 μs | 3,898.7168 μs | 239,247.600 μs | 5 | 760629.53 KB | +| | | | | | | | +| Jint_ParsedScript | evaluation | 13.721 μs | 0.1984 μs | 13.786 μs | 1 | 26.46 KB | +| Jint | evaluation | 35.682 μs | 0.2331 μs | 35.756 μs | 2 | 35.89 KB | +| NilJS | evaluation | 56.541 μs | 0.1248 μs | 56.570 μs | 3 | 23.47 KB | +| YantraJS | evaluation | 126.621 μs | 1.1108 μs | 126.187 μs | 4 | 462.57 KB | +| Jurassic | evaluation | 1,605.885 μs | 2.3966 μs | 1,606.122 μs | 5 | 420.43 KB | +| | | | | | | | +| YantraJS | linq-js | NA | NA | NA | ? | NA | +| Jint_ParsedScript | linq-js | 113.809 μs | 0.5890 μs | 113.593 μs | 1 | 215.13 KB | +| Jint | linq-js | 2,187.604 μs | 12.6731 μs | 2,185.110 μs | 2 | 1274.64 KB | +| NilJS | linq-js | 9,493.053 μs | 33.7377 μs | 9,491.281 μs | 3 | 4127.79 KB | +| Jurassic | linq-js | 44,801.018 μs | 208.9110 μs | 44,823.467 μs | 4 | 9302.34 KB | +| | | | | | | | +| Jint_ParsedScript | minimal | 3.125 μs | 0.0082 μs | 3.127 μs | 1 | 12.9 KB | +| Jint | minimal | 5.232 μs | 0.0147 μs | 5.234 μs | 2 | 14.34 KB | +| NilJS | minimal | 5.843 μs | 0.0202 μs | 5.849 μs | 3 | 4.81 KB | +| YantraJS | minimal | 119.582 μs | 1.0827 μs | 119.368 μs | 4 | 458.56 KB | +| Jurassic | minimal | 298.007 μs | 1.1400 μs | 297.656 μs | 5 | 386.24 KB | +| | | | | | | | +| YantraJS | stopwatch | 112,161.224 μs | 501.5021 μs | 112,087.480 μs | 1 | 258625.02 KB | +| Jurassic | stopwatch | 248,439.620 μs | 1,195.5678 μs | 248,153.650 μs | 2 | 156937.52 KB | +| NilJS | stopwatch | 294,873.720 μs | 1,418.7155 μs | 295,459.700 μs | 3 | 97361.41 KB | +| Jint_ParsedScript | stopwatch | 440,364.013 μs | 2,096.2881 μs | 440,874.300 μs | 4 | 53023.28 KB | +| Jint | stopwatch | 469,970.379 μs | 950.2276 μs | 470,018.250 μs | 5 | 53043.02 KB | Benchmarks with issues: -EngineComparisonBenchmark.YantraJS: DefaultJob [FileName=linq-js] \ No newline at end of file + EngineComparisonBenchmark.YantraJS: DefaultJob [FileName=dromaeo-3d-cube] + EngineComparisonBenchmark.YantraJS: DefaultJob [FileName=linq-js] + diff --git a/Jint.Tests.CommonScripts/Jint.Tests.CommonScripts.csproj b/Jint.Tests.CommonScripts/Jint.Tests.CommonScripts.csproj index e7a235e631..ebd56690a1 100644 --- a/Jint.Tests.CommonScripts/Jint.Tests.CommonScripts.csproj +++ b/Jint.Tests.CommonScripts/Jint.Tests.CommonScripts.csproj @@ -16,10 +16,10 @@ - - + + - + diff --git a/Jint.Tests.PublicInterface/Jint.Tests.PublicInterface.csproj b/Jint.Tests.PublicInterface/Jint.Tests.PublicInterface.csproj index 272dd0c4dc..33305dece6 100644 --- a/Jint.Tests.PublicInterface/Jint.Tests.PublicInterface.csproj +++ b/Jint.Tests.PublicInterface/Jint.Tests.PublicInterface.csproj @@ -22,13 +22,16 @@ - - + + - - - + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/Jint.Tests.Test262/Jint.Tests.Test262.csproj b/Jint.Tests.Test262/Jint.Tests.Test262.csproj index e7e7e5d8ab..23cb497b72 100644 --- a/Jint.Tests.Test262/Jint.Tests.Test262.csproj +++ b/Jint.Tests.Test262/Jint.Tests.Test262.csproj @@ -16,10 +16,10 @@ - - + + - + diff --git a/Jint.Tests/Jint.Tests.csproj b/Jint.Tests/Jint.Tests.csproj index 549f914646..337bbba6dd 100644 --- a/Jint.Tests/Jint.Tests.csproj +++ b/Jint.Tests/Jint.Tests.csproj @@ -25,13 +25,16 @@ - + - + - - + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/Jint/Jint.csproj b/Jint/Jint.csproj index cc591bc37b..fbddda8229 100644 --- a/Jint/Jint.csproj +++ b/Jint/Jint.csproj @@ -19,7 +19,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive