我正在研究加载静态文件时的浏览器性能,这种疑问已经到来。
有些人说使用CDN静态文件(即Google Code,jQuery 最新的,AJAX CDN,......)性能更好,因为它要求 来自另一个域而不是整个网页。提高性能的其他方法是设置
Expires
标头 等于几个月后,强制浏览器缓存静态 文件并减少请求。我想知道哪种方式是最好的,考虑性能和 如果我可以将两者结合起来。
先谢谢你们,我喜欢StackOverflow。
答案 0 :(得分:61)
如果您正在进行站点的Web性能优化(WPO)(也称为前端优化(FEO)),最好采用这两种技术。他们可以携手共进。虽然如果我 选择一个而不是另一个,我肯定会在任何一天选择缓存。事实上,即使您打算使用CDN,我也必须为所有Web项目设置适当的资源缓存。
设置Expires
标头和资源缓存是必须的,应该在100%的时间内为您的资源完成。没有借口不做缓存。在Apache上,启用mod_expires.c
和mod_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的仪表板中,您可以看到哪个数据中心成本最高,数据收费最高,以改善营销方式:
但是配置CDN是的,必须小心清除时间并平衡资源CDN的数量,如果它解决了一些问题,你需要找出CDN导致的资源
希望这有帮助