我正在接受rails 3.2应用程序的开发,并且正在寻找改善页面加载时间的最佳方法。该网站本身更像是一个大型动态网站,而不是一个真实的网络应用程序(该网站是http://korduroy.tv/,一个冲浪生活社区网站),虽然有一些小块,不同的用户,大多数该网站对每个人来说都是一样的体验。
页面加载时间相当慢,从查看服务器日志来看,似乎是因为每个页面都加载了如此多的动态内容(例如,大多数页面都是从10多个模型加载资源)。虽然我希望能够通过并重构我能做到的事情,但我正在寻找一些基本的表现。知道每个用户的大多数网站是相同的,他们是一种积极缓存服务器上的内容甚至提供通过某种后台工作生成的静态内容的方法吗?
我最初的想法是创建一个使用静态网站生成器的工作,可能是像Jekyl这样的工作,并且基本上创建了一个网站的静态副本,然后可以在cdn上提供。我的直觉告诉我这可能不是这样做的,而且有些页面(例如用户个人资料页面)需要动态提供。
任何建议都会很棒。免责声明,我来自前端领域,在服务器端优化方面对最佳实践知之甚少。谢谢!
答案 0 :(得分:1)
根据您所写的内容,我相信您最大的收获将是使用memcache存储实现片段缓存。请参阅http://guides.rubyonrails.org/caching_with_rails.html作为rails缓存的权威指南。
您可以使用页面缓存或操作缓存来获取一些不依赖于用户的内容(例如主页),但除非您每天提供数百万个请求,否则我我不确定这是否必要。
我注意到虽然javascript和css似乎是根据rails资产管道编译的,但是图像缺少sha1哈希值,允许激进的浏览器缓存资源(因为你不必担心内容更改,因为他们在你改变图像时会得到新的哈希值。这里的关键是启用资产管道,确保您在部署(rake assets:precompile
)和使用image_tag
和asset_path
帮助程序(或image-url
sass帮助程序)时编译资产)。当您刷新页面时,还要确保nginx响应代码304(未修改)到您的浏览器。这不会影响rails服务器上的负载(除非你在同一台服务器上同时运行nginx和rails),但会减少平均页面加载时间。
您可以研究更高级的技术,例如缓存您的SQL查询或优化这些技术,但这会导致复杂性增加,从而使维护代码库变得更加困难。首先尝试视图缓存,看看是否能将加载时间调到可接受的水平。