1. 程式人生 > >預防cdn鏈接失效,無縫切換本地文件

預防cdn鏈接失效,無縫切換本地文件

6.5 scrip 現在 shee 鏈接 體積 文件加載 服務 存在

如今的前端項目追求的不僅僅是能用能看的程度,而是愈發追求項目的性能,對用戶體驗的影響。而現在的開發工具在性能優化方面也替我們做很大一部分的工作,想必大家對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>

&lt;script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"&gt;&lt;/script&gt;
&lt;script&gt;!window.VueRouter &amp;&amp; document.write(unescape('%3Cscript src="./static/js/vue-router.min.js"%3E%3C/script%3E'))&lt;/script&gt;

&lt;script src="https://cdn.bootcss.com/axios/0.18.0/axios.min.js"&gt;&lt;/script&gt;
&lt;script&gt;!window.axios &amp;&amp; document.write(unescape('%3Cscript src="./static/js/axios.min.js"%3E%3C/script%3E'))&lt;/script&gt;

&lt;script src="https://cdn.bootcss.com/element-ui/2.4.9/index.js"&gt;&lt;/script&gt;
&lt;script&gt;!window.Element &amp;&amp; document.write(unescape('%3Cscript src="./static/js/element-ui-index.js"%3E%3C/script%3E'))&lt;/script&gt;
&lt;script&gt;!window.Element &amp;&amp; document.write(unescape('%3Clink href="./static/css/element-ui-index.css" rel="stylesheet"%3E%3C/link%3E'))&lt;/script&gt;

&lt;script src="https://cdn.bootcss.com/qs/6.5.2/qs.min.js"&gt;&lt;/script&gt;
&lt;script&gt;!window.Qs &amp;&amp; document.write(unescape('%3Cscript src="./static/js/qs.js"%3E%3C/script%3E'))&lt;/script&gt;

&lt;script src="https://cdn.bootcss.com/vuex/3.0.1/vuex.min.js"&gt;&lt;/script&gt;
&lt;script&gt;!window.Vuex &amp;&amp; document.write(unescape('%3Cscript src="./static/js/vuex.min.js"%3E%3C/script%3E'))&lt;/script&gt;

```

下面就在啰嗦幾點,看懂的慢走,不送啦。不太懂的再瞅瞅。

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處理這裏是存在問題的。如果你有更好的處理方案,歡迎評論告知我,謝謝。 當然文中有不當的地方,也歡迎大家指正,謝謝。

原文地址:https://segmentfault.com/a/1190000017211876

預防cdn鏈接失效,無縫切換本地文件