简单讲讲 WebAssembly

引言

不知从事前端的同学,是否还记得去年 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

在我们认知的编程语言中,根据转化成机器语言的方式可以分为两种,一种是解析型,一种是编译型。常见的编译型有 JavaC语言之类的,而解释型则是以 JavaScript这种一边运行一遍表达运行结果的为代表。对于前者,则是先通过编译,然后才能得到你的运行结果。而后者,则是一句一句执行,你的运行结果是即时的。这样一来,显而易见的是如果是很复杂的语句,对于解析型(JavaScript)的语言是非常不利的,即它会在这个地方一直执行。

WebAssembly,它的出现是为了以另一种方式,在 Web 中执行你之前通过 JavaScript不能胜任的程序。WebAssembly最终编译成的二进制流的文件,可以很快的转化成机器语言,即可以在 Web 中高效地执行一些复杂逻辑或需要高性能的程序。

三、使用方式

在使用前,要先配置好 gitpythoncmake,大家对于这三者中的两者(gitpython)我想都会很熟悉,相应的环境应该也是有的。对于 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这条学习道路上,欢迎有兴趣的同学一起交流学习。

发布了140 篇原创文章 · 获赞 16 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_42049445/article/details/104644415