使用Cache还是CDN更好?

时间:2012-10-16 14:02:33

标签: performance cdn browser-cache

我正在研究加载静态文件时的浏览器性能,这种疑问已经到来。

  有些人说使用CDN静态文件(即Google Code,jQuery   最新的,AJAX CDN,......)性能更好,因为它要求   来自另一个域而不是整个网页。

     

提高性能的其他方法是设置Expires标头   等于几个月后,强制浏览器缓存静态   文件并减少请求。

     

我想知道哪种方式是最好的,考虑性能和   如果我可以将两者结合起来。

先谢谢你们,我喜欢StackOverflow。

5 个答案:

答案 0 :(得分:61)

如果您正在进行站点的Web性能优化(WPO)(也称为前端优化(FEO)),最好采用这两种技术。他们可以携手共进。虽然如果我 选择一个而不是另一个,我肯定会在任何一天选择缓存。事实上,即使您打算使用CDN,我也必须为所有Web项目设置适当的资源缓存。

缓存

设置Expires标头和资源缓存是必须的,应该在100%的时间内为您的资源完成。没有借口不做缓存。在Apache上,启用mod_expires.cmod_headers.c后,这非常容易配置。 HTML5 Boilerplate project.htaccess file中有很好的实现示例,如果你的服务器是nginx,lighttpd或IIS之类的东西,请查看这些other server configs

如果有人有兴趣了解缓存,那么这是一个很好的阅读:Mark Nottingham's Caching Tutorial

内容分发网络

你提到了Google Code, jQuery latest, AJAX CDN我想要触及一般的CDN,包括你为此付费并托管你自己的资源,但如果你只是使用jquery托管文件cdn或从{加载某些东西{3}}例如。

我认为CDN不如设置服务器端标头缓存重要,但CDN 可以提供显着的性能提升,但您的内容交付网络性能会有所不同http://cdnjs.com/

如果您的流量是全球受众且CDN提供商拥有许多全球边缘/同行位置,则尤其如此。它还会显着降低您的虚拟主机带宽和CPU使用率(一点点),因为您正在将一些工作卸载到CDN以提供资源。

如果CDN的延迟最终比您的服务器慢,CDN可能会在某些极少数情况下对性能产生负面影响。此外,如果您过度优化和使用过多的depending on the provider资源(使用多个子域,如cdn1,cdn2,cdn3等),最终可能会减慢用户体验并导致额外DNS查找的开销。这里需要很好的平衡。

如果CDN出现故障,可能发生的另一个负面影响。它已经发生了,并将再次发生。免费CDN更是如此。如果CDN由于某种原因而中断,您的网站也是如此。这是另一个潜在的 parallelization 。对于javascript资源,您可以变得聪明并从CDN加载资源,如果失败,无论如何,然后检测并加载本地副本。这是一个从ajax.googleapis.com加载jQuery并带有后备的示例(取自HTML5 Boilerplate):

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.8.2.min.js"><\/script>')</script>

除了显而易见的免费API资源(jquery,google api等),如果您使用的是CDN,您可能需要支付使用费,因此会增加托管成本。当然,对于某些CDN,您甚至需要支付额外费用才能访问某些位置,例如亚洲节点可能比北美节省更多费用。

答案 1 :(得分:4)

CDN的好处是可以提供多台服务器,并自动将您的流量路由到最近的客户端。这可以实现更快的交付,并根据位置进行优化。

此外,静态内容不需要特殊的应用程序服务器(如动态内容),因此您可以将其卸载到CDN意味着您可以完全减少该流量。流式视频剪辑可能太大而无法缓存或不应缓存。但是你不一定要支持那个带宽。 CDN将为您承担这一流量。

并不总是关于缓存。一个小型应用程序Web服务器可能只想提供动态内容,但需要一个很少改变的重击媒体的解决方案。 CDN会为您处理扩展问题。

答案 2 :(得分:4)

对于公共应用程序,请转到CDN。 缓存有助于重复请求,但不适用于第一个请求。 为了确保第一页访问的快速加载使用CDN,很可能该文件已经被另一个站点缓存。 正如其他人已经提到的那样,CDN结果当然也被大量缓存。

但是,如果您有Intranet网站,则可能需要自己托管文件,因为它们通常从内部源加载比从CDN加载更快。 然后,您还可以选择将多个文件合并为一个文件,以减少请求数量。

答案 3 :(得分:1)

同意@Anthony_Hatzopoulos(+1)

CDN赞美缓存,在某些情况下,它还有助于优化缓存指令。

例如,我在一家公司工作,将集成行为学习算法纳入其CDN,以识别和缓存动态生成的对象。

通常这些对象是不可连接的(即[Cache-Control:max-age = 0] Http标头),但在这种情况下,系统能够识别缓存可能性并覆盖原始HTTP标头方向。 (例如:动态生成的流行产品应该是缓存的或流行的搜索结果页面,在动态生成的同时,仍然以相同的形式呈现给成千上万的用户。)

是的,在您提出要求之前,系统还可以识别个性化数据和非常新鲜,以防止误报......:)

只有通过反向代理CDN技术才能实现这样的算法,这是CDN和缓存如何相互补充以创建更好,更智能的加速解决方案的一个例子。

答案 4 :(得分:0)

在这些专家的引言之上,这个解释非常适合理解CDN技术和缓存 我只是提供我的个人经验,我曾经在joomla virtuemart网站上工作,不幸的是它不允许更新新的joomla和virtuemart版本,因为它是产品页面中太多的自定义字段,所以一旦访问者达到900 / DAY和批次用户无法将他们的商品放入他们的购物篮中,因为每次调用批次js和ajax调用订单商品需要花费太多时间

优化网站后,我们决定使用CDN,然后性能确实越来越好,从gtmetrix的记录开始,第一个YSlow得分为50%,然后优化+ CDN达到74%

https://gtmetrix.com/reports/www.florihana.com/jWlY35im

从CDN的仪表板中,您可以看到哪个数据中心成本最高,数据收费最高,以改善营销方式:

enter image description here

但是配置CDN是的,必须小心清除时间并平衡资源CDN的数量,如果它解决了一些问题,你需要找出CDN导致的资源

希望这有帮助