(转)CDN——到底用还是不用?
用CDN的七个理由
- 浏览器从服务器上下载css、js和图片等文件时都要和服务器连接,而大部分浏览器对同一个域名用于下载文件的并发连接数限制在4个,这意味着如果要下载第五个文件就必须等前四个文件中有一个已经加载完成,假如前4个文件都很大,第五个文件就要等很久,整个网页的加载速度就受限于此了。用CDN就可以通过不同的域名来加载文件,从而使下载文件的并发连接数大大增加。
- jQuery一类的库文件现在被广泛使用,如果访问你网站的用户的浏览器之前在访问别的网站时通过和你相同的CDN已经加载了jQuery,由于jQuery文件已经被缓存了,就不用重新下载了。
- 也许你的网站主机性能很好,但是应该不会比Google、Microsoft和Yahoo等大公司的容量和可扩展性更高,他们提供的CDN具有更好的可用性,更低的网络延迟和丢包率。
- CDN能提供本地的数据中心,这样一来,那些远离你网站主服务器的用户也能就近很快地下载文件。
- 让你能够连接到特定版本的css文件或者js库文件,可以根据需求请求最新的版本。
- 很多商业付费的CDN能提供使用报告,这可以作为你自己网站分析报告的补充。
- CDN能够分配负载,节省带宽,提高你网站的性能,降低你网站托管的成本,通常是免费的。
不用CDN的七个理由
- 在开发阶段如果处在断网环境下,CDN文件是无法加载的。
- 一些免费CDN提供的文件可能是功能完整的包或者库文件, 可能超过几百kb的大小,而许多时候网站只需要使用其中部分,你可以使用自己优化过、更小的css和js文件,让用户下载和执行的更快,当然你可以把自己的文件放到私人的CDN上,但这会需要额外的工作量和花费。
- 尽管一些流行的CDN文件事先缓存过的几率较大,但并不是一定的,一些移动设备的缓存可能很小而且效率很低,CDN的优势就不明显了,特别是当你可以在本地服务器上存放比CDN文件更小的文件时。
- 由于地理、法律、政策和商业上的阻隔,你所在的地区可能屏蔽了一些流行的免费CDN服务的域名或者IP地址。
- CDN会有出故障的时候,这时候要有备用方案,也就是你的本地文件,这种处于稳定考虑的冗余会增大开发工作量和复杂度。
- 如果安全性对你的网站很重要,就不要使用公共的CDN,因为当你远程从CDN请求文件时,你的访问来源信息也被发送过去,一些远程的js文件可能被修改用来搜集你的用户或者系统信息,而当你使用https协议时,能选择的CDN就更加有限。
- 当你把文件控制交给Google、微软、亚马逊或者其他大的互联网公司时,你会考虑他们对你信息的搜集整理吗,这也许是多虑了,但是在互联网这一行里多一点这样的怀疑并不坏。
你到底要不要用CDN呢
几种明确不该用CDN的情况:
- 你构建的是内部网络应用,不与外部Internet连接;
- 像银行系统这样的应用,安全和隐私是最优先考虑的,就要让所有源文件和服务器位置完全处于自己掌控中;
- 你为公司或者国家开发的应用,而他们恰好对某些CDN的域名或者IP地址限制访问。
CDN对低流量的小网站性能提升并不明显,如果没有需要高带宽的视频、音频文件,把你的文件放在一起可能还更简单。
对流量高的网站,CDN可以大大提升性能,但假如你的用户以移动设备为主,可能自己优化过的小文件比CDN上的大文件要下载和执行的更快。
在实际中通过JavaScript搜集用户分别使用CDN文件和本地服务器文件时加载页面的速度,以决定一段时间内是选择CDN还是本地文件。
对于重要的文件,最好还是提供本地文件的冗余,以应对CDN文件不可用的情况。以jquery为例:
<script src="https://ajax.googleapis.com/ajax/libs/jquery1.4.3/jquery.min.js"></script>
<script>
!window.jQuery && document.write("<script src=\"scripts/jquery-1.4.3.min.js\">" + "<\/scrript>")
</script>这里通过判断window.jquery全局对象是否存在来判断jQuery是否通过CDN加载成功,不成功就通过
document.write
方法来加载本地的jQuery文件,注意这里用到了转义字符‘\’避免浏览器将document.write
方法内的“</script>
”当成了结束标签。- 一些对系统并不是至关重要的文件诸如字体文件、css重置、js小插件、背景图片等可能适合使用CDN,因为即使CDN文件不可用,网站也能做到平稳退化。
总结
看到这里,我想你也觉得CDN是好的,只是要把它用好,还是应该遵循前面讲到的一些原则,简单的说,在实践中,一些流行的库文件和字体文件使用CDN是好的,对于大型网站来说,使用私有CDN也能极大提升速度和降低成本,但如果你的应用对安全、隐私和可靠性要求较高,那就要在CDN的性能提升和安全考量之间做一下权衡了。
作者: 种子_fe
链接:http://www.imooc.com/article/13673?block_id=tuijian_wz
来源:慕课网
(转)CDN——到底用还是不用?的更多相关文章
- CDN——到底用还是不用?
最近在学bootstrap,在知乎上搜索bootstrap看到有人问bootstrap基础包体积较大,对性能影响会不会很大,看到两种方法来减少对性能的影响: 有选择地部分加载,bootstrap带有L ...
- 我们常说的CDN到底是什么?
程序员每天提及的无数词当中,有一个是「CDN」,Ta的中文名是「内容分发网络」,读中文是令人蒙逼的,英文名是Content Delivery Network. CDN有啥用呢?它主要用来解决什么问题呢 ...
- 《CDN技术详解》 - CDN知多少?
开发时间久了,就会接触到性能和并发方面的问题,如果说,在自己还是菜鸟的时候完全不用理会这种问题或者说有其他的高手去处理这类问题,那么,随着经验的丰富起来,自己必须要独立去处理了.或者,知道思路也行,毕 ...
- CDN,你了解多少?
大家对CDN并不陌生,工作中或多或少都有所接触,最近也有人问到,在此对CDN相关概念和流程做下总结,希望还能对其他朋友也有所帮助. 一.什么是CDN 维基百科上是这样定义的: CDN:内容分发网络(C ...
- 浅谈CDN、SEO、XSS、CSRF
CDN 什么是CDN 初学Web开发的时候,多多少少都会听过这个名词->CDN. CDN在我没接触之前,它给我的印象是用来优化网络请求的,我第一次用到CDN的时候是在找JS文件时.当时找不到相对 ...
- CDN理解<转>
CDN则是更高级的手段.CDN到底如何工作的呢,让我们来大概了解一下! CDN的基础百科资料也很多了,我也稍等提一下.CDN,Content Distribute Network,即:内容分发网络. ...
- CDN加速-内容分发网络
内容分发网络 (互联网技术) 编辑 CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输 ...
- 聪明的Azure CDN,帮你找到云端捷径
你知道吗?身处上海和纽约的两个用户同时通过网络收看“春晚”直播,纽约播放得可能比上海还要更流畅,这当然不是因为纽约距离北京的直播机房更近或者网速更快,而是因为大年夜在大洋彼岸围观“春晚”的观众相对较少 ...
- web编程
展示层 html/css/javascript/jquery/jquery easyUI/ajax bootstrap web层 varnish/haproxy/squid----lvs/keepal ...
随机推荐
- DayPilot 7.9.3373 去掉DEMO
更新升级倒是蛮快的,多了Gantt图,此处下载先: http://files.cnblogs.com/files/pccai/DayPilot_2.0_4.0_7.9.3373.rar
- ansible的SSH连接问题
问题描述: 在ansible安装完毕后一般需要以SSH的方式连接到需要进行管理的目标主机,一开始遇到了如下问题: # ansible -m ping all 10.200.xx.xx | UNREAC ...
- WebView·开发指南
WebView·开车指南 作者:凌俊琦链接:https://zhuanlan.zhihu.com/p/22247021来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. T ...
- Servlet实现asp.net中的Global.asax启动事件(Servlet和Listener使用)
1.Java Web中没有像asp.net的全局启动事件,但是可以通过web.xml中的load-on-startup节点来控制Servlet的开机启动和启动次数.web.xml详细配置参考:http ...
- IDC机房线路质量测试方案
1.测试节点: 北京:123.206.*.* 上海:139.196.*.* 广州:119.29.*.* 汕头:125.91.*.* 香港:103.20.*.* 美国:198.52.*.* 测试服务器: ...
- php.ini 中文注释
这个文件控制了PHP许多方面的观点.为了让PHP读取这个文件,它必须被命名为 ; ´php.ini´.PHP 将在这些地方依次查找该文件:当前工作目录:环境变量PHPRC ; 指明的路径:编译时指定的 ...
- Java递归算法——三角数字(消除递归)
import java.io.*; // for I/O //类名:Params //属性: //方法: class Params //这个类的对象被压入栈中 { public int n; //用来 ...
- LoadRunner 函数之 web_custom_request
Allows you to create a custom HTTP request with any method supported by HTTP. List of Attributes URL ...
- MYSQL入门全套(第三部)
MYSQL入门全套(第一部) MYSQL入门全套(第二部) 索引简介 索引是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)的值进行排序的结构.如果想按特定职员的姓来查找 ...
- 给网页 title添加图片。
在网页的title中添加 <link rel="shortcut icon" href="logo.png" /> 即可. 可以看下百度搜索的代码, ...