测试了一下 quickjs 和 v8 作为 ssr 引擎的性能

2021-05-13 11:28:01 +08:00
 zengxs

之前想着用 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
1702 次点击
所在节点    JavaScript
2 条回复
hronro
2021-05-13 12:38:11 +08:00
像 SSR 这种需要长时间运行的,肯定还是要上 JIT 的。不过像 V8 这种东西确实太复杂了,前段时间看有个对 V8 团队负责人的采访,说他们团队内部现在也在讨论像 V8 这种为追求极致性能,妥协其他一切,导致项目最终不好维护的开发方式,究竟是对还是不对。
zengxs
2021-05-13 12:56:03 +08:00
@hronro v8 的 jit 性能确实很强,但是也不是所有场景都要求极致性能,我就想省点内存 😂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/776677

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX