JS相关概念

2017-05-30  本文已影响0人  饥人谷_有点热

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

CSS放在head标签中
JS放在body标签最底部
为什么这样放置

浏览器在解析文档时,当解析到<script>标签时,会解析其中的脚本(对于外链的JavaScript文件,需要先加载该文件内容,再进行解析),然后立即执行,这整个过程都会阻塞文档解析,直到脚本执行完才会继续解析文档。就是说由于脚本是同步加载和执行的,它会阻塞文档解析,这也解释了为什么现在通常建议将<script>标签放在</body>标签前面,而不是放在<head>标签里。

2.解释白屏和FOUC

白屏问题

如果把样式放在底部,对于IE浏览器或者chrome,在某些场景下(新窗口打开,刷新等)页面会出现白屏,而不是内容逐步展现。可以通过使用 link 标签将样式表放在顶部优先加载CSS,但是如果在CSS中使用 @import 标签,即使 CSS 放入link, 并且放在头部,也可能出现白屏。

FOUC (Flash of Unstyled Content) 无样式内容闪烁

如果把样式放在底部,对于IE浏览器,在某些场景下(点击链接,输入URL,使用书签进入等),会出现 FOUC 现象(逐步加载无样式的内容,等CSS加载后页面突然展现样式).对于 Firefox 会一直表现出 FOUC .

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

defer

这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。因此,在<script>元素中设置defer属性,相当于告诉浏览器立即下载,但延迟执行。

async

这个属性与defer类似,都用于改变处理脚本的行为。同样与defer类似,async只适用于外部脚本文件,并告诉浏览器立即下载文件。但与defer不同的是,标记为async的脚本并不保证按照它们的先后顺序执行。

区别

如果加了async属性就相当于单独开了一个进程去独立加载和执行,而defer是和将<script>放到<body>底部一样的效果。

4.简述网页的渲染机制

image.png
上一篇下一篇

猜你喜欢

热点阅读