简单介绍
- javascript 是解释性语言,性能很慢,随着 web 在生活中的普及,这点性能显然不够用。你能想象双十一的一个按钮点半天才有反应嘛?所幸很多大神,都在不断的改进这个性能问题
漫漫填坑路
JIT
google 在 09 年 v8 引擎里引入 just in time compiling(即时编译),跟之前 ajax 出现引起的轰动是一样的,性能瞬间就上升了 20-40 倍的速度。
- 从此网页进入了网页应用的时代
解释器和编译器
- 解释器是一行行解释代码,性能会下降。编译器是把源代码编译成目标代码。
- 解释器是叫他干什么立刻就去干什么,比如买菜,马上去市场回来,再去买油又马上市场
- 编译器是叫他干什么直到说完才去干什么,去买菜,买油统一去市场
- 但是 jit 是基于运行期编译,js 是一个没有类型的语言,所以 jit 大多数时候都在猜测 js 的类型。
1 | function add(a, b) { |
TypeScript
- 既然 jit 大多数时候在猜测类型,那索性搞个强类型语言,再编译成 js 就行了
asm.js
- ts 是 js 的超集,这个是语法兼容 js 的汇编语言,是 js 的子集
- 通过标注声明类型,而且不得改变,这样就节省了类型判断的时间
WebAssembly
- 一种二进制码的规范,是比 asm.js 更为激进的东西
- 理论上所有语言都可以编译成这个,然后泡在浏览器上
- 但是目前还摸不了 dom