一、CSS和JS在网页中的放置顺序是怎样的?
使用 link 标签将css文件链接放在head内,并将JS文件链接放在body底部。
二、解释白屏和FOUC
浏览器读取js文件时,是立即读取,期间不同时操作读取css和HTML。对于图片和CSS, 在加载时会并发加载(如一个域名下同时加载两个文件). 但在加载 JavaScript 时,会禁用并发。故如果js文件放在头部,浏览器在读取js文件间的间隙时,是没有读取到HTML和css文件的,,并且阻止其他内容的下载。所以此时浏览器出现白屏现象。
FOUC:由于Firefox浏览器的读取机制与Chrome的读取机制(读取完HTML文件,再读取完css文件才显示)不同。Firefox是css一边加载一边显示,故会出现页面上部分渲染完成,下部分却没有样式的情况。故在没有样式到样式加载完成期间浏览器会会自动刷新加上新加载的样式,这期间会出现无样式内容闪烁。
三、async和defer的作用是什么?有什么区别
作用:加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行(异步)。
区别:
defer:脚本延迟到文档解析和显示后执行,有顺序
async:不保证顺序
1.defer 和 async 在网络读取(下载)这块儿是一样的,都是异步的(相较于 HTML 解析)
2.它俩的差别在于脚本下载完之后何时执行,显然 defer 是最接近我们对于应用脚本加载和执行的要求的
四、简述网页的渲染机制
浏览器渲染机制(Chrome)
- 解析 HTML 标签, 构建 DOM 树
- 解析 CSS 标签, 构建 CSSOM 树
- 把 DOM 和 CSSOM 组合成 渲染树 (render tree)
- 在渲染树的基础上进行布局, 计算每个节点的几何结构
- 把每个节点绘制到屏幕上 (painting)
网友评论