JS 阻塞 DOM 解析,也就会阻塞页面。
这也是为什么 JS 文件放在最上面的起因。
那为什么会阻塞 DOM 解析呢?
· 因为 JS 是可操纵 DOM 的,· 如果在批改这些元素属性同时渲染页面(即 js 线程和 UI 线程同时运行),· 那么渲染线程前后取得的元素数据就可能不统一了。· 为了避免渲染呈现不可预期的后果,浏览器设置 GUI 渲染线程与 js 引擎为互斥的关系。· 当 JS 引擎执行时,GUI 线程会被挂起,GUI 更新会被保留在一个队列中期待引擎线程闲暇时立刻被执行。· 当浏览器在执行 JS 程序的时候,GUI 渲染线程会被保留在一个队列中,直到 JS 程序执行实现后才会立刻被执行。如果 JS 执行的工夫过长,这会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。· 如果 JS 文件中没有操作 DOM 相干的代码,就能够将 JS 脚本设置为异步加载,通过 async 或 defer 来进行标记代码。