美文网首页
JS相关概念

JS相关概念

作者: 饥人谷_有点热 | 来源:发表于2017-05-30 09:44 被阅读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.简述网页的渲染机制

    • 解析 HTML 标签, 构建 DOM 树
    • 解析 CSS 标签, 构建 CSSOM 树
    • 把 DOM 和 CSSOM 组合成 渲染树 (render tree)
    • 在渲染树的基础上进行布局, 计算每个节点的几何结构
    • 把每个节点绘制到屏幕上 (painting)
    image.png

    相关文章

      网友评论

          本文标题:JS相关概念

          本文链接:https://www.haomeiwen.com/subject/nfslfxtx.html