Performance 在单独的域/服务器中拥有静态资源是否值得?

Performance 在单独的域/服务器中拥有静态资源是否值得?,performance,apache,grails,caching,jakarta-ee,Performance,Apache,Grails,Caching,Jakarta Ee,我目前正在改进我的grails网站性能,遵循我在互联网上找到的许多最佳实践,我目前需要在重构代码之前在两种解决方案之间做出决定 解决方案1:将我的所有静态资源(js、css、图像)导出到一个单独的域和服务器(SO团队已经完成了这项工作-请参阅) 解决方案2:只需将我的资源保存在我的WAR文件中,并将apache配置为充当反向/缓存代理,以便对/images、/css、/js等的传入请求都由apache缓存 你有什么建议,有什么利弊 PS:关于解决方案1,是否有专门针对静态内容的web托管

我目前正在改进我的grails网站性能,遵循我在互联网上找到的许多最佳实践,我目前需要在重构代码之前在两种解决方案之间做出决定

  • 解决方案1:将我的所有静态资源(js、css、图像)导出到一个单独的域和服务器(SO团队已经完成了这项工作-请参阅)

  • 解决方案2:只需将我的资源保存在我的WAR文件中,并将apache配置为充当反向/缓存代理,以便对/images、/css、/js等的传入请求都由apache缓存

你有什么建议,有什么利弊

PS:关于解决方案1,是否有专门针对静态内容的web托管提供商


谢谢。

如果您已经分析并确定浏览器排队下载导致的延迟是影响站点性能的主要因素,则您应该这样做。如果静态资源在几毫秒内加载,但HTML本身在服务器访问数据库后需要3秒钟才能下载。。。那么,改进这几个ms不会有多大作用。

解决方案一是更好的解决方案。如果您还没有,您应该咨询,因为它将更深入地讨论这个问题

通常,浏览器将以并行方式加载页面资源。但是,浏览器将限制特定域的请求数量,因此如果您的所有资源都在该域上,则其中一些资源将被阻止,直到前一个并行请求完成。将资源拆分到不同的域有助于解决这个瓶颈,因为您可以同时向
images.yourdomain.com
flash.yourdomain.com
发送多个请求。构建应用程序以从一开始就利用这种资源分离方式,以后可能会有好处,即使最初是从一台服务器为它们提供服务

您可以将所有解决方案2作为解决方案1的一部分实施,即在多个域上进行缓存。一般来说,从#2开始比较便宜,因为您可以继续从现有服务器提供服务,但将它们配置为缓存


一旦开始出现大流量,并且您真的想要优化性能,拆分域就可以有所作为。

这取决于您的页面需要多少资源。请记住,浏览器一次只能从单个服务器建立有限数量的连接。对于IE 8,这是一次两个。如果您有40个资源,一次只能检索2个。将资源分散到多个子域中可以极大地提高站点页面加载的速度

您可以在DNS中设置多个CNAME记录,所有记录都指向同一物理服务器,从而大大提高资源加载速度


另外,请查看Google PageSpeed,以了解有关加速页面加载的其他想法。

如果您还没有使用它,我会看看。它实现了许多关于缓存、缩小和压缩开箱即用的最佳实践


正如其他海报所指出的,在做任何过于激烈的事情之前,我会确保您知道瓶颈在哪里。

我已经确定下载静态资源是一个瓶颈。也就是说,你建议什么解决方案?为什么?@OMG Ponies:这真的不是过早的优化!首先,如果我进行优化,这是因为我已经确定了这方面的需求。其次,看看本文(),您将了解到优化的第一步是减少HTTP请求,因为40%的用户是第一用户,并且不使用浏览器缓存。因此,您应该首先处理可以优化和捆绑的静态内容Hi Jeffrey。我不确定增加CNAME的数量是否会提高页面速度。实际上,从我所读到的内容来看,至少需要2个域名,最多需要4个域名。在您获得显著的性能下降后。有关更多详细信息,请参阅本文: