前几天 jsdelivr 出故障,很多网站都受影响。其实早已料到,毕竟 jsdelivr 可加速任意内容,显然不符合国情,被和谐估计是早晚的事。只是目前有太多网站在使用,直接下线影响太大,所以先出个故障,也许算是提醒这些网站可以开始考虑更换吧。以后“故障率”可能还会越来越高。
另一个选择是 unpkg.com 。虽然它同样也有类似问题,但多一个节点还是可以提高不少稳定性。毕竟两个同时故障的概率就低很多。
当然,如果只是用流行的公共库,不如 cdnjs 、bootcss 等等。毕竟 jsdelivr / unpkg 可加速自定义资源,显然更珍贵一些,加速公共库显得有点大材小用了。
但同时使用多个 CDN 实现很麻烦。例如需要通过 JS 监控脚本、图片、CSS 等加载失败或超时,然后加载后备资源替换之前的元素。而且还会出现一些副作用。因此很少有人这么做。
为方便使用,之前尝试做了一个方案,通过 Service Worker 将清单文件中指定的资源映射到多个 CDN URL ,一个加载异常自动尝试另一个。由于是在 Service Worker 实现,上层页面是无感知的。
演示:github.com/EtherDream/freecdn
当然由于时间有限,很多功能仍在开发中,不过基本功能已实现,有兴趣的可以试试~