3

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

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

谢谢!

4

3 回答 3

2

Andrew Kuklewicz 给出了很好的回答。添加到它...

使用 Rails 的“片段缓存”。

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

<% cache do %>
  <script>
    var javascript_hash = {name: '<%=@ruby_val%>'};
  </script>
<% end %>

如果您需要缓存 ajax 操作的输出,example.js.erb:

<% cache do %>
  alert('hello from javascript');
<% end %>

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

Company.where({name: 'foo'}) # this
Company.where({name: 'foo'}).all # not this
于 2012-05-22T20:27:44.500 回答
2

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

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

于 2012-05-22T20:19:27.733 回答
1

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

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

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

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

于 2012-05-22T21:04:02.937 回答