0

我正在接管 Rails 3.2 应用程序的开发,并正在寻找改善页面加载时间的最佳方法。该网站本身更像是一个大型动态网站,而不是一个实际的 Web 应用程序(该网站是http://korduroy.tv/,一个冲浪生活方式社区网站),虽然有一些小部分因用户而异,大部分网站对每个人来说都是一样的体验。

页面加载时间相当慢,从服务器日志看,似乎是因为每个页面都加载了太多的动态内容(例如,大多数页面正在加载来自 10+ 模型的资源)。虽然我希望尽我所能进行重构,但我正在寻找一些基本的性能胜利。知道网站的大部分内容对于每个用户来说都是相同的,他们是否可以在服务器上积极缓存内容,甚至提供通过某种后台作业生成的静态内容?

我最初的想法是创建一个使用静态站点生成器的作业,可能类似于 Jekyl,并且基本上创建站点的静态副本,然后可以在 cdn 上提供该副本。我的直觉告诉我这可能不是这样做的方法,而且还有一些页面(例如用户个人资料页面)需要动态提供。

任何建议都会很棒。免责声明,我来自前端领域,对服务器端优化的最佳实践知之甚少。谢谢!

4

1 回答 1

1

从您所写的内容来看,我相信您最大的收获将是使用 memcache 存储实现片段缓存。请参阅http://guides.rubyonrails.org/caching_with_rails.html作为 Rails 缓存的权威指南。

对于某些不依赖于用户的内容(例如主页),您可能能够摆脱页面缓存或操作缓存,但除非您每天处理数百万个请求,否则我不会确定这是必要的。

我注意到虽然 javascript 和 css 似乎是根据 rails 资产管道编译的,但图像缺少允许浏览器积极缓存资源的 sha1 哈希(因为您不必担心内容会发生变化,因为它们更改图像时获取新的哈希值)。这里的关键是启用资产管道,确保将资产编译为部署 ( rake assets:precompile) 的一部分并使用image_tagandasset_path助手(或image-urlsass 助手)。当您刷新页面时,还要确保 nginx 以代码 304(未修改)响应您的浏览器。这不会影响 rails 服务器上的负载(除非您在同一台服务器上同时运行 nginx 和 rails),但会减少平均页面加载时间。

您可以研究更高级的技术,例如缓存您的 sql 查询或优化这些查询,但这会导致复杂性增加,从而更难维护您的代码库。首先尝试视图缓存,看看是否可以使加载时间达到可接受的水平。

于 2012-07-30T08:28:05.947 回答