<< 【Build your own Spotlight App 】Utools 功能分析 - 掘金 (juejin.cn)
书接上回。
我们选择使用 tauri 开发这样一个应用遇到的第一个问题就是:怎么支持一个安全沙箱环境来开发支持JS 第三方应用的集成。
当然不折磨的方式 / 成熟的方案,就是 electron,毕竟天然的nodejs 摆在那里,整个js生态都可以使用,你不用就是等价于自己实现一个node,还没有那么好的生态。但这种逻辑其实是商业思考的逻辑,trade-off成本和效益,为了更快地实现一个功能点,更快推出市场的思考逻辑。
Build your own something 本来就是技术导向的,所以如何更快实现一个功能往往不是优先级最高的,从更好实现一个功能或者实现一个功能收获技术成果最多才是优先级最高的。
说岔了,以下是我慢慢思考去的可能性方案:
进程 C/S 架构
其实就是集成一个 node 环境在项目里面,只是这个node环境和tauri的main环境是隔离的。所有通讯都是IPC或者直接就是网络通讯。所有第三方应用都共用同一个node进程,所有第三方应用的本质上都是一个 C/S架构。
同理你也可以把 bun 嵌入进去,让用户级应用的逻辑层直接无转译跑 ts。
这种方案甚至可以使得第三方应用是SSR应用。
看起来实现难度肯定是简单的。技术上也有现实意义,对于现有的应用无法脱离node生态但又不想用 electron的时候,这个方案可以在不使用rust进行主要逻辑层开发的前提下进行应用开发。
还可以关注类似这样的方案
Rust 集成 JS 引擎
这种方案就是看有没有现成的,把 js 引擎 集成到 rust 运行上下文的
我随便搜索了一下发现还是很多有意思的binding的。
- rustyscript - crates.io:Rust 包注册表 --- rustyscript - crates.io: Rust Package Registry V8
- rquickjs - crates.io: Rust Package Registry QuickJS
- javascriptcore-rs - crates.io: Rust Package Registry JSC
- rusty_jsc - crates.io: Rust Package Registry JSC
- quickjs_runtime - crates.io: Rust Package Registry QuickJS
- es_runtime - crates.io:Rust 包注册表 --- es_runtime - crates.io: Rust Package Registry SpiderMonkey
nodejs - crates.io:Rust 包注册表 --- nodejs - crates.io: Rust Package Registry- javascriptcore - crates.io:Rust 包注册表 --- javascriptcore - crates.io: Rust Package Registry JSC
scriptit - crates.io:Rust 包注册表 --- scriptit - crates.io: Rust Package Registry- rusty_hermes - crates.io:Rust 包注册表 --- rusty_hermes - crates.io: Rust Package Registry Hermes
总览来说就是几个引擎的binding都有
- V8
- JSC
- QuickJS
- SpiderMonkey
- Hermes
还有一些特殊的
但其实这里的开发成本不低。。。。。。
WinterCG
这是个有趣的东西。
wasmerio/winterjs: Winter is coming... ❄️ (github.com)
轻量级运行时,就是不知道怎么集成到rust中。