前端引入的JS加载失败页面功能无法使用?JS加载失败的终极解决方案

前端引入的JS加载失败页面功能无法使用?JS加载失败的终极解决方案
在这里插入图片描述
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》专栏19年编写主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
🌛《开源项目》本专栏主要介绍目前热门的开源项目,带大家快速了解并轻松上手使用
🍎 《前端技术》专栏以实战为主介绍日常开发中前端应用的一些功能以及技巧,均附有完整的代码示例
✨《开发技巧》本专栏包含了各种系统的设计原理以及注意事项,并分享一些日常开发的功能小技巧
💕《Jenkins实战》专栏主要介绍Jenkins+Docker的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程
🌞《Spring Boot》专栏主要介绍我们日常工作项目中经常应用到的功能以及技巧,代码样例完整
👍《Spring Security》专栏中我们将逐步深入Spring Security的各个技术细节,带你从入门到精通,全面掌握这一安全技术
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

前端引入的JS加载失败页面功能无法使用,客户投诉后看我三步处理完成

1. 事故起因

今天在公司被客户反馈系统功能无法使用,通过排查发现发现是项目中的某一个JS一直加载失败导致,该公共JS工具类放在某一个CDN节点上(多项目共享引入),由于CDN节点故障,导致加载失败,从而影响页面功能!

在这里插入图片描述


JS文件加载失败是前端开发常见问题之一,既然问题找到了那么就很好解决了,这里分享一下博主的解决思路,教你轻松解决这个问题!

2. 为什么会出现 JS 加载失败?

有小伙伴要问了了?为什么会出现 JS 加载失败?
由于网络请求具有不确定性,特别是在移动端和弱网环境下,JS文件加载可能因以下原因失败:

  • 网络问题:用户的网络环境不稳定
  • CDN 故障CDN节点挂了,资源就直接 404
  • 缓存污染:某些浏览器或代理缓存了错误的文件

以上这些问题不可完全避免,但我们能在代码层面进一步完善尽量给用户进行兜底。

3. 解决思路

既然是加载失败,那么是否可以提供一种重试机制,当前端加载JS失败了进行重试,另外由于单节点的问题,我们还可以多源备份,避免单节点故障导致的问题!

在这里插入图片描述
  • 自动重试:加载失败后,尝试再次发起请求
  • 多源加载:比如主域名失败后,切换备用的 CDN 地址

4. 基础监听与重试方案

核心逻辑是:用 script 标签去加载资源,监听 onerror 事件,失败后重试,以下是加载重试的代码,小伙伴们可以根据自身的需求进行调整改动:

functionloadScript(url, options ={}){const{ maxRetry =3, timeout =5000}= options;let attempt =0;returnnewPromise((resolve, reject)=>{constload=()=>{ attempt++;const script = document.createElement("script"); script.src = url +(url.includes("?")?"&":"?")+"retry="+ attempt; script.async =true;let timer =setTimeout(()=>{ script.remove();if(attempt < maxRetry){ console.warn(`加载超时,正在重试 ${attempt}/${maxRetry} ...`);load();}else{reject(newError(`加载超时:${url}`));}}, timeout); script.onload=()=>{clearTimeout(timer);resolve();}; script.onerror=()=>{clearTimeout(timer); script.remove();if(attempt < maxRetry){ console.warn(`加载失败,正在重试 ${attempt}/${maxRetry} ...`);load();}else{reject(newError(`加载失败:${url}`));}}; document.head.appendChild(script);};load();});}

使用方式

loadScript("https://cdn.yourname.com/app.js",{ maxRetry:3, timeout:3000}).then(()=>{ console.log("脚本加载成功");}).catch((err)=>{ console.error("脚本加载最终失败:", err);// 加载重试依旧失败可以提示用户,比如提示用户刷新// alert('资源加载失败,请重新刷新页面')});

5. 多源备份加载

上面我们提到了,由于我们是单节点一旦节点故障就会出现加载失败的问题,既然如此我们还可以准备多个地址:

const cdnList =["https://cdn1.yourname.com/app.js","https://cdn2.yourname.com/app.js","https://cdn3.yourname.com/app.js"];(async()=>{for(const url of cdnList){try{awaitloadScript(url); console.log("成功加载:", url);break;}catch(e){ console.warn("失败,尝试下一个源:", url);}}})();

这样,即使某个 CDN 节点彻底挂了,也能通过备用源恢复

6. 总结

通过本文的介绍,相信小伙伴已经掌握了JS加载失败的重试方案,总结一下无非就是解决以下几个问题:

加载失败的重试:失败重试,次数通常2 - 3次足够,过多重试会影响用户体验
CDN容灾:准备多个CDN地址,主地址失败时自动切换
提供降级方案:关键资源重试加载依然失败时显示友好提示(比如演示代码中弹出警告框告知刷新)

通过JS加载重试机制可以提升我们应用的可靠性,即便因为各种原因出现加载失败的问题,都尽可能给用户进行兜底。如果你也和博主一样有类似的问题,不如花一点时间实现重试逻辑,让你的应用更加健壮可靠!

如果你在实践过程中有任何疑问或更好的扩展思路,欢迎在评论区留言,最后希望大家一键三连给博主一点点鼓励!


Read more

Python 虚拟环境管理工具 UV:从安装到高级用法的详细教程

前言 在 Python 开发中,管理不同项目的依赖包和 Python 版本是开发者常常遇到的问题。不同项目可能依赖不同版本的库,甚至同一个库在不同版本下的行为可能不同。为了避免这些问题,使用虚拟环境成为了解决方案。虚拟环境通过隔离每个项目的依赖,避免了版本冲突问题。 在 Python 中,常用的虚拟环境管理工具有 virtualenv、venv 和一些第三方工具,如 UV。本文将详细介绍如何使用 UV 虚拟环境管理工具,从安装、创建虚拟环境、管理 Python 版本和依赖包,到切换和删除虚拟环境。 一、什么是 UV? UV 是一个简洁、轻量级的 Python 虚拟环境管理工具。它与传统的虚拟环境管理工具(如 virtualenv 或 venv)相比,提供了更加简单和清晰的命令行界面,使得开发者可以高效管理 Python 环境。UV

By Ne0inhk
[Python] Windows中CMD输入python总是打开商店?教你彻底解决这个“陷阱”

[Python] Windows中CMD输入python总是打开商店?教你彻底解决这个“陷阱”

在 Windows 10 和 Windows 11 系统中,很多新手 Python 学习者可能都遇到过这样一个奇怪的问题:在命令提示符(CMD)中输入 python 命令时,不是打开 Python 解释器,而是直接跳转到微软商店。这是怎么回事?难道我操作错了? 别慌,这其实是 Windows 系统自身的“坑”,而不是你的错。本文将带你一步一步关闭这个陷阱式“别名”机制,并且教你正确安装可用的 Python 环境,让你轻松开启 Python 编程之旅! 一、为什么输入 python 会打开 Microsoft Store? 这其实是 Windows 系统自带的一种“别名映射”机制。当你在命令行中输入 python 或

By Ne0inhk
Python从0到100(九十一):基于Daily_and_Sports_Activities数据集的CNN模型构建

Python从0到100(九十一):基于Daily_and_Sports_Activities数据集的CNN模型构建

前言:零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者! 【优惠信息】 • 新专栏订阅前200名享9.9元优惠 • 订阅量破200后价格上涨至19.9元 • 订阅本专栏可免费加入粉丝福利群,享受: - 所有问题解答 -专属福利领取 欢迎大家订阅专栏:零基础学Python:Python从0到100最新最全教程! 本文目录: * 一、Daily_and_Sports_Activities数据集 * 1.数据集介绍 * 2.数据集内容 * 3.数据集文件结构 * 二、数据集处理 * 1. 环境设置 * 2. 数据集下载 * 3. 数据预处理 * 3.1 参数设置详解

By Ne0inhk
创建自己专属DeepSeek实现大模型 全过程!!!(超详细教程)

创建自己专属DeepSeek实现大模型 全过程!!!(超详细教程)

🌟实现DeepSeek大模型的探索之旅🚀 Hey小伙伴们,今天我们来聊聊一个超燃的话题——用Java实现DeepSeek大模型!🔥 📚背景介绍         DeepSeek是一个高性能的深度学习模型,通常用于处理复杂的搜索和推荐任务。它基于深度学习算法,能够高效地从大量数据中提取关键信息,并生成精准的搜索结果或推荐内容。虽然DeepSeek的原生实现可能依赖于Python和深度学习框架(如TensorFlow或PyTorch),但用Java来实现其关键逻辑和数据处理部分同样充满挑战和乐趣!🎉 目录 一、部署本地 DeepSeek 模型(核心步骤) 1.1 安装 Ollama(模型管理工具) 1.2 Ollama安装步骤  1.3 下载 DeepSeek-R1 模型 1.4 验证安装 二、Java调用 2.1 Java代码 2.2 调用结果 一、部署本地 DeepSeek 模型(核心步骤) 1.1

By Ne0inhk