进阶任务1

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)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容