task 1

1.CSS和JS在网页中的放置顺序是怎样的?

CSS代码放在head中
JS代码放在body标签的最后

2.解释白屏和FOUC

白屏问题:

如果把样式放在底部,对于IE浏览器,在某些场景下(新窗口打开,刷新等)页面会出现白屏,而不是内容逐步展现
如果使用 @import 标签,即使 CSS 放入 link, 并且放在头部,也可能出现白屏。
出现白屏的原因是因为浏览器在渲染的过程中需要DOM树和CSSOM树组合成渲染树,把CSS放在最后和使用@import标签引入CSS都会拖慢引入CSSOM树的速度,在没有获取到CSSOM树的时候浏览器无法进行渲染,就会导致白屏。
可以通过在head中使用link标签解决

FOUC:

如果把样式放在底部,对于IE浏览器,在某些场景下(点击链接,输入URL,使用书签进入等),会出现 FOUC 现象(逐步加载无样式的内容,等CSS加载后页面突然展现样式).对于 Firefox 会一直表现出 FOUC .
可以通过避免使用@import方法导入CSS,且将样式表链接都放在head来解决。

3.async和defer的作用是什么?有什么区别

没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该 script 标签之下的文档元素之前,也就是说不等待后续载入的文档元素,读到就加载并执行。

这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。因此,在

这个属性与defer类似,都用于改变处理脚本的行为。同样与defer类似,async只适用于外部脚本文件,并告诉浏览器立即下载文件。但与defer不同的是,标记为async的脚本并不保证按照它们的先后顺序执行。
第二个脚本文件可能会在第一个脚本文件之前执行。因此确保两者之间互不依赖非常重要。指定async属性的目的是不让页面等待两个脚本下载和执行,从而异步加载页面其他内容。

区别:

async:不保证顺序
defer:脚本延迟到文档解析和显示后执行,有顺序

4.简述网页的渲染机制

  1. 解析HTML标签,构建DOM树。
  2. 解析CSS标签,构建CSSOM树。
  3. 将DOM与CSSOM进行组合构建渲染树 Render Tree。
  4. 在渲染树的基础上进行布局,计算每个节点的几何结构。
  5. 把每个节点绘制到屏幕上 (painting)。

你可能感兴趣的:(task 1)