0%

初试WebAssembly

听闻WebAssembly已经有些年了,不过一直没有跑个例子尝试下。主要是使用Rust来编译生成WebAssembly的目标文件,虽然可以使用C/C++,但想想我的Rust学习一直进展不大,不知道用在哪里,刚好Rust对WebAssembly支持也是比较详细。

Rust问题

安装wasm-pack时提示没有安装rustup,虽然我已经哟给Brew安装了rust,最后安装rustup后就好了。

执行cargo install cargo-generate时,加载Crates非常慢,最后使用国内的镜像后顺利完成,这是国内镜像的配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
# 指定镜像
replace-with = 'sjtu'

# 清华大学
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

# 中国科学技术大学
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"

# 上海交通大学
[source.sjtu]
registry = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"

# rustcc社区
[source.rustcc]
registry = "https://code.aliyun.com/rustcc/crates.io-index.git"

总结

我在iOS的Safari试了下,也可以。虽然之前也有其他语言编译为JS的做法,所以主要解决的是如何构建大型web应用的工程问题,现在ES6的普及,好像这类方案渐渐的也不怎么提了。其他语言编译成WebAssembly的做法,主要是为解决性能的问题,把一些跟性能有关系使用WebAssembly,另外WebAssembly可以解决原来JS的老是暴露的问题。理论上其他语言都可以编译WebAssembly,但是主流的还是C/C++、Go、Rust之类的编译为WebAssembly的方式了,不过Web开发我不是全职的那种,有需要了就写写。感觉一般Web开发者也不大会用到,有性能要求的应用可能会用到,但估计写WebAssembly估计也是领域专业的人员。

参考资料

Rust 🦀 and WebAssembly 🕸 ,例子主要按这个来跑的。

WebAssembly Mozilla开发者网站关于WebAssembly的介绍,比较详细。