1、CSS和JS在网页中的放置顺序是怎样的?
css需要放在页面的head中,用link标签引入,而放在页面底部会发生页面dom元素加载而样式后加载的情况发生。
JavaScript在页面中放在body底部比较好,因为JavaScript每一个引入标签或页面内联JavaScript是不会并行加载的,如果放在头部,文件比较大或网速不好的情况下,页面会一直空白,因为这一个JavaScript文件没有加载完成,体验非常不好,而且JavaScript逻辑放在头部,在dom元素没有全部加载出来的时候,某些语句会导致控制台报错。
2、解释白屏和FOUC
关于白屏
如果把样式放在底部,对于IE浏览器,在某些场景下(新窗口打开,刷新等)页面会出现白屏,而不是内容逐步展现;如果使用 @import 标签,即使 CSS 放入 link,并且放在头部,也可能出现白屏。
- 解决方式:使用 link 标签将样式表放在顶部
关于FOUC
FOUC (Flash of Unstyled Content) 无样式内容闪烁
如果把样式放在底部,对于IE浏览器,在某些场景下(点击链接,输入URL,使用书签进入等),会出现 FOUC 现象(逐步加载无样式的内容,等CSS加载后页面突然展现样式).对于 Firefox 会一直表现出 FOUC .
- 出现FOUC的原因?
- 脚本会阻塞后面内容的呈现
- 脚本会阻塞其后组件的下载
- 解决方式:将JS放在底部。
3、async和defer的作用是什么?有什么区别
async和defer是script标签的一个属性:
- async的作用是使加载和渲染后续文档元素的过程和 script.js 的加载与执行并行进行(异步)。
- defer的作用是:加载后续文档元素的过程将和 script.js 的加载并行进行(异步),但 script.js 的执行要在所有元素解析完成之后,DOMContentLoaded 事件触发之前完成。
其区别是:
- defer:脚本延迟到文档解析和显示后执行,有顺序
- async:不保证顺序
4、简述网页的渲染机制
- 解析 HTML 标签, 构建 DOM 树
- 解析 CSS 标签, 构建 CSSOM 树
- 把 DOM 和 CSSOM 组合成 渲染树 (render tree)
- 在渲染树的基础上进行布局, 计算每个节点的几何结构。
- 把每个节点绘制到屏幕上 (painting)
网友评论