概述
WebAssembly(缩写为Wasm)是基于堆栈的虚拟机的二进制指令格式。
Wasm被设计为可编程C/C++/Rust等高级语言的可移植目标,可在Web上部署客户端和服务器应用程序。
背景
考虑下您需要在浏览器之外使用软件的情况:视频游戏,视频编辑,3D渲染或音乐制作。这些应用程序进行了大量计算,并且需要高性能。这种表现很难从JavaScript中获得。
JavaScript最初是一种简单的脚本语言,旨在为Web充满轻量级超文本文档带来一些交互性。它的设计易于学习和编写,但它的设计并不快。
随着速度的加快,您可以在浏览器中执行的操作列表开始扩展。新的API带来了诸如交互式图形,视频流,离线浏览等等。反过来,越来越多的以前只有原生的应用程序开始上网。今天,您可以轻松地编辑文档并从浏览器发送电子邮件,但有些领域的JavaScript性能仍然很难。
介绍
WebAssembly 是一种新的字节码格式,主流浏览器都已经支持 WebAssembly。 和 JS 需要解释执行不同的是,WebAssembly字节码和底层机器码很相似可快速装载运行,因此性能相对于 JS 解释执行大大提升。 也就是说 WebAssembly 并不是一门编程语言,而是一份字节码标准,需要用高级编程语言编译出字节码放到 WebAssembly 虚拟机中才能运行, 浏览器厂商需要做的就是根据 WebAssembly 规范实现虚拟机。
WASM带来了什么
- 速度:
- 二进制文件比文本JavaScript文件小得多。由于它们的大小,它们下载速度更快,这在慢速网络上尤为重要。
- WASM二进制文件的执行时间比执行相同的本机代码慢20%。
- 可移植性
- 灵活性
特性
- 高效快捷:堆栈计算机、二进制格式编码
- 安全:沙盒环境或js虚拟机、嵌入式环境
- 可调试
- 开发网络平台成员:WebAssembly模块将能够通过JavaScript访问的相同Web API调用和调出
参考
- WASM Wiki:https://zh.wikipedia.org/wiki/WebAssembly
- WASM Medium: https://blog.logrocket.com/webassembly-how-and-why-559b7f96cd71
- WASM 设计文档:https://github.com/WebAssembly/design/
- WASM 官网: https://webassembly.org/
- WASM DEMO: https://webassembly.org/demo/
- WASM与Go语言:https://www.techug.com/post/webassembly-and-go-a-look-to-the-future.html
- GO WebAssembly: https://github.com/golang/go/wiki/WebAssembly
- IBM WebAssembly概述 : https://www.ibm.com/developerworks/cn/web/wa-lo-webassembly-status-and-reality/index.html