之前想着用 rust 做 web 开发, 因此想找个服务端渲染 (ssr) 的方案
看了下 rust 生态里面目前有 4 个比较知名 js 引擎
其中 boa 是纯 rust 实现的一个实验性质的 js 引擎, 这个目前应该还达不到生产标准, 所以没有考虑
mozjs 是 servo 工作组封装的 spidermonkey, 看了一下 api, 几乎没做封装, 比较难用, 而且 crates.io 上发布的版本还是两年前的 这个应该只是为了给 servo 用的, 其他项目想使用比较困难, 因此也不考虑
rusty_v8 是 denoland 工作组封装的 libv8, api 封装的比较好, 支持执行 wasm, 目前用于 deno 运行时, 用于生产环境应该没啥问题
quickjs-rs 是对 quickjs 的封装,api 非常简单
目前能用的就 rusty_v8 和 quickjs-rs, 所以测试了一下他们的性能
测试用的前端框架是 Vue.js 2.6, 就输出一个最简单的 hello world
测试代码见: https://gist.github.com/zengxs/f35fe4f18bb65641c9ef12c937f45be7
测试代码都是 release 模式编译, js 代码也是 production 模式编译
引擎 | 运行次数 | 最高内存占用 | 总耗时 | 平均耗时 |
---|---|---|---|---|
quickjs | 1 | 5.1 MiB | ~0.5ms | - |
quickjs | 10000 | 7.2 MiB | - | ~0.5ms |
v8 | 1 | 9.1 MiB | ~3.5 ms | - |
v8 | 10000 | 67.1 MiB | - | ~0.05ms |
v8-jitless | 1 | 9.3 MiB | ~3 ms | - |
v8-jitless | 10000 | 66.8 MiB | - | ~0.13ms |
增加一个 v8 lite-mode 的测试结果
引擎 | 运行次数 | 最大内存占用 | 平均耗时 |
---|---|---|---|
v8 (lite-mode) | 1 | 8.8 MiB | 3ms ~ 5ms |
v8 (lite-mode) | 10000 | 20.1 MiB | ~0.13ms |
似乎在内存占用与性能间取得了某种平衡?
1
hronro 2021-05-13 12:38:11 +08:00 via iPhone
像 SSR 这种需要长时间运行的,肯定还是要上 JIT 的。不过像 V8 这种东西确实太复杂了,前段时间看有个对 V8 团队负责人的采访,说他们团队内部现在也在讨论像 V8 这种为追求极致性能,妥协其他一切,导致项目最终不好维护的开发方式,究竟是对还是不对。
|