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
andconst
supportclass
support- rest, spread and destructuring
- template strings
- modules
async
/await
- nullish coalescing and optional chaining (
a ?? b
anda?.b?.c
) - library features like
ArrayBuffer
,BigInt
,DataView
,Map
,Promise
,Proxy
,Reflect
,Set
遗憾的是,生成器支持和异步/等待支持的一些极端情况(需要一些内部引擎逻辑重构)并未成功,并将成为后续版本的一部分。
互操作
改进了许多互操作场景,例如现在可以通过 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