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