为了提高项目的访问速度,使用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>