1、CSS和JS在网页中的放置顺序是怎样的?
css样式放在head中。
js放置在body标签内的最后,script标签内。外链用<script src=""></script>,内部的用<script></script>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>标题</title>
<link href="index.css" rel="stylesheet">
</head>
<body>
<script src="index.js"></script>
</body>
</html>
2、白屏问题
解答:如果把样式放在底部,对于IE浏览器,在某些场景下(新窗口打开,刷新等)页面会出现白屏,而不是内容逐步展现
如果使用 @import 标签,即使 CSS 放入 link, 并且放在头部,也可能出现白屏。
因为脚本会阻塞后面内容的呈现和其后组件的下载
对于图片和CSS,在加载时会并发加载(如一个域名下同时加载两个文件)。但在加载JavaScript 时,会禁用并发,并且阻止其他内容的下载。所以把JavaScript放入页面顶部也会导致白屏现象。
关于白屏,其实是因为浏览器在渲染的时候请求时间过长导致的,比如Chrome的渲染流程大致是HTML-->Dom-->Css-->Cssom-->Render Tree-->进行计算-->painting最终才是我们看到的网页界面,但是如果你是在一些国外的网站,或者被墙的地方进行反问,浏览器就回一直现实它的加载动作而没有最终页面,也就网页响应时间过长而导致的白屏,另一种情况就是当我门使用@import(),属性的时候也可能导致浏览器渲染不及时,又或者我们把标签放在了body的底部位置,都可能导致不及时的现象.
3、FOUC无样式内容闪烁
FOUC无样式内容闪烁如果把样式放在底部,对于IE浏览器,在某些场景下(点击链接,输入URL,使用书签进入等),会出现FOUC现象(逐步加载无样式的内容,等CSS加载后页面突然展现样式).对于Firefox会一直表现出 FOUC。
4、async和defer的作用是什么?有什么区别
答:首先,如果不使用async和defer name浏览器的当加载到scrpit标签的时候会重上到下进行加载,并在加载DOM的内容之前进行加载.也就是说不等待后续载入的文档元素,读到就加载并执行。
有 async,加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行(异步).async不保证顺序
有 defer,如果给script标签添加了defer属性,即使js放在head里面,它也会在HTML页面解析完毕之后再执行,也就是类似于把这个js放在了页面底部。简单来说就是等页面的html和css加载完毕之后再加载js。 defer脚本延迟到文档解析和显示后执行,有顺序
5、简述网页的渲染机制
1.解析HTML标签,构建DOM树。
2.解析CSS标签,构建CSSOM树。
3.把DOM和CSSOM组合成渲染树(render tree)。
4.在渲染树的基础上进行布局,计算每个节点的几何结构。
5.把每个节点绘制到屏幕上(painting)。