Top
Fork me on Gitee My Github

WebAssembly 技术

WebAssembly 有一套完整的语义,实际上wasm是体积小且加载快的二进制格式,其目标就是充分发挥硬件能力以达到原生执行效率。

WebAssembly 是一种可以使用非JavaScript编程语言编写代码并且能在浏览器上运行的技术方案,实际上,是一种新的字节码格式(当然还有很多优点)。

Web第四种语言

2019年12月5日,WebAssembly正式称为World Wide Web Consortium(W3C)的标准,加入到了HTML、CSS和JavaScript的行列。

(控制台可以输出:WebAssembly)

工作原理:

  • WebAssembly 是除了JavaScript以外,另一种可以再网页中运行的编程语言。过去如果你想在浏览器中运行代码来对网页中各种元素进行控制,只有JavaScript这一种选择。

  • WebAssembly 与其他的汇编语言不一样,它不依赖于具体的物理机器。可以抽象的理解成它是概念机器的机器语言

WebAssembly 的优势

  • 文件加载:WebAssembly 文件体积更小,所以下载速度更快
  • 解析:解码 WebAssembly 比解析 JavaScript 要快
  • 编译和优化:编译和优化所需的时间少,因为在将文件推送到服务器之前已经进行了更多优化,JavaScript 需要为动态类型多次编译代码
  • 重新优化:WebAssembly 代码不需要重新优化,因为编译器有足够的信息可以在第一次运行时获得正确的代码
  • 执行:执行可以更快,WebAssembly 指令更接近机器码
  • 垃圾回收:目前 WebAssembly 不直接支持垃圾回收,垃圾回收都是手动控制的,所以比自动垃圾回收效率更高
  • 安全:可以放hash和签名等等

WebAssembly 的应用

WebAssembly 可用于视频和音频编解码器,图形和3D,多媒体和游戏,密码计算或便携式语言实现等领域。

代码演示,初步认识

fetch('./test.wasm').then(response => {
  response.arrayBuffer()
}).then(bytes => {
  WebAssembly.complie(bytes)
}).then(mod => {
  const instance = new WebAssembly.Instance(mod)
  const a = instance.exports
  
  console.log(a)
  console.time('测试 fib 速度:')
  var re = a.fib(40)
  console.timeEnd('测试 fib 速度:')
})
init fib(int x) {
 if (x <= 0) return 0
 if (x <= 2) return 1
 return fib(x-1) + fix(x-2)
}


WebAssembly Exporter 在线工具或者下载本地工具,将C++编译成wasm

posted @ 2022-10-17 18:38  lisashare  阅读(214)  评论(0编辑  收藏  举报