引言
不知从事前端的同学,是否还记得去年 12 月底引爆前端界的一个要闻,WebAssembly
被 W3C 官方宣布为 Web 开发的第四种语言(前面三种 HTML、CSS、JS)。然后,那段时间就是各种围绕 WebAssembly
的文章,并且很多标题党都是以 WebAssembly是否会取代 JavaScript? 为标题吸引眼球。
时间回到现在,大家应该对 WebAssembly
有了一定的认知,它并不是为了取代 JavaScript
而出现,就像当初官方宣称所说,它是为了更好地和 JavaScript 合作共赢。因为,众所周知,JavaScript
在一些计算以及图像处理的情景下,它并不能很好地胜任这个任务,而 WebAssembly
则是为了解放这方面的需求而出现的。说了那么多,我们来简单讲讲 WebAssembly
。
一、定义
WebAssembly
有一套完整的语义,实际上 wasm
是体积小且加载快的二进制格式, 其目标就是充分发挥硬件能力以达到原生执行效率。WebAssembly
运行在一个沙箱化的执行环境中,甚至可以在现有的 JavaScript 虚拟机中实现。在web环境中,WebAssembly
会严格遵守同源策略以及浏览器安全策略。
WebAssembly
可以被 JavaScript
调用,进入 JavaScript
上下文,也可以像 Web API 一样调用浏览器的功能。并且,WebAssembly
不仅可以运行在浏览器上,也可以运行在非 web 环境下(只要你具备执行 wasm
的环境,例如 Node
中)。
目前支持运行 wasm
的浏览器和 Node
环境有:
二、对比 JavaScript
在我们认知的编程语言中,根据转化成机器语言的方式可以分为两种,一种是解析型,一种是编译型。常见的编译型有 Java
、C
语言之类的,而解释型则是以 JavaScript
这种一边运行一遍表达运行结果的为代表。对于前者,则是先通过编译,然后才能得到你的运行结果。而后者,则是一句一句执行,你的运行结果是即时的。这样一来,显而易见的是如果是很复杂的语句,对于解析型(JavaScript
)的语言是非常不利的,即它会在这个地方一直执行。
而 WebAssembly
,它的出现是为了以另一种方式,在 Web 中执行你之前通过 JavaScript
不能胜任的程序。WebAssembly
最终编译成的二进制流的文件,可以很快的转化成机器语言,即可以在 Web 中高效地执行一些复杂逻辑或需要高性能的程序。
三、使用方式
在使用前,要先配置好 git
、python
、cmake
,大家对于这三者中的两者(git
、python
)我想都会很熟悉,相应的环境应该也是有的。对于 cmake
可能会比较陌生(具体下载安装可以参考这里)。
在配置好环境后,需要进行项目的基本构建:
1.新建一个目录,输入以下命令(这个构建过程可能会有点漫长,可以去我的百度云盘自取,提取码:rybr)
$ git clone https://github.com/juj/emsdk.git
$ cd emsdk
$ emsdk install latest
$ emsdk activate latest
2.配置环境变量
emsdk_env
查看是否配置成果
3.新建一个目录,新建一个目录,写一段 C
语言代码(需要注意的是,要确定此时电脑上有编译 C 的环境)
#include<stdio.h>
int main(int argc, char ** argv) {
printf("Hello, world!\n");
}
4.在当前目录下,运行如下命令
emcc hello.c -s WASM=1 -o hello.html
5.输入如下命令,并去浏览器中查看运行结果
emrun --no_browser --port 8080
总结
对于 WebAssembly
这个语言,我还是第一次接触,但是个人认为在不久的将来,它会和 Flutter
一样成为前端工程师所必须具备的一项技能。现在,大家都可以预见的是,Web 被要求所具备的能力越来越高。所以,接下来有时间,我会继续走在 WebAssembly
这条学习道路上,欢迎有兴趣的同学一起交流学习。