学无先后达者为师!
不忘初心,砥砺前行。

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

EngineFileNameMeanErrorAllocated
v2dromaeo-3d-cube65.91 ms0.455 ms129.78 MB
v322.514 ms (-66%)0.1484 ms6284.46 KB (-95%)
v2dromaeo-core-eval14.11 ms0.228 ms49.55 MB
v34.186 ms (-70%)0.0160 ms311.57 KB (-99%)
v2dromaeo-object-array684.73 ms1.320 ms1698.01 MB
v344.332 ms (-94%)0.2200 ms100363.04 KB (-94%)
v2droma(…)egexp [21]1,593.67 ms18.104 ms1825.65 MB
v3154.681 ms (-90%)1.3777 ms163817.22 KB (-91%)
v2droma(…)tring [21]1,427.76 ms15.110 ms17368.44 MB
v3415.977 ms (-71%)19.4907 ms1321449.47 KB (-93%)
v2droma(…)ase64 [21]201.81 ms1.183 ms988.21 MB
v349.754 ms (-75%)0.2706 ms6045.42 KB (-99%)

SunSpider

EngineFileNameMeanErrorAllocated
v23d-cube450.6 ms1.97 ms792.97 MB
v3172.67 ms (-62%)0.600 ms45144.06 KB (-94%)
v23d-morph492.0 ms5.71 ms678.52 MB
v3150.45 ms (-69%)0.424 ms46255.62 KB (-93%)
v23d-raytrace419.9 ms2.95 ms713.45 MB
v3149.09 ms (-64%)0.368 ms86384.38 KB (-88%)
v2access-binary-trees168.1 ms0.86 ms310.48 MB
v380.74 ms (-52%)0.074 ms62246.13 KB (-80%)
v2access-fannkuch1,466.3 ms12.18 ms2981.09 MB
v3373.35 ms (-75%)0.494 ms97.83 KB (-100%)
v2access-nbody380.5 ms1.08 ms595.76 MB
v3167.46 ms (-56%)0.466 ms53285.7 KB (-91%)
v2access-nsieve537.9 ms10.60 ms995.61 MB
v3134.59 ms (-75%)0.171 ms17140.71 KB (-98%)
v2bitop(…)-byte [24]288.3 ms1.63 ms523.8 MB
v3134.42 ms (-53%)0.511 ms61947.89 KB (-88%)
v2bitops-bits-in-byte446.3 ms3.46 ms780.24 MB
v3207.84 ms (-53%)0.719 ms40543.92 KB (-95%)
v2bitops-bitwise-and282.8 ms2.62 ms347.92 MB
v3105.52 ms (-63%)1.131 ms55938.53 KB (-84%)
v2bitops-nsieve-bits594.0 ms8.18 ms1004.71 MB
v3193.02 ms (-68%)1.755 ms53915 KB (-95%)
v2contr(…)rsive [21]233.6 ms1.50 ms526.25 MB
v398.93 ms (-58%)0.613 ms92772.26 KB (-83%)
v2crypto-aes455.7 ms6.86 ms968.64 MB
v3121.08 ms (-73%)1.201 ms10756.26 KB (-99%)
v2crypto-md5236.3 ms0.94 ms427.65 MB
v395.99 ms (-59%)0.531 ms82152.38 KB (-81%)
v2crypto-sha1234.2 ms0.84 ms436.18 MB
v392.25 ms (-61%)0.892 ms68857.23 KB (-85%)
v2date-format-tofte300.9 ms3.97 ms560.51 MB
v395.31 ms (-68%)1.891 ms50129.5 KB (-91%)
v2date-format-xparb209.1 ms0.77 ms176.21 MB
v354.85 ms (-74%)0.163 ms26391.45 KB (-85%)
v2math-cordic652.8 ms10.72 ms1129.32 MB
v3308.55 ms (-53%)0.822 ms86856.08 KB (-92%)
v2math-partial-sums208.6 ms1.53 ms247.64 MB
v3103.45 ms (-50%)0.154 ms49364.48 KB (-81%)
v2math-spectral-norm288.0 ms2.25 ms501.69 MB
v3115.15 ms (-60%)0.205 ms56614.34 KB (-89%)
v2regexp-dna103.3 ms1.58 ms20.14 MB
v3117.40 ms (+14%)0.548 ms17610.08 KB (-15%)
v2string-base64278.1 ms3.48 ms1332.74 MB
v374.22 ms (-73%)0.105 ms8672.83 KB (-99%)
v2string-fasta387.8 ms2.55 ms755.15 MB
v3159.71 ms (-59%)0.459 ms104781.26 KB (-86%)
v2string-tagcloud366.7 ms25.90 ms1035.44 MB
v370.38 ms (-81%)0.245 ms41768.32 KB (-96%)
v2string-unpack-code138.2 ms1.67 ms242.91 MB
v371.54 ms (-48%)0.291 ms73552.28 KB (-70%)
v2strin(…)input [21]1,113.3 ms17.34 ms6419.52 MB
v359.09 ms (-95%)0.129 ms20684.41 KB (-100%)

分支和发布

  • 推荐的分支是 main 支,任何 PR 都应以该分支为目标。
  • 主分支会自动构建并发布在 MyGet 上。将此源码添加到您的 NuGet 源中即可使用: https://www.myget.org/F/jint/api/v3/index.json
  • 主分支偶尔会在 NuGet 上发布:https://www.nuget.org/packages/jint
赞(0) 打赏
未经允许不得转载:码农很忙 » Jint 3.0 正式版发布:可以将 JavaScript 嵌入 .NET 应用

评论 抢沙发

给作者买杯咖啡

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册