(转)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 ...
随机推荐
- centos
CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linu ...
- 如何指定个别属性进行transition过渡
transition是CSS3新增的动画属性,可以实现属性的平滑过渡,大大提高用户体验,对于多个属性进行过渡的话很多人会这样写 .tr{ transition:all 1s} 很不幸的是如果我只需要对 ...
- IntelliJ工程导入
如果build.gradle中的sourceCompatibility=1.5,那么无法使用钻石运算符,如下语句报错. List<String>a=new ArrayList<> ...
- a版本冲刺第六天
队名:Aruba 队员: 黄辉昌 李陈辉 林炳锋 鄢继仁 张秀锋 章 鼎 学号 昨天完成的任务 今天做的任务 明天要做的任务 困难点 体会 408 学习<第一行代码> 学习活动的消息 ...
- div
<div id="container"> <div id="left">左边</div> <div id=" ...
- eclipse安装和配置
一.下载eclipse eclipse下载页 (选择"Eclipse IDE for Java EE Developers",适用于web和android开发) 我用的是luna的 ...
- Agent理解
简单来说,Agent是一个交互性的技术. 比如我们在网上购物时,主体是人,即请求的发出者,我们在搜索商品时,向系统发出请求,系统会给我们一个返回结果,然而我们发现很多情况下,我们会在商品栏目中发现我们 ...
- Redis【知识点】批量删除指定Key
Redis中有删除单条数据的命令DEL但是他没有批量删除多条数据的方法,那我们怎么去批量删除多条数据呢! 第一种方式 /work/app/redis/bin/redis-cli -a youpassw ...
- 2016-03-04记录 H264.TXT 转成 H264.h264
H264.TXT文件 来源于板子上串口输出的数据,需要把该数据转成 *.h264用 H264的软件打开观察 txt中数据截图如下: MATLAB读入数据的代码: clc;close all;clear ...
- JUnit4 中@AfterClass @BeforeClass @after @before的区别对比
JUnit4使用Java5中的注解(annotation),以下是JUnit4常用的几个annotation: @Before:初始化方法 对于每一个测试方法都要执行一次(注意与BeforeCla ...