首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Ruby on Rails中缓存/加速下拉框数据

如何在Ruby on Rails中缓存/加速下拉框数据
EN

Stack Overflow用户
提问于 2012-05-23 02:46:55
回答 3查看 1.2K关注 0票数 3

我遇到一个页面刷新下拉列表需要很长时间的问题。基本上,在更改表单中的一个下拉值时,第二个下拉值的潜在选项将更改为不同的列表。

我怎么才能加快速度呢?我已经出于其他原因在使用REDIS了,如果这能有所帮助的话。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-23 04:19:28

如果你的主选择中的选项很少,那么你可以在第一次呈现页面时,在js散列的数组中设置所有可能的次要选项,然后在更改主要选项时,从客户端的js数组中查找-这显然很快,但如果有太多的选项,可能会减慢初始页面加载或增加页面大小。

另一种方法是仍然在主select发生更改时进行ajax调用,但是缓存返回辅助选项的操作。这将允许它根据请求中的参数进行缓存,并在可能的情况下使用rails缓存中的渲染结果(而不是总是使用redis或db)。

票数 2
EN

Stack Overflow用户

发布于 2012-05-23 04:27:45

Andrew Kuklewicz的回答很棒。更重要的是...

使用Rails的"Fragment Caching“。

如果在页面加载时将其发送到客户端,则example.html.erb:

代码语言:javascript
复制
<% cache do %>
  <script>
    var javascript_hash = {name: '<%=@ruby_val%>'};
  </script>
<% end %>

如果需要缓存ajax操作的输出,可以使用example.js.erb:

代码语言:javascript
复制
<% cache do %>
  alert('hello from javascript');
<% end %>

此外,在您的操作本身中,确保您只实例化ActiveRecord::Relation,而不是实际执行查询:

代码语言:javascript
复制
Company.where({name: 'foo'}) # this
Company.where({name: 'foo'}).all # not this
票数 2
EN

Stack Overflow用户

发布于 2012-05-23 05:04:03

一种技术含量较低的方法可能是呈现静态JSON或JavaScript文件,这些文件可以由包含辅助下拉列表内容的客户端缓存。

最简单的版本只是简单地写入某个路径,例如/cache/drop_down.state1.js等,其中客户端按需检索这些内容。您可以使用Rails页面缓存系统自动将这些结果保存到/public中,以便后续请求转到先前创建的相同JavaScript,从而消除了往返于数据库的需要。它们也可以根据需要过期。

您可以单独为每个下拉列表执行此操作,或者如果可行,可以一次完成所有下拉列表,然后包括它并从列表中选择适当的键。

这需要构建客户端脚本以动态创建和填充辅助下拉字段,包括选择适当的条目(如果应该预先选择一个条目)。不过,使用像jQuery这样的帮助库并不难。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10708146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档