前端引入的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

Z-Image LoRA 训练整合包及使用教程:使用ai-toolkit的最全面的 z-image-turbo lora训练实战教程

Z-Image LoRA 训练整合包及使用教程:使用ai-toolkit的最全面的 z-image-turbo lora训练实战教程

Z-Image LoRA 训练整合包及使用教程:使用ai-toolkit的最全面的 z-image-turbo lora训练实战教程 Z-ImageLoRA训练z-image-turbo微调教程AI绘画模型微调训练器部署数据标注 这篇文章从头到尾、手把手带你完成一套真正能用的 Z-Image LoRA(以 z-image-turbo 为基础)训练流程。文章按实操步骤拆成十部分,内容尽量贴近日常操作和命令,让你能一步步复刻。 👇️👇️教程所需的z-image lora训练整合包下载 z-image lora整合包下载地址 https://pan.quark.cn/s/c3da18507004 目录 1. 概览与准备 2. 训练集准备(图片来源与数量) 3. 标注(生成训练提示词) 4. 训练器选择与本地部署(lto-kate / l2t / toolket) 5. 上传训练集到训练器并创建数据集 6. 训练器参数设置(关键参数详解) 7. 测试提示词编写与每250步测试策略 8.

DeepCreamPy:终极AI去码工具完整使用指南

想要快速去除二次元图片中的马赛克和遮挡标记吗?DeepCreamPy正是您需要的AI去码神器!🎨 这款基于深度学习的开源工具能够自动识别并智能填充被遮挡的艺术作品区域,让您的二次元图片恢复完整视觉效果。 【免费下载链接】DeepCreamPy 项目地址: https://gitcode.com/gh_mirrors/dee/DeepCreamPy 🤔 什么是DeepCreamPy去码工具? DeepCreamPy是一款专门针对二次元图片设计的AI去码工具,它通过先进的神经网络技术,能够处理任何尺寸和形状的遮挡标记。无论是黑色线条、粉色爱心,还是其他类型的马赛克,这款工具都能提供高质量的去码效果。 ✨ 核心功能亮点 全能去码支持 * 任意尺寸图片:从小图标到高清大图,通通支持 * 各种遮挡类型:黑线、爱心、文字等不同形状的标记 * 高质量修复:AI智能填充,保持原图艺术风格 简单操作流程 1. 在GIMP或Photoshop中将遮挡区域标记为绿色 2. 运行DeepCreamPy进行智能去码 3. 获得完整无遮挡的二次元图片 🚀 快速开始教程

Windows纯本地部署OpenClaude:从零搭建你的7×24小时AI助理,打通微信/飞书

无需云服务器,一台Windows电脑就能让AI助手24小时在线,还能通过手机随时指挥它干活 前言 之前写过一篇用云服务器部署OpenClaude的教程,不少读者反馈:“一定要买服务器吗?我只有一台Windows电脑行不行?” 答案是:当然可以! OpenClaude本来就是完全支持本地部署的开源AI助手框架。你只需要一台Windows电脑,就能跑起一个完整的AI服务,而且可以通过微信、飞书随时随地指挥它——查文件、开软件、管理电脑,甚至让它在你睡觉的时候帮你处理任务。 这篇文章将手把手教你在Windows环境纯本地部署OpenClaude,并打通飞书和企业微信,全程不需要买云服务器。 一、先搞懂:三种部署方式,你选哪个? OpenClaude支持三种部署模式,先看这张图快速理解区别: 部署方式架构优点缺点本地部署全在本地电脑无需服务器、免费、隐私安全电脑关机AI就下线云端部署全在云服务器7×24小时在线、稳定需要付费买服务器混合部署云端大脑+本地手脚24小时在线+能操作本地电脑架构复杂、需要两台机器 本文选择第一种:纯本地部署。虽然电脑关机时AI会下线,但

AI如何帮你快速生成机械零件3D模型?

快速体验 1. 打开 InsCode(快马)平台 https://www.inscode.net 2. 点击'项目生成'按钮,等待项目生成完整后预览效果 输入框内输入如下内容: 创建一个能够根据用户输入的自然语言描述自动生成机械零件3D模型的Web应用。用户可以通过简单的文字描述(如'生成一个M6螺栓,长度30mm,六角头'),系统自动转换为3D模型代码(如STL或STEP格式),并提供实时预览和下载功能。应用需包含常见机械零件库(螺栓、齿轮、轴承等)的预设模板,支持参数化调整。使用Three.js或类似库实现3D渲染,后端处理用户输入并生成对应模型代码。 最近在做一个机械设计项目,需要频繁创建各种零件的3D模型。传统建模软件虽然强大,但学习成本高、操作繁琐。于是我开始探索AI辅助开发的可能性,发现用自然语言描述就能自动生成3D模型代码的方案特别实用。以下是具体实现思路和经验分享。 1. 核心功能设计 这个Web应用的核心是让用户用日常语言描述零件(比如&