是否值得在单独的域/服务器中使用静态资源?

时间:2010-02-19 22:42:14

标签: performance apache grails caching java-ee

我目前正在改善 grails 网站效果并遵循我在互联网上找到的许多最佳做法,我目前需要在两个解决方案之间做出决定在重构我的代码之前

  • 解决方案1 ​​:将我的所有静态资源(js,css,images)导出到单独的域和服务器(正如SO团队所做的那样 - 请参阅here

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

你推荐什么以及利弊是什么?

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

谢谢。

4 个答案:

答案 0 :(得分:1)

如果您已经分析并确定浏览器排队下载导致的延迟是您网站性能的主要因素,则应该执行此操作。如果静态资源在几毫秒内加载,但是在服务器必须打到数据库之后,HTML本身需要3秒才能下载...然后改进那几个ms就不会做太多。

答案 1 :(得分:1)

解决方案之一是更好的解决方案。如果您还没有,请咨询YSlow performance guide,因为它会更深入地讨论这个问题。

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

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

一旦大量流量启动,您就会发现并且您真的想要优化性能,拆分您的域名可能会有所作为。

答案 2 :(得分:1)

如果你还没有使用它,我会看一下ui-performance grails plugin。它实现了许多关于缓存,小型化和压缩事物的最佳实践。

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

答案 3 :(得分:0)

这取决于您的页面/页面需要多少资源。请记住,浏览器一次只能从一台服务器进行有限数量的连接。对于IE 8,这一次是2。如果您有40个资源,则一次只能检索2个资源。在多个子域中传播资源可以大大提高网站上页面加载的速度。

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

另请查看Google PageSpeed,了解有关加快页面加载的其他建议。