zlx362211854 / daily-study

每日一个知识点总结,以issue的形式体现
10 stars 6 forks source link

95. 说说WebAssembly #151

Open zlx362211854 opened 4 years ago

zlx362211854 commented 4 years ago

WebAssembly是浏览器性能优化的一个方案。 浏览器性能优化有三个阶段:

  1. 原始阶段,性能很低。
  2. JIT阶段,在项目运行的过程中,引擎会对执行次数较多的function记性优化,引擎将其代码编译成Machine Code后打包送到顶部的Just-In-Time(JIT) Compiler,下次再执行这个function,就会直接执行编译好的Machine Code
  3. asm.js阶段,催生了WebAssembly。

WebAssembly就是经过编译器编译之后的代码,可以在浏览器中执行,是十六进制的机器码,执行效率更快,并且很多静态语言如C++,java等都可以编译成WebAssembly在浏览器环境执行,这样大大增强了浏览器执行效率。

nanslee commented 4 years ago

WebAssembly(wasm)就是一个可移植、体积小、加载快并且兼容 Web 的全新格式 它可以将高级语言编译成 wasm 字节码模块,然后该模块将以二进制的格式发送到浏览器,并在专有虚拟机上执行,与JavaScript虚拟机共享内存和线程等资源。

goldEli commented 4 years ago

What?

简单来说 WebAssembly 可以让任何语言的代码运行在浏览器上

How?

  1. c 语言写了一段"Hello, World!"。
  2. 在 WebAssembly 官网下载 Toolchain 工具,
  3. 然后用 Toolchain 编译生成一个,Wasm 源文件,一个 JavaScript 文件,一个 HTML 文件。
  4. 用 c 语言写的 "Hello, World!" 就可以运行在浏览器呢器中了。浏览器加载 HTML 文件,HTML 文件加载 JavaScript 文件,JavaScript 文件 加载 Wasm 源文件。

Why?

  1. WebAssembly 生成的代码是机器码,省去了中间代码解释的环节,提升性能,比如用在 3D 游戏中。
  2. 不会前端的开发人员,也可以在浏览器上做开发

Why not?

WebAssembly 还是一个很新的技术,还有很多问题等待解决,比如浏览器兼容问题,Wasm 源文件很大带来的网络开销等问题。

Reference

Why the heck is everyone talking about WebAssembly?