V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
alabulei
V2EX  ›  程序员

使用 Rust 和 WebAssembly 加速 Node.js 应用

  •  1
     
  •   alabulei · 2020-07-06 16:21:03 +08:00 · 2434 次点击
    这是一个创建于 681 天前的主题,其中的信息可能已经有所发展或是发生改变。

    后摩尔定律时代, 缺乏原始性能一直都是 JavaScript 的争议点。Node.js 通过大量使用 C 语言编写的本机库与模块来解决这个问题,V8 JS 引擎本身也是这么做的。

    但是作为应用的开发者,要如何创建高性能的函数呢?用 C 写函数,并且作为 NAPI 模块运行? 现在,还有另外一种更好、更快的方法:通过 SSVM,在 Node.js 调用 Rust 函数。 https://www.secondstate.io/articles/getting-started-with-rust-function/

    使用 Rust 重写计算密集型函数,可以在启动和执行速度方面获得10 倍至 100 倍的性能增长

    SSVM 是功能齐全的 WebAssembly 虚拟机,针对服务端应用程序进行了优化。 https://github.com/second-state/SSVM

    你可以用 Rust 编写函数,编译成 Wasm,然后在 SSVM 中运行。然后就可以像调用 Node.js 中的 JavaScript 函数一样,调用 Rust 函数。非常简单,试试看! https://www.secondstate.io/articles/getting-started-with-rust-function/

    6 条回复    2020-07-07 10:32:27 +08:00
    zjsxwc
        1
    zjsxwc  
       2020-07-06 19:23:36 +08:00 via Android
    Firefox 是不是有性能加持,rust 是是 Firefox 家的。
    pinkSlime
        2
    pinkSlime  
       2020-07-06 20:03:39 +08:00
    我很疑惑为什么每一篇提到 wasm 的文章都拿执行速度说事
    我不认为本质上是交叉编译的技术目的是为了提升代码的执行效率,虽然某些场合确实有有效提高
    `10 倍至 100 倍的性能增长。`
    这种结论不知道是谁吹出来的,都是同一个 runtime 执行相同的 opcode,不可能吧
    chihiro2014
        3
    chihiro2014  
       2020-07-06 20:21:30 +08:00
    别老提速度说事,代码编译完了,都是机器码,机器码之前还有谁快谁慢么,慢的永远不是代码,是写代码时的处理方式
    alabulei
        4
    alabulei  
    OP
       2020-07-07 10:24:37 +08:00
    讲的速度是 JS 解释器 vs 编译执行的 wasm 字节码,后者速度确实快。IBM 也曾做过一个测试,用 Rust 与 WebAssembly 能比 JavaScript 快 12 到 15 倍 ( 15000%) https://developer.ibm.com/technologies/web-development/articles/why-webassembly-and-rust-together-improve-nodejs-performance/
    peterjose
        5
    peterjose  
       2020-07-07 10:30:34 +08:00
    正在学习 Rust
    peterjose
        6
    peterjose  
       2020-07-07 10:32:27 +08:00
    @chihiro2014 那你去用 js 写个 esbuild 性能 1/10 的打包器或者压缩器出来
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3949 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 08:20 · PVG 16:20 · LAX 01:20 · JFK 04:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.