浏览器如何加载页面的,script 脚本阻塞有什么解决办法,defer 和 async 的区别是什么

从浏览器地址栏的请求链接开始,浏览器通过 DNS 解析查到域名映射的IP 地址,成功之后浏览器端向此 IP 地址取得连接,成功连接之后,浏览器端将请求信息通过HTTP 协议向此 IP 地址所在服务器发起请求,服务器接收到请求之后等待处理,最后向浏览器端发回响应,此时在 HTTP 协议下,浏览器从服务器接收到 text/html 类型的代码,浏览器开始显示此 html,并获取其中内嵌资源地址,然后浏览器再发起请求来获取这些资源,并在浏览器的 html 中显示
1、 推迟加载(延迟加载)
如果页面初始的渲染并不依赖于 js 或者 CSS 可以用推迟加载,就是最后在加载js 和css,把引用外部文件的代码写在最后
2、 defer 延迟加载

在文档解析完成开始执行,并且在 DOMContentLoaded 事件之前执行完成,会按照他们在文档出现的顺序去下载解析。效果和把script 放在文档最后之前是一样的。

注:defer 最好用在引用外部文件中使用,用了 defer 不要使用document.write()
方法;使用 defer 时最好不要请求样式信息,因为样式表可能尚未加载,浏览器会禁止该脚本等待样式表加载完成,相当于样式表阻塞脚本执行
3、 异步加载
async 异步加载:就是告诉浏览器不必等到加载完外部文件,可以边渲染边下载,什么时候下载完成什么时候执行。defer 和 async 的区别:有了async 属性,表示后续文档的加载和渲染与 js 脚本的加载和执行是并行进行的,即异步执行;
有了 defer 属性,加载后续文档的过程和 js 脚本的加载(此时仅加载不执行)是并行进行的(异步),js 脚本的执行需要等到文档所有元素解析完成之后,DOMContentLoaded 事件触发执行之前

posted @   jialiangzai  阅读(97)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异

喜欢请打赏

扫描二维码打赏

微信打赏

点击右上角即可分享
微信分享提示