小白闯csdn 2020-03-25 16:17 采纳率: 0%
浏览 229

script 在什么情况下使用async和defer最优?

突然看到script中出现 async defer属性,不太理解,阅读了大量网上解析后,不知道怎么回事,之前感觉理解清楚了,现在我突然糊涂了(可能是没有休息好,此处是借口),不知道什么情况下使用async 和 defer 是最优的,请大神们给我一个通俗的解释.越俗越好.

以下是我理解的过程

阅读一些文档后我大概得到了以下的理解

  • async:仅适用于外链,下载时不会阻塞页面链接,脚本加载后立即执行,执行时阻塞html解析,不会按顺序执行那个完成就执行哪一个.执行的时候有可能页面没有加载完成.

  • defer:仅适用于外链,规定脚本延迟执行,不会阻塞页面解析,在 HTML 解析完成后,DOMContentLoaded 之前执行,按照出现的顺序执行.

得到以上理解之后看了一篇文章https://segmentfault.com/a/1190000006778717

这篇文章最后的结论是

其实这么讲来,最稳妥的办法还是把 script 写在 body 底部,没有兼容性问题,没有白屏问题,没有执行顺序问题,高枕无忧,不要搞什么defer和async的花啦~

在这片文章的评论中:

给出了使用async和defer的好处:节省时间

那问题来了,在优化的情况下,

问题一:我想使用async和defer,什么时候使用async defer不会出现兼容,白屏等问题,

问题二:或者说在出现兼容,白屏等问题,在优化的情况下有没有解决方案

  • 写回答

1条回答 默认 最新

  • lshen01 2023-03-17 03:43
    关注

    参考GPT和自己的思路:

    对于问题一,最优的情况是当你的脚本对页面的呈现不需要直接影响,比如在页面的底部加载一些跟用户交互无关的统计脚本等等。这时,可以使用async和defer,异步加载脚本,使得页面的渲染不受影响,同时不会导致兼容性、白屏等问题。具体来说,如果你不需要让页面等待脚本加载完成而直接执行,使用async能提高加载速度;如果你需要按照顺序依次加载脚本,使用defer可以保证顺序。

    对于问题二,如果出现兼容性、白屏等问题,可以考虑以下几个解决方案:

    1. 使用jQuery的$.getScript()来异步加载脚本,这样能够避免使用async和defer带来的问题。

    2. 通过动态创建script标签,并设置defer属性,达到异步加载脚本的效果,并且保证执行顺序。

    3. 如果必须使用async属性加载脚本,并且带来了一些问题,可以在脚本中使用DOMContentLoaded事件(或jQuery的$(document).ready()),在页面加载完成后再执行脚本。这样能够兼容大多数情况,在效率和兼容性之间寻找平衡。

    总之,在使用async和defer的过程中,需要仔细考虑脚本对页面的影响,避免出现兼容性、白屏等问题,同时寻找最优方案,优化页面性能。

    评论

报告相同问题?

悬赏问题

  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测