陪玩平臺原始碼中的CDN服務不可用時的解決辦法
現在陪玩平臺原始碼前端主流的部署方式基本都是把靜態資源打包上傳至CDN伺服器,可能還會引用一些線上公共資源庫。這都可能會存在一種問題:如果陪玩平臺原始碼的CDN伺服器掛了,就會導致頁面訪問不了。
筆者在之前的工作中就遇到過第三方資源公共CDN伺服器掛掉的問題,當時的臨時解決方法是修改地址,重新發布,期間存在一定時間內陪玩平臺原始碼不可用狀態。對於中小型公司來說,系統少的還好,對於系統多的改起來可費勁了。
那麼從陪玩平臺原始碼前端角度來看,有沒有什麼比較好的解決思路呢?
其實思路很簡單,就是在陪玩平臺原始碼當前靜態資源載入失敗時自動換到另一個地方重新載入該資源。基於這種思路,我們可以把靜態資源上傳到多個CDN伺服器上,一個作為主要使用,一個作為備份使用,讓不同CDN服務,請求路徑相同。這裡以CDN A為主域名使用,以CDN B為備份域名使用為例。
當陪玩平臺原始碼中的js、css資源載入失敗時,會觸發 onerror 事件,我們可以給所有的 script 和 link 標籤加上一個 onerror 事件 onCdnError ,然後在 window 中定義全域性的 onCdnError 事件,然後在自定義事件中獲取當前資源失敗的連結,替換成備用cdn地址,重新載入一次資源即可。
主要實現邏輯:
// 靜態資源對應的連結 var staticMap = { link: "href", script: "src", }; // <link onerror="onCdnError(this)" href=" // <script onerror="onCdnError(this)" href=" window.onCdnError = function (e) { const nodeName = e.nodeName.toLowerCase(); const srcName = staticMap[nodeName]; if (!srcName) { return; } // 獲取當前載入失敗的連結 let link = e[srcName]; if (!link) return; if (link.includes("cdn-a.com")) { link = link.replace("cdn-a.com", "cdn-b.com"); // 建立script或者link標籤,插入到head中 const head = document.head || document.getElementsByTagName("head")[0]; const el = document.createElement(nodeName); if (el === "link") { el.rel = "stylesheet"; } el[srcName] = link; el.onerror = function () { window.onCdnError(el); }; el.setAttribute("crossorigin", "anonymous"); head.appendChild(el); } else { // 可能已經是cdn-b了,此時cdn b也已經掛了,可以做一些提示處理 // ...do something } };
以上就是“當陪玩平臺原始碼中的CDN服務不可用時,有什麼解決辦法”的全部內容,是不是看起來並不難,希望對大家開發陪玩平臺原始碼有幫助。
本文轉載自網路,轉載僅為分享乾貨知識,如有侵權歡迎聯絡雲豹科技進行刪除處理
原文連結:https://www.yuque.com/xinconan/blog/cdn-error?hmsr=toutiao.io&utm_campaign=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2842000/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何用分散式鎖解決陪玩平臺原始碼中的併發問題?分散式原始碼
- 用 Go + Redis 實現陪玩平臺原始碼中的分散式鎖GoRedis原始碼分散式
- Spring Boot + Redis 解決陪玩平臺原始碼重複提交問題Spring BootRedis原始碼
- 遊戲陪玩平臺原始碼,日期格式化的程式碼分析遊戲原始碼
- 陪玩平臺原始碼中的排序演算法,插入排序的實現原始碼排序演算法
- 遊戲陪玩原始碼的輪詢鎖,使用時遇到的問題與解決方案遊戲原始碼
- 陪玩原始碼,與時間、日期相關的程式碼分析原始碼
- 提升陪玩平臺原始碼的整體效能,MySQL資料庫如何優化?原始碼MySql資料庫優化
- 遊戲陪玩平臺原始碼開發,依賴收集和觸發的實現遊戲原始碼
- 陪玩原始碼下單介面調優實戰,提高效能的好辦法原始碼
- getSupportFragmentManager()方法不可用解決辦法Fragment
- 提示“印表機後臺程式服務沒有執行”的解決辦法!
- 遊戲陪玩平臺原始碼開發,聊天室內的禮物連擊效果的實現遊戲原始碼
- 不一樣的遊戲陪玩原始碼服務端介面設計模式,值得一看遊戲原始碼服務端設計模式
- 不能訪問windows Installer服務的解決辦法!Windows
- 前端陪玩平臺原始碼管理是否得當,可以從哪些方面考證?前端原始碼
- ArcMap 10中Toolbox中工具不可用解決辦法
- 幾種解決“藍芽不可用”問題的辦法藍芽
- OpenStack fuel-web不可用解決辦法Web
- windows平臺下編輯的內容傳到linux平臺出現中文亂碼的解決辦法WindowsLinux
- 在遊戲陪玩原始碼開發中,兩種清空陣列的方式遊戲原始碼陣列
- 影片服務平臺如何解決直播平臺開發中具有挑戰的工作
- 使用者互動聊天,看陪玩平臺原始碼怎麼透過html實現原始碼HTML
- 陪玩平臺原始碼實現類似手機懸浮按鈕,需要如何做?原始碼
- mysql中的root密碼忘記的解決辦法MySql密碼
- 雲伺服器mysql 服務不見了的解決辦法伺服器MySql
- Windows7音訊服務未執行的解決辦法Windows音訊
- SQL SERVER 2005服務無法啟動問題的解決辦法SQLServer
- 遊戲陪玩app原始碼開發,常用的倒數計時功能如何實現?遊戲APP原始碼
- 帶你瞭解遊戲陪玩系統原始碼前端常用的儲存方式遊戲原始碼前端
- win8玩遊戲不能全屏的解決辦法遊戲
- 如何在遊戲陪玩系統原始碼中實現“刮刮樂”效果?遊戲原始碼
- 關於遊戲陪玩系統原始碼後臺管理系統,需要思考的二三事遊戲原始碼
- Ucenter後臺登陸驗證碼CCCC的解決方法無法登入解決辦法
- ubuntu中總是提示無法獲得鎖 (資源暫時不可用) 程式被佔用 解決辦法Ubuntu
- 遊戲陪玩系統原始碼中不同排序演算法的實現方式遊戲原始碼排序演算法
- 陪玩系統原始碼中陣列去重的實現程式碼,簡單卻重要原始碼陣列
- 陪玩系統原始碼中mysql資料庫備份還原的實現程式碼原始碼MySql資料庫