JS阻塞DOM解析,也就会阻塞页面。
这也是为什么JS文件放在最下面的原因。
那为什么会阻塞DOM解析呢?
· 由于JS是可操纵DOM的,
· 如果在修改这些元素属性同时渲染页面(即js线程和UI线程同时运行),
· 那么渲染线程前后获得的元素数据就可能不一致了。
· 为了防止渲染出现不可预期的结果,
浏览器设置 GUI渲染线程与js引擎为互斥的关系。
· 当JS引擎执行时,GUI线程会被挂起,
GUI更新会被保存在一个队列中等待引擎线程空闲时立即被执行。
· 当浏览器在执行JS程序的时候,
GUI渲染线程会被保存在一个队列中,
直到JS程序执行完成后才会立即被执行。
如果JS执行的时间过长,
这会造成页面的渲染不连贯,
导致页面渲染加载阻塞的感觉。
· 如果JS文件中没有操作DOM相关的代码,
就可以将JS脚本设置为异步加载,
通过async或defer来进行标记代码。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。