Gus*_*dim 19 performance cdn browser-cache
我正在研究加载静态文件时的浏览器性能,这种疑问已经到来.
有人说使用CDN静态文件(即谷歌代码,jQuery最新,AJAX CDN ......)对性能更好,因为它从另一个域请求而不是整个网页.
提高性能的其他方法是将
Expires标头设置为等于几个月后,强制浏览器缓存静态文件并减少请求.我想知道哪种方式是最好的,考虑性能以及我是否可以将它们结合起来.
先谢谢你们,我喜欢StackOverflow.
Ant*_*los 61
最终,如果您正在进行站点的Web性能优化(WPO),也称为前端优化(FEO),则最好采用这两种技术.他们可以携手共进.虽然如果我不得不选择一个,我肯定会在任何一天选择缓存.事实上,我要说,即使您打算使用CDN,也必须为所有Web项目设置适当的资源缓存.
设置Expires标头和资源缓存是必须的,应该在100%的时间内为您的资源完成.没有借口不做缓存.在Apache上,这是超级容易启用后,配置mod_expires.c和mod_headers.c.该HTML5样板项目具有良好的实施例中的.htaccess文件,如果你的服务器是别的东西像nginx的,lighttpd的或IIS检查出这些其他的服务器CONFIGS.
如果有人有兴趣了解缓存,那么这是一个很好的阅读:Mark Nottingham的缓存教程
您提到Google Code, jQuery latest, AJAX CDN,我想只是CDN触摸一般包括那些你支付和托管在您自己的资源,但同样的,如果你只是使用jQuery的宿主文件CDN或者从加载的东西适用http://cdnjs.com/为例.
我会说CDN不如设置服务器端标头缓存重要,但CDN 可以提供显着的性能提升,但您的内容交付网络性能将根据提供商而有所不同.
如果您的流量是全球受众并且CDN提供商拥有许多全球边缘/对等位置,则尤其如此.它还将显着降低您的虚拟主机带宽和CPU使用率(一点点),因为您正在将一些工作卸载到CDN以提供资源.
如果CDN的延迟最终比服务器慢,CDN在某些情况下会对性能产生负面影响.此外,如果您过度优化和使用过多的资源并行化(使用多个子域,如cdn1,cdn2,cdn3等),最终可能会减慢用户体验并导致额外DNS查找的开销.这里需要很好的平衡.
可能发生的另一个负面影响是CDN何时下降.它已经发生了,并将再次发生.免费CDN更是如此.如果CDN由于某种原因而中断,您的网站也是如此.这是另一个潜在的单点故障(SPOF).对于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>
Run Code Online (Sandbox Code Playgroud)
除了明显的免费API资源(jquery,google api等),如果你使用的是CDN,你可能需要支付使用费,因此它会增加托管成本.当然,对于某些CDN,您甚至需要支付额外费用才能访问某些位置,例如亚洲节点可能会比北美更节省成本.
对于公共应用程序,请选择 CDN。缓存有助于重复请求,但不适用于第一个请求。为了确保在第一页访问时快速加载使用 CDN,很有可能该文件已经被另一个站点缓存了。正如其他人已经提到的,CDN 结果当然也被大量缓存。
但是,如果您有一个 Intranet 网站,您可能希望自己托管文件,因为它们通常从内部源加载比从 CDN 加载更快。然后,您还可以选择将多个文件合并为一个文件以减少请求数量。