合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
**目标** * JS 引擎的编译流水线是什么 * 渲染流程都做了什么 * 为什么需要 event loop * 不同的 JS 宿主环境有哪些不同 * micro task 和 check 都解决了什么问题 * requestAnimationFrame 是宏任务还是微任务 * requestIdleCallback 是什么时候执行的 ## js 引擎和编译 1. parse - 将代码转换成 ast 2. 解释器 - ast 转换成 字节码 3. 编译器 - 字节码转换成机器码 4. gc - 垃圾回收 ![](https://img.kancloud.cn/d7/82/d782c628818d9893d5858120bb0ff826_1440x475.png) ## 渲染引擎 ![](https://img.kancloud.cn/1b/41/1b41eacbbd8a714519a63190c2979865_1440x525.png) ## 如何渲染完整的网页应用 - event loop - * js引擎和渲染引擎的结合 * event loop **是宿主环境提供**的 * 每次 event loop 都是一个js任务 * event loop 完会检测是否需要渲染 ## requestAnimationFrame * 开始渲染前的一个钩子 * 在渲染之前做的一些计算 ![](https://img.kancloud.cn/70/62/7062195f4ddb22100b657e98eed384ac_632x872.png) ## requestIdeCallback * requestIdleCallback 会在每次 check 结束发现距离下一帧的刷新还有时间,就执行一下这个。如果时间不够,就下一帧再说 ![](https://img.kancloud.cn/d6/ed/d6ed8f7f8f8fca088a6640405896a83f_650x658.png)