【问题标题】:How do I optimize repeated queries for pages in Rails?如何优化 Rails 中页面的重复查询?
【发布时间】:2014-01-14 12:08:12
【问题描述】:

在我网站上每个页面的侧面,我列出了该部分中的其他页面。我还标记用户是否访问或完成了每个页面。每次页面加载时,Rails 都必须检查数据库以查看用户是否访问或完成了 Section 中的每个页面,这使得显示页面需要更长的时间。有什么办法可以加快速度吗?

示例:用户访问页面 2 并加载侧边栏。然后他访问了第 3 页,侧边栏再次加载,但可能在第 2 页旁边带有不同的标记。

                 Page 2
                 ------

- ✓ page 1     |     Main Content
- > page 2     |    The quick brown fox...
-   page 3     |
     ...

【问题讨论】:

  • turbolinks gem 如果我了解您正在寻找的内容会有所帮助。但它有一些警告。 turbolinks 用于前端 pjax。使用带有 dalli 的 memcached 进行查询缓存
  • 您是否有理由使用访问的链接来模拟浏览器行为?
  • :visited CSS 伪属性怎么样?

标签: ruby-on-rails ruby-on-rails-3 postgresql caching ruby-on-rails-3.2


【解决方案1】:

您可以在几个方面提高性能,无论是在数据库查找还是在渲染方面。

对于渲染,您应该查看已访问链接的侧边栏 fragment cacheing,尽管您的场景在跟踪应用中已访问链接方面有点不同寻常。

对于侧栏中的每个链接,您可以保存一个表示已访问和未访问的片段,然后外部容器可以表示已访问和未访问的任何排列,因为当您显示它时它是哪个用户并不重要。对于这些场景,您最终会得到很多不同的侧边栏。

对于数据库,您可以查看 identity_cache 之类的内容并将用户页面访问列表保存在缓存中,以避免不必要的查找,当他们点击新页面时无效。

对于关于 Rails 和一般加速的如此广泛的问题,这是我所能得到的,这似乎是问题所要问的。您还可以通过使用不同的缓存后端和服务器来获得许多其他特定于平台的加速。

【讨论】:

    【解决方案2】:

    我假设您在数据库表中跟踪他们访问和/或完成的页面,因为这些数据需要保持状态。

    如果是这样,首先,请确保您的表在需要查找的列上正确索引。

    然后,将结果缓存在会话变量中,以便您可以从那里检索它,并且仅在必要时才进入数据库(例如,某些事情改变了状态或一段时间的流逝)

    【讨论】:

      猜你喜欢
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多