cdn挂了,前端如何动态切换cdn链接呢?

947 阅读1分钟

为了提高项目的访问速度,使用cdn提升访问速度是非常有效的方案,同时提高网站稳定性、安全性,并且无需修改现有的业务逻辑。采用免费的cdn提供商,还能降低网站流量成本,

但是cdn服务也不是无限运行的,如果挂了我们应该怎么办,手动更换cdn提供商? 不,我们将采取一种更加智能的解决方案,通过监听script标签的onerror事件,从候选cdn链接中进行切换。

以下代码可以应对一些应用场景

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
 <script>
   function loadResource(links, fnSuccess, fnError) {
     var script = document.createElement('script');
     script.onerror = function () {
       document.head.removeChild(script);
       fnError();
     };
     script.onload = fnSuccess
     script.src = links.shift();
     document.head.appendChild(script);
   }

   function autoSwitch(resourceList) {
     if (!resourceList.length) return
     var resource = resourceList.shift();
     loadResource([resource], function (success) {
       console.log('loaded');
     }, function (err) {
       console.log('load error')
       autoSwitch(resourceList);
     });
   }
 </script>
</head>

<body>
 <script>
   // cdn 链接列表
   var resourceList = [
     'http://demo1.cdnxx.cn/assets/app.js',
     'http://demo2.cdnxx.cn/assets/app.js',
     'assets/app.js',
   ];

   autoSwitch(resourceList);
 </script>
</body>

</html>