简介
CDN的全称是Content Delivery Network, 即内容分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络”边缘”,使用户可以就近取得所需的内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
可以把CDN简单的描述为:内容分发,解决网络拥挤和提供网站相应速度。
检测JS脚本是否加载成功
以在脚本代码后添加代码判断该类型或变量是否存在,如果不存证明CDN加载失败,那么我们的程序就应该加载本地脚本,下面我们以加载jQuery库为例,具体实现如下:
<!-- Adds google cdn reference -->
<script src="http://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<!-- Cdn fail refers to local library -->
<script>window.jQuery || document.write("script src='js/jquery-2.0.0.min.js' type='text/javascript'");</script>
上面,我们使用了“||”运算符判断window.jQuery是否为未定义类型,如果window.jQuery未定义执行后面的代码加载本地jQuery脚本,HTML5 Boilerplate就使用以上的方法处理CDN内容加载失败的情况。
协议省略
当我们在常规的Http页面中通过Https方式来引用Google CDN的jQuery库将导致缓存性能下降,我们应该尽量避免在Http页面中引用不必要的Https内容。
在RFC3986中的第4.2节规定合法的URL省略了协议(Http或Http)还是合法的,当一个URL的协议被省略时,浏览器将使用基本的文档的协议,通过这种方式,我们可以更加灵活地指定URL地址。所以我们可以通过以下的方式引用jQuery库。
<script src="//cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
“协议省略”的网址是引用第三方内容的最好的方式,它可以通过Http或Https引用。
使用CDN的好处
- 加快速度(CDN提供方的主机性能更好)
- 有机会利用缓存避免重复下载脚本
- CDN能提供本地的数据中心,令用户就近下载
- 能够灵活的控制脚本库的版本
- CDN能够分配负载,提高网站性能
使用CDN的隐患
- 提供的库文件未经过优化,不如经过站长自己优化过的库文件更小
- 可能存在着被屏蔽的可能(比如谷歌)
- 存在出故障的可能,需要提供备用方案
- 远程从CDN请求文件时,访问来源信息也会被发送,存在安全隐患(但是使用https协议可以避免这一问题)
- 存在着隐私被CDN提供者窃取的可能性