JavaScript 与 WebAssembly 解释、编译相关

133 阅读2分钟

前言

因 前文 抽象语法树 AST 与 编译器 Compiler 整理了部分 抽象语法树 AST 与 编译器 Compiler 相关的内容,进一步地,会有一些问题产生:

  1. JavaScript 在浏览器是怎么执行的(或者说浏览器是怎么解析的)?
  2. JavaScript 为什么叫做解释型语言?
  3. 解析器、解释器、编译器 分别是什么?
  4. WebAssembly?

因而,找了以下一些文章:

文章

对应的,其涉及的概念 / 内容如下:

  • WebAssembly
  • 编译器
  • 解释器
  • Just-in-time(JIT)
  • 汇编语言 (x86、ARM)
  • LLVM
  • LLVM IR
  • Emscripten
  • WebAssembly Explorer
  • asm.js
  • JS 引擎
  • 抽象语法树 AST

以上,基本可覆盖上述 前言 中提出的问题。

发散

闲谈 TypeScript

TypeScript 是在代码开发层面添加了类型等检查,降低了维护成本等,但最终仍然是编译为 JavaScript 执行。

而不是类似 asm.js 一样,让浏览器支持解析/编译。关于 JavaScript 在浏览器上的性能优化,不会有影响。

但其实,因为 V8 / 包括目前的浏览器,已经对 JavaScript 处理得非常好了,TypeScript 用于类型定义 / 开发阶段,作用就已经非常大,也没必要放到浏览器上。

WebAssembly 未来

难道以后的浏览器会

  • 要么基于 JavaScript,做更高级的优化?
  • 抛弃 JavaScript,使用 WebAssembly 字节码加载方式,更快?

细想下来不会:

  • 这里其实有一个问题, dom 操作还是通过 JS,大概也只会用于 react virtual dom diff 以及 加密等 这类在业务中没那么广泛的场景
  • 而 慢 最主要还是慢在 dom 操作上,V8 都这么快了,浏览器再快,感觉作用也不大
  • 这么看下来,WebAssembly 更多用于其他语言的开发者,可以通过 WebAssembly 提供一些复杂计算之类的功能