Gahing's blog Gahing's blog
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Gahing / francecil

To be best
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前端基础

    • 编程语言

      • CSS

      • HTML

        • LearningHTML
        • htmlparser实现
        • inline-block 文本宽度溢出问题
        • svg笔记
        • css与js的阻塞关系
        • document-write重写
        • getElementsByClassName遍历时出现的问题
        • 前端小知识-格式化标签
        • 前端监听资源加载错误
        • 浅谈 View Transitions API
        • 通读 HTML Standard
      • JavaScript

      • Rust

      • TypeScript

      • WebAssembly

    • 开发工具

    • 前端调试

    • 浏览器原理

    • 浏览器生态

  • 应用框架

  • 工程能力

  • 应用基础

  • 专业领域

  • 业务场景

  • 大前端
  • 前端基础
  • 编程语言
  • HTML
gahing
2018-10-01

css与js的阻塞关系

在 html 的解析过程中,样式文件和脚本文件之间是否有依赖关系呢?

我们经常看到这样一句话

浏览器将延迟脚本执行和 DOM 构建,直至其完成 CSSOM 的下载和构建

引自:使用 JavaScript 添加交互

简单进行了以下测试

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>页面</title>
  <script>var start = +new Date;</script>
  <script>
    var end1 = +new Date;
    console.log(end1-start);
  </script>
  <script>
    var end2 = +new Date;
    console.log(end2-start);
  </script>
  <link rel="stylesheet" href="./css/style.css" />
   
  <script>
    var end3 = +new Date;
    console.log(end3-start);
  </script>
</head>

<body>
  <span id="span">test</span>
  <script>
    var end4 = +new Date;
    console.log(end4-start);
    document.getElementById("span").style.height = "20px";
    var end5 = +new Date;
    console.log(end5-start);
    alert((end1-start)+','+(end2-start)+','+(end3-start)+','+(end4-start)+','+(end5-start))
  </script>

</body>

</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

得到了这样的结果

0
3
82
83
83
1
2
3
4
5

说明 script 的执行需要等待前面 css 的执行。

又看到这样一句话:

Firefox 在样式表加载和解析的过程中,会禁止所有脚本。而对于 WebKit 而言,仅当脚本尝试访问的样式属性可能受尚未加载的样式表影响时,它才会禁止该脚本。

引自:浏览器的工作原理

但测试了ios safari 12(WebKit),发现还是会禁用脚本,脚本还是会被样式阻塞

假设能实现,引擎是如何判断脚本中访问的样式会受未加载的样式表影响?欢迎探讨

编辑 (opens new window)
#HTML
上次更新: 2024/09/01, 23:56:56
svg笔记
document-write重写

← svg笔记 document-write重写→

最近更新
01
浅谈代码质量与量化指标
08-27
02
快速理解 JS 装饰器
08-26
03
Vue 项目中的 data-v-xxx 是怎么生成的
09-19
更多文章>
Theme by Vdoing | Copyright © 2016-2024 Gahing | 闽ICP备19024221号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式