Jint 3.0 正式版发布:可以将 JavaScript 嵌入 .NET 应用

Jint 是一款专为 .NET 平台设计的 JavaScript 解释器,支持在任何现代 .NET 平台上运行,包括 .NET Standard 2.0 和 .NET 4.6.2 及更高版本。

Jint 可以实现以下功能:

  • 在 .NET 应用中以安全的沙盒环境运行 JavaScript 。

  • 将本地 .NET 对象和函数暴露给 JavaScript 代码(获取数据库查询结果作为 JSON,调用 .NET 方法等)。

  • 在 .NET 应用中支持脚本,允许用户使用 JavaScript 自定义应用(如Unity游戏)。

GitHub: https://github.com/sebastienros/jint

Jint 3.0 正式版发布

经过七年的辛勤努力,Jint 3.0终于正式发布。在此,特别感谢所有为项目做出贡献、修复和报告问题的人们。

现在,Jint 可以说是功能最齐全、最符合标准的 JavaScript 引擎,它完全运行在 .NET 运行时之上。所有列出的支持功能都通过了 ECMAScript 标准套件的功能标志测试。在 Jint 自身测试用例的基础上,还通过了近 60,000 次测试。

ECMAScript

在第 3 版的开发过程中,完成了大量现代 ECMAScript 语法和库功能,仅举几例:

  • arrow functions

  • let and const support

  • class support

  • rest, spread and destructuring

  • template strings

  • modules

  • async/await

  • nullish coalescing and optional chaining (a ?? b and a?.b?.c)

  • library features like 

  • ArrayBufferBigIntDataViewMapPromiseProxyReflectSet

遗憾的是,生成器支持和异步/等待支持的一些极端情况(需要一些内部引擎逻辑重构)并未成功,并将成为后续版本的一部分。

互操作

改进了许多互操作场景,例如现在可以通过 JavaScript 代码访问扩展方法。修复了大量错误,提高了互操作性能。

性能

在重写 Jint 内部结构时,性能是一个非常重要的问题。Jint 被大量用于 RavenDB 和 EventStore 等数据库中,其执行性能至关重要。我们大大降低了内存流量,并从多方面优化了运行时。一般来说,在不同的工作负载上,Jint v3 至少比以前的 v2 快一倍,甚至数倍。此外,我们还提供了 Jint 与其他可用替代产品的基准测试结果比较。

下面是两个著名测试套件对 v2 和 v3 的比较结果。

BenchmarkDotNet v0.13.12, Windows 11 (10.0.23615.1000)
AMD Ryzen 9 5950X, 1 CPU, 32 logical and 16 physical cores
.NET SDK 8.0.100
  [Host]     : .NET 8.0.0 (8.0.23.53103), X64 RyuJIT AVX2
  DefaultJob : .NET 8.0.0 (8.0.23.53103), X64 RyuJIT AVX2
Dromaeo
Engine FileName Mean Error Allocated
v2 dromaeo-3d-cube 65.91 ms 0.455 ms 129.78 MB
v3 22.514 ms (-66%) 0.1484 ms 6284.46 KB (-95%)
v2 dromaeo-core-eval 14.11 ms 0.228 ms 49.55 MB
v3 4.186 ms (-70%) 0.0160 ms 311.57 KB (-99%)
v2 dromaeo-object-array 684.73 ms 1.320 ms 1698.01 MB
v3 44.332 ms (-94%) 0.2200 ms 100363.04 KB (-94%)
v2 droma(...)egexp [21] 1,593.67 ms 18.104 ms 1825.65 MB
v3 154.681 ms (-90%) 1.3777 ms 163817.22 KB (-91%)
v2 droma(...)tring [21] 1,427.76 ms 15.110 ms 17368.44 MB
v3 415.977 ms (-71%) 19.4907 ms 1321449.47 KB (-93%)
v2 droma(...)ase64 [21] 201.81 ms 1.183 ms 988.21 MB
v3 49.754 ms (-75%) 0.2706 ms 6045.42 KB (-99%)
SunSpider
Engine FileName Mean Error Allocated
v2 3d-cube 450.6 ms 1.97 ms 792.97 MB
v3 172.67 ms (-62%) 0.600 ms 45144.06 KB (-94%)
v2 3d-morph 492.0 ms 5.71 ms 678.52 MB
v3 150.45 ms (-69%) 0.424 ms 46255.62 KB (-93%)
v2 3d-raytrace 419.9 ms 2.95 ms 713.45 MB
v3 149.09 ms (-64%) 0.368 ms 86384.38 KB (-88%)
v2 access-binary-trees 168.1 ms 0.86 ms 310.48 MB
v3 80.74 ms (-52%) 0.074 ms 62246.13 KB (-80%)
v2 access-fannkuch 1,466.3 ms 12.18 ms 2981.09 MB
v3 373.35 ms (-75%) 0.494 ms 97.83 KB (-100%)
v2 access-nbody 380.5 ms 1.08 ms 595.76 MB
v3 167.46 ms (-56%) 0.466 ms 53285.7 KB (-91%)
v2 access-nsieve 537.9 ms 10.60 ms 995.61 MB
v3 134.59 ms (-75%) 0.171 ms 17140.71 KB (-98%)
v2 bitop(...)-byte [24] 288.3 ms 1.63 ms 523.8 MB
v3 134.42 ms (-53%) 0.511 ms 61947.89 KB (-88%)
v2 bitops-bits-in-byte 446.3 ms 3.46 ms 780.24 MB
v3 207.84 ms (-53%) 0.719 ms 40543.92 KB (-95%)
v2 bitops-bitwise-and 282.8 ms 2.62 ms 347.92 MB
v3 105.52 ms (-63%) 1.131 ms 55938.53 KB (-84%)
v2 bitops-nsieve-bits 594.0 ms 8.18 ms 1004.71 MB
v3 193.02 ms (-68%) 1.755 ms 53915 KB (-95%)
v2 contr(...)rsive [21] 233.6 ms 1.50 ms 526.25 MB
v3 98.93 ms (-58%) 0.613 ms 92772.26 KB (-83%)
v2 crypto-aes 455.7 ms 6.86 ms 968.64 MB
v3 121.08 ms (-73%) 1.201 ms 10756.26 KB (-99%)
v2 crypto-md5 236.3 ms 0.94 ms 427.65 MB
v3 95.99 ms (-59%) 0.531 ms 82152.38 KB (-81%)
v2 crypto-sha1 234.2 ms 0.84 ms 436.18 MB
v3 92.25 ms (-61%) 0.892 ms 68857.23 KB (-85%)
v2 date-format-tofte 300.9 ms 3.97 ms 560.51 MB
v3 95.31 ms (-68%) 1.891 ms 50129.5 KB (-91%)
v2 date-format-xparb 209.1 ms 0.77 ms 176.21 MB
v3 54.85 ms (-74%) 0.163 ms 26391.45 KB (-85%)
v2 math-cordic 652.8 ms 10.72 ms 1129.32 MB
v3 308.55 ms (-53%) 0.822 ms 86856.08 KB (-92%)
v2 math-partial-sums 208.6 ms 1.53 ms 247.64 MB
v3 103.45 ms (-50%) 0.154 ms 49364.48 KB (-81%)
v2 math-spectral-norm 288.0 ms 2.25 ms 501.69 MB
v3 115.15 ms (-60%) 0.205 ms 56614.34 KB (-89%)
v2 regexp-dna 103.3 ms 1.58 ms 20.14 MB
v3 117.40 ms (+14%) 0.548 ms 17610.08 KB (-15%)
v2 string-base64 278.1 ms 3.48 ms 1332.74 MB
v3 74.22 ms (-73%) 0.105 ms 8672.83 KB (-99%)
v2 string-fasta 387.8 ms 2.55 ms 755.15 MB
v3 159.71 ms (-59%) 0.459 ms 104781.26 KB (-86%)
v2 string-tagcloud 366.7 ms 25.90 ms 1035.44 MB
v3 70.38 ms (-81%) 0.245 ms 41768.32 KB (-96%)
v2 string-unpack-code 138.2 ms 1.67 ms 242.91 MB
v3 71.54 ms (-48%) 0.291 ms 73552.28 KB (-70%)
v2 strin(...)input [21] 1,113.3 ms 17.34 ms 6419.52 MB
v3 59.09 ms (-95%) 0.129 ms 20684.41 KB (-100%)

分支和发布

  • 推荐的分支是 main 支,任何 PR 都应以该分支为目标。

  • 主分支会自动构建并发布在 MyGet 上。将此源码添加到您的 NuGet 源中即可使用:https://www.myget.org/F/jint/api/v3/index.json

  • 主分支偶尔会在 NuGet 上发布:

  • https://www.nuget.org/packages/jint