預防cdn連結失效,無縫切換本地檔案
如今的前端專案追求的不僅僅是能用能看的程度,而是愈發追求專案的效能,對使用者體驗的影響。而現在的開發工具在效能優化方面也替我們做很大一部分的工作,想必大家對CDN的使用都是輕車熟路了,但是大家有沒有考慮過,萬一我們使用的CDN伺服器,地址啥的出現了問題,導致我們引用的CDN檔案都拿不到了,那麼我們的專案崩潰了,天了嚕,崩潰了。
因此我們得考慮下,引用CDN的檔案拿不到了,應該有相應的處理方案,而不會直接導致我們專案崩潰。
想必大家都能想到的處理方案就是:如果引用CDN的檔案出錯了,拿不到,那麼我們就引用本地相對應的檔案。
有人肯定會說,這樣處理會導致專案體積變大的。對,是的,沒有錯,會使專案體積變大,但是這種處理總不會直接導致專案崩潰的,給使用者的體驗能更好一點,犧牲這麼一點點是值得的。很多事情都是沒有絕對的情況,都是相對的,這就需要我們自己去權衡了。
話不多說,直接進入正題。下面以Vue專案為列:
當然是我們專案的啟動頁/index.html
<script src="https://cdn.bootcss.com/vue/2.5.15/vue.min.js"></script> <script>!window.Vue && document.write(unescape('%3Cscript src="./static/js/vue.min.js"%3E%3C/script%3E'))</script> <script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script> <script>!window.VueRouter && document.write(unescape('%3Cscript src="./static/js/vue-router.min.js"%3E%3C/script%3E'))</script> <script src="https://cdn.bootcss.com/axios/0.18.0/axios.min.js"></script> <script>!window.axios && document.write(unescape('%3Cscript src="./static/js/axios.min.js"%3E%3C/script%3E'))</script> <script src="https://cdn.bootcss.com/element-ui/2.4.9/index.js"></script> <script>!window.Element && document.write(unescape('%3Cscript src="./static/js/element-ui-index.js"%3E%3C/script%3E'))</script> <script>!window.Element && document.write(unescape('%3Clink href="./static/css/element-ui-index.css" rel="stylesheet"%3E%3C/link%3E'))</script> <script src="https://cdn.bootcss.com/qs/6.5.2/qs.min.js"></script> <script>!window.Qs && document.write(unescape('%3Cscript src="./static/js/qs.js"%3E%3C/script%3E'))</script> <script src="https://cdn.bootcss.com/vuex/3.0.1/vuex.min.js"></script> <script>!window.Vuex && document.write(unescape('%3Cscript src="./static/js/vuex.min.js"%3E%3C/script%3E'))</script>
下面就在囉嗦幾點,看懂的慢走,不送啦。不太懂的再瞅瞅。
1)、不用擔心會全部載入,出現重複的情況,不信邪的自己去NetWork裡驗證。
2)、!window.Vue
、!window.VueRouter
、!window.axios
、!window.Element
、!window.Qs
、!window.Vuex
這些都是些什麼鬼? 那是第三方庫暴露出來的方法名。也可以去看看我之前 “配置webpack中externals來減少打包後vendor.js的體積” 這篇文章。
3)、對js檔案的處理都是這樣的,但是對css檔案應該怎麼處理呢。 眼尖的已經看到了,上面那段中已經寫出來。
4)、心細善於思考的你,還會發現,其實對css檔案的處理還是存在問題的。 因為難以直接判斷出CDN上的css檔案是否成功載入,所以直接用js檔案載入完成的判斷方式,打包一起處理。這樣如果CDN上的整個Element-UI出現問題,那js和css都可以載入本地的。最壞的情況是,CDN上的css檔案很不巧的出現問題了呢? 那就讓涼吧。沒辦法。。。哈哈哈
因為對於css檔案的處理,暫時沒有想到好一點的處理方案,所以目前只能先這樣統一處理。
不可否認對css處理這裡是存在問題的。如果你有更好的處理方案,歡迎評論告知我,謝謝。 當然文中有不當的地方,也歡迎大家指正,謝謝。