使用我的Rails应用程序中完整,计算复杂的页面“预热”缓存

时间:2009-10-19 02:32:21

标签: ruby-on-rails optimization caching performance memcached

我们的初始页面加载是我们的Rails应用程序中的野兽。最棒的是缺少需要的页面刷新。整个事情都是Ajax-y(我们的设计师让它看起来很棒!)只有一个问题:初始页面加载是一个怪物。

我已经进行了调整和推测,并通过优化,缓存,记忆等方式提高了令人难以置信的速度提升。对于我的应用程序的典型用户,整个过程非常实用。然而,存在边缘情况,其中被压缩的数据量明显多于其他数据,并且由于大量数据被压缩,初始页面加载可能花费15-25秒。

我们最大的问题是我们无法对任何内容进行页面缓存。有问题的应用程序是非常大的CREATE / UPDATE,用户只有在需要进行更改时才能访问它,快速解析我们的日志显示PUT和POST数量超过GET几乎50到1.任何页面缓存,操作或片段的尝试缓存页面的任何部分几乎都会立即过期,这使得性能有点难以改进,因为所有其他层都已经过优化。我想知道的是:

有没有办法让我生成页面并用它“预热”缓存,以便在请求页面时我从缓存而不是应用程序中提供它?我在脑海中的想法是当用户使用现有页面进行PUTing和POSTing时(这一切都发生在xhr请求中)我的服务器可以使页面服务器端过期并重新生成,以便在用户请求完整页面时再次...... BAM它已经生成了,我正在服务它。显然,这将占用一些重要的系统资源,但我很幸运,我的硬件很棒,并且用户数量有限。

从逻辑的角度来看,似乎我以前必须做的事情,但我似乎无法在'网上找到它的任何例子。 。 。可能只是键入错误的单词。有任何想法吗?例子?我可以遵循的教程,插件或链接?

提前致谢!真的很感激!

2 个答案:

答案 0 :(得分:1)

很抱歉碰到旧线程,但我发现了这一点 - 不确定是否对有类似需求的人有帮助:https://github.com/tommyh/preheat

答案 1 :(得分:0)

我不知道有任何现有的插件或宝石可以帮你解决这个问题。

但是在保存模型时你可以找到很多关于缓存内容的内容,最糟糕的是你可以在你的after_save中有一个额外的钩子(一旦缓存的内容过期)点击将在内部生成该缓存的url。

伪码:

clear_cache
# get the page (in which the page is cached)
open("http://localhost/controller_name/#{id}").read

我不是说 这样做的方式,但它至少在技术上有效。