浏览器如何加载页面的,script 脚本阻塞有什么解决办法,defer 和 async 的区别是什么
从浏览器地址栏的请求链接开始,浏览器通过 DNS 解析查到域名映射的IP 地址,成功之后浏览器端向此 IP 地址取得连接,成功连接之后,浏览器端将请求信息通过HTTP 协议向此 IP 地址所在服务器发起请求,服务器接收到请求之后等待处理,最后向浏览器端发回响应,此时在 HTTP 协议下,浏览器从服务器接收到 text/html 类型的代码,浏览器开始显示此 html,并获取其中内嵌资源地址,然后浏览器再发起请求来获取这些资源,并在浏览器的 html 中显示
1、 推迟加载(延迟加载)
如果页面初始的渲染并不依赖于 js 或者 CSS 可以用推迟加载,就是最后在加载js 和css,把引用外部文件的代码写在最后
2、 defer 延迟加载
注:defer 最好用在引用外部文件中使用,用了 defer 不要使用document.write()
方法;使用 defer 时最好不要请求样式信息,因为样式表可能尚未加载,浏览器会禁止该脚本等待样式表加载完成,相当于样式表阻塞脚本执行
3、 异步加载
async 异步加载:就是告诉浏览器不必等到加载完外部文件,可以边渲染边下载,什么时候下载完成什么时候执行。defer 和 async 的区别:有了async 属性,表示后续文档的加载和渲染与 js 脚本的加载和执行是并行进行的,即异步执行;
有了 defer 属性,加载后续文档的过程和 js 脚本的加载(此时仅加载不执行)是并行进行的(异步),js 脚本的执行需要等到文档所有元素解析完成之后,DOMContentLoaded 事件触发执行之前
本文来自博客园,作者:jialiangzai,转载请注明原文链接:https://www.cnblogs.com/zsnhweb/articles/17507572.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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的设计差异