< 返回版块

2019-04-13 15:19    责任编辑:Mike

标签:rust,web,frontend,webassembly,wasm

Rust 在 Web 前端发挥作用可以分为三种形式:

  • 编译成 .wasm 文件,由前端 js 加载,运行。这通常用于使用 wasm 来加速 js 运行。
  • 完全使用 Rust 进行 Web 开发。就是不用 Js 及 Js 前端框架,完全由 Rust 书写代码。
  • 编译成 npm 包,在前端发挥作用

编译成 .wasm 模块,对 js 进行加速

Rust 编译成 .wasm 文件模块后,由前端 js 进行加载生效执行。

这属于优化的范畴。在这个意义上讲,Rust 编译到 wasm 具有重大意义,比如下面这篇优化文章:

Rust 编译到 wasm 的细节,可以参看这篇:

使用 Rust 进行前端 Web App 开发

这里有一篇帖子,详细讲解了方案的选择

A web application completely in Rust

具体来说,Rust 生态中,可以帮助 Rust 做前端 Web 开发的工具有

  • yew 由 ELm 和 ReactJS 启发,是前端页面开发框架。可以编译到 WebAssembly
  • cargo-web 用于帮助前端目标选择、编译

但是,实话实说,这只是证明,用 Rust 开发前端 App 是可行的。但是否方便,好用,实用,则另当别论了。

编译成 npm 包,在前端发挥作用

其实这个方式与前面两个讲的有重合。但是现在官方出的一套工具链,非常强力的支持从 Rust 编写到 Npm 包上传到仓库的整个流程。所以单独提出来讲。

最主要的工具是:wasm-pack

下面是使用 wasm-pack 的一个例子:

一个 Hello World

Rust WebAssembly 工作组已经写了一部相对完整的教程,建议仔细阅读。

编译成 npm 包后,怎么集成进现在的 js 系统,就直接按照各种框架和打包框架的规范来做就行了。

不得不说一句,编译成 npm 包后,在后端 nodejs 也可以按同样的方式使用,所以这种方式是前后端通用的,也可以用来开发服务端应用。


官方为了推进更方便地使用 Rust 进行 wasm 的开发,现在开启了一个新的项目:Gloo,它是一个模块化工具箱。这个项目目标是:

  • 更方便地编写可以整合进大型 JavaScript 系统的 wasm 模块
  • 使用 Rust 编写整个 Web 应用程序(类似于上述 Yew 的角色,提供一套框架)