JS乐园: 线程

112 阅读1分钟

浏览器线程

  1. 浏览器中有三个常驻的线程,分别是JS引擎界面渲染事件响应, 这三个现行在浏览器中是互斥的, 当js引擎在运行的时候, 界面渲染 和 事件响应是不会进行的. 所以当JS出现死循环,浏览器无法响应点击,也无法更新界面.

JS引擎基于事件来执行代码。事件响应线程在接到事件后,把响应的代码放到JS引擎的队列中,JS引擎按顺序执行代码。在JS引擎没有代码可以执行的时候,比如图中蓝色方框的间隙中,"事件线程"和"渲染线程"得以有机会运行.

亲自证明: 因此 对于渲染,例如 innerHTML= XXX 这种给 web 添加 dom 操作(本人业务:曲谱渲染), 可以把计算逻辑放到 setTimeout里面, 把计算过程扔到 间隙 之后, 这样就让 渲染线程 先于 计算线程 这样不影响用户体验