前端資源加載失敗后重試加載(CSS,JS等引用資源)

前端資源加載失敗后的重試

.前端引用資源時出現了資源加載失敗(這里針對的是路徑引用異常或者url解析錯誤時)
解決這個問題首先要明確一下幾個步驟

1.什么情況或者什么時候重試
2.如何重試

3.重試過程中的邊界處理

這里引入里三個測試腳本,分別加載里三個不同的腳本其中1,3是正常輸出,2的內部輸出異常。但目前三個進本的加載時正常的
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
此時我們手動修改一個引用,讓其出現加載異常這里修改1的引用地址
在這里插入圖片描述
這里控制臺目前捕獲到了兩種錯誤一種是引用地址引起的資源加載錯誤,一種是引用內部的錯誤;
前面我們提到過我們需要判斷什么時候重試
這里我們針對的是資源加載異常也就是引用地址問題引起的
所以我們需要在一開始就先進行錯誤類型的判斷。
因為我們瀏覽器加載的這些引用都屬于同步任務,順序進行的所以我們注冊的時間應該放大最開始的位置

在這里插入圖片描述
在這里插入圖片描述
此時我們發現并沒打印這個捕獲,這是因為‘error’這類事件是不會冒泡的,當然你在監聽這個窗口時就不會有捕獲,所以腳本加載出現了異常但是由于不能冒泡到捕獲內部所以無法得到監聽,這個時候我們就需要開啟冒泡,讓這個監聽發生在捕獲期間
在這里插入圖片描述
在這里插入圖片描述
由于監聽錯誤的事件針對的是整個窗口所有的錯誤當我們腳本內部,及引用都錯誤的時候這里會出現兩次打印
在這里插入圖片描述
在這里插入圖片描述
可以利用監聽事件內部提供的返回參數進行進一步處理
在這里插入圖片描述
在這里插入圖片描述
這里我們只處理類型是加載錯誤導致的,事件異常的我們不做處理,這樣我們就得到了一個基本的加載錯誤類型的獲取
在這里插入圖片描述
在這里插入圖片描述
借助返回參數內部的e.target 我們可以獲取到腳本類型錯誤目標進一步縮小范圍
在這里插入圖片描述
重試的邏輯遵循上述前期獲取的類型約束進行

<script>//可重試的資源列表const dmmains=['1121212.com','122323411.com','localhost:8082']//創建一個重試的映射關系,用來檢測是重試過程失敗還是默認資源失敗const handleRetry={};window.addEventListener('error',(e)=>{if(e instanceof ErrorEvent || e.target.tagName!=='SCRIPT'){return}//獲取當前資源的路徑let basePath=e.target.src;//重新創建一個發送的url對象const urls=new URL(basePath);//根據獲取的url對象獲取基礎的路徑名稱建立對應關系const keys = urls.pathname//判斷當前的映射是否存在,用來記錄是否是第一重試if(!(keys in handleRetry)){handleRetry[keys] = 0}//用來記錄當前的映射地址的下標,方便在下次進行重試時重新進行地址切換const index = handleRetry[keys]//邊界處理判斷當前重試是否已經達到資源列表的最大值結束重試if(index>dmmains.length){return}const hosts= dmmains[index];//地址計數++ 進行下一步地址選取handleRetry[keys]++urls.host = hosts;//為了保證加載的順序依舊這里需要人為阻塞一下頁面加載線程,保證重試的腳本重試后加載順序依舊與原來一直,// 這里針對特定環境,如果引用沒有前后關系這里可以省略// document.write(`\<script src=${urls}><\/script>`) //特別注意該方式只針對特殊環境要求,因為會有性能問題,阻塞主線程加載console.log('當前重試的地址',hosts)//手動創建一個腳本元素,將當前重試地址替換進行重試const scripts=document.createElement('script');scripts.src = urls.toString()//將當前異常的腳本地址進行重試替換,將新重試的腳本放到異常腳本之前e.target.parentElement.insertBefore(scripts,e.target)//將重試結束的元素從頁面中清除e.target.remove()},true)</script>

根據我們的資源列表進行了兩次重試后正常加載了資源,但是我們發現結果返回的資源列表內打印的順序不對,1重試后到了最后,針對特殊資源加載的要求如果需要預先加載某些特定資源時我們需要調整該順序加載(但是資源加載的邏輯是同步的,我們需要人為阻塞線程讓重試資源進行優先重試加載)
在這里插入圖片描述
使用原生的 document.write進行阻塞,特別注意這里僅針對特殊要求下使用,該方式會阻塞線程造成性能問題
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76266.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76266.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76266.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

無刷電機槽數相同、轉子極數不同的核心區別

一、基礎原理差異 無刷電機的核心參數: 槽數(定子槽數,記為 ( Z )):定子鐵芯上的繞組槽數量,決定繞組布局。極數(轉子磁極數,記為 ( 2p )):轉子上的永磁體磁極對數(總極數為 ( 2p ),如 ( p=4 ) 表示 8 極)。核心關系:槽極配合(( Z/2p ))決定電機電磁結構,相同…

6.Rust+Axum:打造高效 WebSocket 實時通信聊天室

摘要 本文詳細介紹 RustAxum 在 WebSocket 實時通信開發中的應用&#xff0c;包括雙向通信、狀態管理等&#xff0c;實踐構建聊天室應用。 一、引言 在當今的 Web 應用開發中&#xff0c;實時通信變得越來越重要。WebSocket 作為一種在單個 TCP 連接上進行全雙工通信的協議&…

clickhouse數據導出導入

clickhouse數據導出導入 CSV格式導出為csv格式導入為csv格式 JSON格式導出為json格式導入為json格式 SQL格式導出為SQL CSV格式 導出為csv格式 # 不帶表頭 clickhouse-client -h 127.0.0.1 --database"db" --query"select * from db.test_table FORMAT CSV&qu…

人臉掃描黑科技:多相機人臉掃描設備,打造你的專屬數字分身

隨著科技的迅猛發展&#xff0c;人臉掃描這個詞已經并不陌生&#xff0c;通過人臉掃描設備制作超寫實人臉可以為影視制作打造逼真角色、提升游戲沉浸感&#xff0c;還能助力教育機構等領域生產數字人以豐富教學資源&#xff0c;還在安防、身份識別等領域發揮關鍵作用&#xff0…

學習型組織與系統思考

真正的學習型組織不是只關注個人的學習&#xff0c;而是關注整個系統的學習。—彼得圣吉 在這兩年里&#xff0c;越來越多的企業開始詢問是否可以將系統思考的內容內化給自己的內訓師&#xff0c;進而在公司內部進行教學。我非常理解企業這樣做的動機&#xff0c;畢竟內部講師…

gl-matrix 庫簡介

gl-matrix 庫簡介 gl-matrix 是一個高性能的 JavaScript 矩陣和向量庫&#xff0c;專門為 WebGL 和其他 3D 圖形應用設計。它提供了處理 2D、3D 和 4D 向量以及矩陣運算的高效方法。 主要特性 高性能&#xff1a;經過高度優化&#xff0c;執行速度快輕量級&#xff1a;體積小…

大語言模型的訓練、微調及壓縮技術

The rock can talk — not interesting. The rock can read — that’s interesting. &#xff08;石頭能說話&#xff0c;不稀奇。稀奇的是石頭能讀懂。&#xff09; ----硅谷知名創業孵化器 YC 的總裁 Gar Tan 目錄 1. 什么是大語言模型&#xff1f; 2. 語言建模&#xff…

那些能夠直接編譯到 WebAssembly 的 Rust Crates

一、為什么有的 Crate “跑不起來”&#xff1f; 在最常見的 瀏覽器環境 中&#xff0c;Wasm 沙盒本身缺少操作系統功能和標準 C 運行時支持。以下幾類依賴若出現在 crate 中&#xff0c;就很可能導致編譯或運行時出錯&#xff1a; C / 系統庫綁定 瀏覽器環境沒有 libc、dlope…

Ext系列?件系統

Ext系列?件系統 1. 理解硬件1.1 磁盤的物理結構1.2 磁盤的存儲結構1.3 磁盤的邏輯結構理解過程實際過程 1.4 CHS&&LBA地址 2. 引入文件系統塊分區innode 3. Ext2文件系統3.1 宏觀認識3.2 block group3.3 塊組內部3.3.1 GDT&#xff08;Group Descriptor Table&#xf…

元宇宙概念興起,B 端數字孿生迎來哪些新機遇?

在科技飛速發展的當下&#xff0c;元宇宙概念如同一顆璀璨新星&#xff0c;迅速吸引了全球的目光。隨著元宇宙的興起&#xff0c;與之緊密相關的 B 端數字孿生技術也迎來了前所未有的發展機遇。元宇宙與 B 端數字孿生的融合&#xff0c;正悄然改變著多個行業的運作模式&#xf…

從數字化到智能化,百度 SRE 數智免疫系統的演進和實踐

1. 為什么 SRE 需要數智免疫系統&#xff1f; 2022 年 10 月&#xff0c;在 Gartner 公布的 2023 年十大戰略技術趨勢中提到了「數字免疫系統」的概念&#xff0c;旨在通過結合數據驅動的一系列手段來提高系統的彈性和穩定性。 在過去 2 年的時間里&#xff0c;百度基于該…

4月18日復盤

4月18日復盤 一、深度學習概述 ? 傳統機器學習算法依賴人工設計特征、提取特征&#xff0c;而深度學習依賴算法自動提取特征。深度學習模仿人類大腦的運行方式&#xff0c;從大量數據中學習特征&#xff0c;這也是深度學習被看做黑盒子、可解釋性差的原因。 ? 隨著算力的提…

C++每日訓練 Day 17:構建響應式加載動畫與異步數據處理

&#x1f4d8; 本篇目標是&#xff1a;在 GUI 信號機制基礎上&#xff0c;構建一個完整的“點擊按鈕 → 顯示加載動畫 → 異步加載數據 → 顯示結果”的響應式界面流程。通過協程掛起/恢復機制&#xff0c;實現清晰的異步邏輯&#xff0c;避免回調地獄。 &#x1f501; 回顧 Da…

PyTorch深度學習框架60天進階學習計劃 - 第45天:神經架構搜索(二)

PyTorch深度學習框架60天進階學習計劃 - 第45天&#xff1a;神經架構搜索&#xff08;二&#xff09; 第二部分&#xff1a;權重共享策略的計算效率優化 8. 權重共享的理論基礎 權重共享策略的理論基礎來自于多任務學習(Multi-Task Learning, MTL)和遷移學習(Transfer Learn…

深入理解分布式緩存 以及Redis 實現緩存更新通知方案

一、分布式緩存簡介 1. 什么是分布式緩存 分布式緩存&#xff1a;指將應用系統和緩存組件進行分離的緩存機制&#xff0c;這樣多個應用系統就可以共享一套緩存數據了&#xff0c;它的特點是共享緩存服務和可集群部署&#xff0c;為緩存系統提供了高可用的運行環境&#xff0c…

記錄學習的第二十九天

還是力扣每日一題。 本來想著像昨天一樣兩個循環搞定的&#xff0c;就下面&#x1f447;&#x1f3fb; 不過&#xff0c;結果肯定是超時啦&#xff0c;中等題是吧。 正確答案是上面的。 之后就做了ls題單第一部分&#xff0c;首先是定長滑窗問題 這種題都是有套路的&#xff0…

Win11關閉防火墻方法

網上講的win11的方法都試過了&#xff0c;但是在實際使用過程中還是會顯示有威脅殺掉原本要使用的程序&#xff0c;下面我介紹的這個方法親測有效&#xff0c;必須百分百關掉防火墻 搜索安全中心打開Windows安全中心 打開病毒和威脅防護 點擊管理設置 將設置中所有顯示開的都…

幾個常用的快速處理服務器命令和故障排查

1. 查看剩余的內存 free -m top //當然了還有top可以實時觀測 顯示剩余內存,以M為單位. 2. 查看剩余的空間 df -h 顯示指定磁盤文件的可用空間。如果沒有文件名被指定&#xff0c;則所有當前被掛載的文件系統的可用空間將被顯示 3.找出大文件的常用方法 du --max-depth1 -h –輸…

Spring MVC 全棧指南:RESTful 架構、核心注解與 JSON 實戰解析

目錄 RESTful API 設計規范Spring MVC 核心注解解析靜態資源處理策略JSON 數據交互全解高頻問題與最佳實踐 一、RESTful API 設計規范 1.1 核心原則 原則說明示例 URI資源為中心URI 使用名詞&#xff08;復數形式&#xff09;/users ?? /getUser ?HTTP 方法語義化GET&…

探索 JavaScript 中的 Promise 高級用法與實戰

在現代 Web 開發中&#xff0c;異步編程已成為不可或缺的一部分。JavaScript 作為 Web 開發的核心語言&#xff0c;提供了多種處理異步操作的方式&#xff0c;其中 Promise 對象因其簡潔、強大的特性而備受青睞。本文將深入探討 Promise 的高級用法&#xff0c;并結合實際案例&…