什么是WebAssembly
WebAssembly(简称Wasm)是一种新型的二进制代码格式,包含这种二进制代码格式的文件可以用类似加载模块的方式被浏览器快速、高效地解析和执行。
基本原理
V8引擎在处理Wasm模块时省略了大量Pipeline中的环节。引擎并不需要对Wasm模块中的二进制代码进行优化,也不需要生成冗余的占用大量内存的AST结构信息。而只需要把这些模块中的二进制代码直接加载到内存中,然后经过位于 V8链路末端编译器后端的处理,最后生成的机器码便可以被浏览器直接执行。从Wasm模块被浏览器加载到最后执行的整个过程并不需要很多的处理环节和系统资源开销,而这也是Wasm应用为何会保持如此高性能的众多原因之一。
安装Emscripten
- 下载最新Python
- 克隆emsdk
git clone git@github.com:emscripten-core/emsdk.git
- 安装激活Emscripten(WIN)
window平台建议直接用WSL来安装,不然会有一堆问题
./emsdk install latest
./emsdk activate latest
- 校验安装
emcc -v
简单的例子
- hello.c
# include <stdio.h>
int main() {
printf("你好, 世界!\n");
return 0;
}
- 生成wasm和js
emcc hello.c
-o
可以指定输出文件名称
运行
新建html,并在服务器查看,控制会打印"你好, 世界!"
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script src="./a.out.js"></script>
</body>
</html>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。