我有一个页面需要很长时间才能刷新下拉列表。基本上在更改表单中的一个下拉值时,第二个下拉列表的潜在选项会更改为不同的列表。
我怎样才能加快速度?如果有帮助的话,我已经出于其他原因使用 REDIS。
谢谢!
我有一个页面需要很长时间才能刷新下拉列表。基本上在更改表单中的一个下拉值时,第二个下拉列表的潜在选项会更改为不同的列表。
我怎样才能加快速度?如果有帮助的话,我已经出于其他原因使用 REDIS。
谢谢!
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
如果您的主要选择中的选项很少,那么您可以在第一次呈现页面时在数组的 js 哈希中设置所有可能的次要选项,然后在更改主要选项时,从此客户端 js 数组中查找 - 这是显然很快,但如果选项太多,可能会减慢初始页面加载或使页面大小膨胀。
另一种方法是在主选择更改时仍然进行 ajax 调用,但缓存返回辅助选项的操作。这将允许它基于请求的参数进行缓存,并在可能的情况下使用 rails 缓存中的渲染结果(而不是总是点击 redis 或 db)。
一种技术含量较低的方法可能是呈现静态 JSON 或 JavaScript 文件,这些文件可由客户端缓存,其中包含辅助下拉列表的内容。
最简单的版本只是简单地写入某个路径,例如/cache/drop_down.state1.js
等等,客户端根据需要检索这些路径。您可以使用 Rails 页面缓存系统/public
自动为您保存这些结果,以便后续请求转到相同的先前创建的 JavaScript,从而无需往返数据库。它们也可以根据需要过期。
您可以为每个下拉菜单单独执行此操作,或者如果可行,一次为所有下拉菜单执行此操作,然后将其包括在内并从列表中选择适当的键。
这需要构建客户端脚本以动态创建和填充辅助下拉字段,包括选择适当的条目(如果应该预先选择一个条目)。不过,像 jQuery 这样的辅助库并不难。