底层
大约 1 分钟javascript
如何立即 JS 的异步
浏览器是多进程多线程软件,多进程是指拥有:浏览器进程、网络进程、渲染进程等等。其中渲染进程负责渲染页面,执行JS等等,并且该渲染进程只有一个渲染主线程。该渲染主线程借助消息队列(也叫事件队列)按序执行,执行计时器、网络、事件监听等任务时渲染主线程是异步执行的,在其他线程将这些任务执行完毕后将回调函数包装成任务加入到消息队列中等待渲染主线程执行。只有一个线程(渲染主线程)在执行 js 代码。
chrome的队列
包含队列:延时队列、交互队列、微队列(优先级依次增加)
js的计时器能做到精确及时吗
不能,有很多原因:
- 计算机硬件没有原子钟,无法做到精确计时
- 操作系统的计时函数本身就有少量偏差,由于 js 的计时器是调用操作系统的函数,也就携带了这些偏差
- 按照 W3C 的标准,浏览器实现计时器时,如果嵌套层级(计时器嵌套)超过5层则会带有4毫秒的偏差
- 由于浏览器拥有多个消息队列,并且存在优先级问题,也会导致计时器无法在准确的时间执行
渲染流程
网络请求 > 解析 HTML > 样式计算 > 布局 > 分层 > 绘制 > 分块 > 光栅化 > 画像素
解析HTML: 产生DOM树、CSSOM树(CSS Object Model)
