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

万字讲解内网横向渗透vulnstack(七):红日靶场7实战全流程-CS上线全部Web1/Web2/PC1/PC2/DC

万字讲解内网横向渗透vulnstack(七):红日靶场7实战全流程-CS上线全部Web1/Web2/PC1/PC2/DC

目录 一、渗透环境 1、网络拓扑 2、角色表 3、网络搭建 (1)网络适配器配置 ①修改Web1的网卡配置 ②修改Web2的网卡配置 ③修改PC1的网卡配置 (2)配置网段 ①编辑虚拟网络编辑器 ② vmnet2网卡 ③ vmnet14网卡 二、信息搜集 1、探测存活主机 2、探测端口 三、Redis渗透 1、生成ssh私钥 2、查看生成公钥文件 3、写入Redis服务器 (1) 直接连接未授权Redis (2)写入SSH公钥获取服务器权限 4、ssh连接 5、查看Web1的Nginx配置 四、Laravel渗透(Web2) 1、发现Laravel 2、下载PoC 3、执行PoC上传木马

能明显感受到,前端岗的新风口已经悄悄来了

最近和身边做前端的同行、几家科技公司的前端负责人聊下来,越聊越有感触——我们熟悉的那个前端岗,好像真的在悄悄变样了。以前总有人说前端是“切图仔”,上限低、可替代性强,甚至每年都有“前端已死”的论调,但这段时间明显能感觉到,风向彻底变了。不再是单纯比谁能更快还原设计稿、谁能搞定浏览器兼容性,行业对前端的需求,正在往更深入、更多元的方向走,那些悄悄布局新方向的人,已经开始抓住新机会了。这个新风口没有大张旗鼓的宣传,却在招聘市场、技术落地的细节里,藏满了信号。 🌪️跨端、工程化、可视化…… 企业的数字化转型,把前端推到了 C 位! 如果你还在原地踏步,就真的要被后浪拍在沙滩上了。 想要抓住这波风口,实现薪资翻倍? 这5 大核心能力,是你升咖的入场券:🎫 1️⃣ 跨端开发 📱:Uni-app/Taro/Flutter,一套代码跑遍全端,做真正的 “全栈”。 2️⃣ 工程化搭建 🏗️:Webpack/

WebP革命:从格式之争到WordPress性能优化的实战解析

WebP革命:从格式之争到WordPress性能优化的实战解析 当你在手机上浏览一个图片丰富的网站时,是否经常遇到页面加载缓慢、图片显示卡顿的情况?这背后往往与网站使用的图片格式密切相关。传统JPEG和PNG格式虽然普及,但在现代网页性能优化中已经显得力不从心。Google推出的WebP格式正在悄然改变这一局面——它能在保持同等画质的前提下,将图片体积缩减25%-35%,显著提升页面加载速度。 1. WebP技术解析:为何它能颠覆传统图像格式 WebP并非简单的另一种图片格式,而是Google基于VP8视频编码技术开发的全新一代图像解决方案。它的核心优势在于采用了更先进的预测编码算法,能够更高效地压缩图像数据。 与传统格式相比,WebP具有三大技术突破: * 有损压缩效率:在相同SSIM(结构相似性)指标下,比JPEG小25%-34% * 无损压缩效率:比PNG小26%左右,同时支持透明度通道 * 动画支持:可替代GIF,提供更高画质和更小体积 技术指标对比表: 特性JPEGPNGWebP压缩类型有损无损有损/无损透明度支持不支持支持支持动画支持不支持不支持支

WebGIS + 无人机 + AI:下一代智能巡检系统?

WebGIS + 无人机 + AI:下一代智能巡检系统?

WebGIS 遇上无人机,再叠加 AI 能力,巡检不再只是“看画面”,而是变成“智能决策系统”。 一、为什么 WebGIS + 无人机 + AI 是趋势? 在传统巡检场景中: * 电力巡检 → 人工拍照 * 工地巡查 → 人工记录 * 农业监测 → 靠经验判断 * 安防巡逻 → 事后回放 问题: * 数据无法实时分析 * 缺乏空间关联 * 没有智能预警能力 * 无法形成可视化决策系统 而结合: * WebGIS(三维可视化) * 无人机(数据采集) * AI(智能识别与分析) 我们可以构建: 一个真正的“空天地一体化智能巡检系统” 二、整体技术架构设计 1、系统分层架构 ┌──────────────────────────────┐ │ 前端可视化层 │ │ Cesium + Three.js + WebGL │ └──────────────┬───────────────┘ │ ┌──────────────▼───────────────┐ │ 业务中台层 │ │ AI推理