news 2026/4/15 13:10:31

一文大白话讲清楚script加载和执行顺序,包括script标签、defer、async、动态script等

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一文大白话讲清楚script加载和执行顺序,包括script标签、defer、async、动态script等

一文讲清楚script加载和执行顺序,包括script标签、defer、async、动态script等

1. 普通script标签

  • 先说原理,一个HTML文档,里面有会有html和script等
  • 浏览器一般是按照顺序解析执行的,比如下面的代码
<div>I`m Html</div><script>console.log('I`m script from script tag with no src')</script><div>I`m html ,too</div><scriptsrc='test.js'></script>/** * test.js * console.log('I`m script from script tag with src') */
  • 浏览器的解析和执行顺序是这样的

  • 也就是说浏览器是按行解析,按行执行的,如果执行到带有外部链接的script标签,就全部加载,然后执行,执行完以后再继续往下走

  • 这样就会有一个问题

  • 如果某一个出在文档中间的script标签很大,执行耗费了很长的时间,那么标签下面的HTML内容就得不到渲染,就会造成页面的卡顿

  • 聪明的你立刻就提出了解决方案,说把所有的script放在页面的底部,是不是就解决了问题,

  • 然而并不完美,以为这样的话,浏览器必须下载解析完所有的HTML内容,才会处理script,如果script里面有对HTML内容的改变,就会明显的延迟和跳动

  • 那应该怎么办呢

  • 先分析现在的问题是什么,是HTML的解析执行和script解析执行在同一个线程里,发生了资源竞争,也就是说我执行的时候你就得停,你执行的时候我就得停

  • 那怎么解决呢,那就让分开,也就是HTML你执行你的,script标签我执行我的,互不干扰,这不是不是好点了,怎么分开了,我们自然的想到了使用异步加载script

  • 那怎么实现异步呢,问得好,script标签有两个完美的特性defer和async可以实现异步

  • 他两都可以实现让script标签跟HTML分开加载和解析执行

  • 那有啥区别呢

2. defer

  • 首先说defer,他可以告诉浏览器,如果你碰到我,不要等待我加载和执行完,你继续往下处理你的HTML,我会在后台自己加载,等你处理完HTML构建出DOM,我再执行
<div>I`m Html</div><scriptdefersrc
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 14:01:10

Java毕设项目推荐-基于Java的网上宠物店管理系统宠物销售、服务预约、库存管理、客户互动【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/11 2:45:33

英伟达圣诞偷袭,200亿美元收购Groq

诸神缄默不语-个人技术博文与视频目录 看了substack的FOMO研究院圣诞特别篇介绍groq, LPU和英伟达实质性收购groq的文章。感觉写的非常好&#xff0c;及时分享。 &#xff08;因为限时48小时免费&#xff0c;趁还能看赶紧写&#xff09; Groq&#xff08;不是马斯克的grok&am…

作者头像 李华
网站建设 2026/4/10 21:37:55

transformer-explainer

https://poloclub.github.io/transformer-explainer/

作者头像 李华
网站建设 2026/4/10 11:56:43

真实污水处理项目中的S7-1200实战经验

西门子PLC1200真实项目案例程序十 KTp1200屏画面 十电路图 博途V16 V17版&#xff0c;模拟量输入输出处理&#xff0c;液位设置处理&#xff0c;流量处理&#xff0c;双设备轮换&#xff0c;modbus通讯控制变频器&#xff0c;事件记录&#xff0c;污水处理设备程序最近刚完成某…

作者头像 李华
网站建设 2026/4/14 20:14:44

JavaScript 常见算法复杂度总结(大O表示法)

大O表示法具体含义总结表时间复杂度详解大O表示名称含义示例增长曲线执行时间(n1000)假设O(1)常数时间执行时间不随输入规模变化数组索引访问、哈希表查找水平线1单位时间O(log n)对数时间执行时间随输入规模对数增长二分查找、平衡树操作缓慢上升曲线10单位时间O(√n)平方根时…

作者头像 李华