V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
zengxs
V2EX  ›  JavaScript

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

  •  
  •   zengxs · 2021-05-13 11:28:01 +08:00 · 2000 次点击
    这是一个创建于 1282 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前想着用 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
    第 1 条附言  ·  2021-05-13 13:46:41 +08:00

    增加一个 v8 lite-mode 的测试结果

    引擎 运行次数 最大内存占用 平均耗时
    v8 (lite-mode) 1 8.8 MiB 3ms ~ 5ms
    v8 (lite-mode) 10000 20.1 MiB ~0.13ms

    似乎在内存占用与性能间取得了某种平衡?

    2 条回复    2021-05-13 12:56:03 +08:00
    hronro
        1
    hronro  
       2021-05-13 12:38:11 +08:00 via iPhone
    像 SSR 这种需要长时间运行的,肯定还是要上 JIT 的。不过像 V8 这种东西确实太复杂了,前段时间看有个对 V8 团队负责人的采访,说他们团队内部现在也在讨论像 V8 这种为追求极致性能,妥协其他一切,导致项目最终不好维护的开发方式,究竟是对还是不对。
    zengxs
        2
    zengxs  
    OP
       2021-05-13 12:56:03 +08:00
    @hronro v8 的 jit 性能确实很强,但是也不是所有场景都要求极致性能,我就想省点内存 😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5531 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:53 · PVG 14:53 · LAX 22:53 · JFK 01:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.