JS相关概念

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./css/style.css">
</head>
<body>
    html tag
    <script src="./js/jquery.js"></script>
</body>

</html>

为了防止白屏,最好是吧css刚在head里面,js放在body的最后面。如上。

为什么会白屏,还有FOUC是什么

  • 白屏
    1. 从上面的渲染机制可以看出来,当CSS文件写在最下端的时候,浏览器先解析html形成dom树,再解析css形成cssom树,两者结合形成渲染树,之后再将内容绘制到屏幕上,所以如果将css放在底部,那么加载时间就会变长,那么在形成渲染树绘制之前就会是白屏。
    2. 当JavaScript被置于顶部时,会禁用并发,并且阻止其后的文件的加载及组件的下载,所以也可能出现白屏。
  • FOUC
    对于firefox浏览器,当CSS样式被置于底部,html会先呈现出来,待到html加载完毕,再一次性加载CSS样式使得样式突然呈现,就有了闪屏的现象。

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

  • async:
    • HTML5 为<script>元素定义了 async 属性。
    • 这个属性与 defer 属性类似,都用于改变处理脚本的行为。同样与 defer 类似, async 只适用于外部脚本文件,并告诉浏览器立即下载文件。但与 defer不同的是,标记为 async 的脚本并不保证按照指定它们的先后顺序执行。
  • defer:
    • HTML 4.01 为<script>标签定义了 defer 属性。
    • 这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。因此,在<script>元素中设置defer 属性,相当于告诉浏览器立即下载,但延迟执行。

我觉得如果不用这两个属性的话,<script>标签会中断浏览器的渲染来解析脚本,如果加上这两属性他们会在浏览器渲染的同时把他们下载下来先不解析,等到页面dom,cssdom渲染完毕在执行,而defer会把脚本先后顺序按照你写的顺序解析,而async则没有这个功能。

浏览器渲染机制

  1. 解析 HTML 标签, 构建 DOM 树
  2. 解析 CSS 标签, 构建 CSSOM 树
  3. 把 DOM 和 CSSOM 组合成 渲染树 (render tree)
  4. 在渲染树的基础上进行布局, 计算每个节点的几何结构
  5. 把每个节点绘制到屏幕上 (painting)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简单介绍JavaScript的发展历史 JavaScript因互联网而生,回顾它的历史要从浏览器的历史讲起。 19...
    _Dot912阅读 516评论 0 3
  • 1. CSS和JS在网页中的放置顺序是怎样的? css放在head标签内,防止渲染时出现白屏 js放在最后body...
    billa_8f6b阅读 592评论 0 0
  • 1. CSS和JS在网页中的放置顺序是怎样的?CSS必须是在html之前载入,所以放在head标签里。JS放在CS...
    好好顽阅读 82评论 0 0
  • 1,CSS和JS在网页中的放置顺序是怎样的? 网站加载的整个完整过程是:1、首先浏览器从服务器接收到html代码,...
    进击的前端_风笑影阅读 322评论 0 0
  • 任务 CSS和JS在网页中的放置顺序是怎样的? 解释白屏和FOUC async和defer的作用是什么?有什么区别...
    mhy_web阅读 545评论 0 1