Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在RubyonRails中缓存/加速下拉框数据_Javascript_Ruby On Rails_Ruby_Caching - Fatal编程技术网

Javascript 如何在RubyonRails中缓存/加速下拉框数据

Javascript 如何在RubyonRails中缓存/加速下拉框数据,javascript,ruby-on-rails,ruby,caching,Javascript,Ruby On Rails,Ruby,Caching,我有一个页面问题,需要很长时间才能刷新下拉列表。基本上,在更改表单中的一个下拉值时,第二个下拉列表的潜在选项将更改为不同的列表 我怎样才能加快速度?如果可以的话,我已经出于其他原因使用REDIS了 谢谢 如果主选择中的选项很少,则可以在首次呈现页面时在js数组哈希中设置所有可能的辅助选项,然后在更改主选择时,从该客户端js数组进行查找-这显然很快,但如果选项太多,则可能会减慢初始页面加载或增大页面大小 另一种方法是在主选择更改时仍然进行ajax调用,但缓存返回辅助选项的操作。这将允许它基于请求中

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

我怎样才能加快速度?如果可以的话,我已经出于其他原因使用REDIS了


谢谢

如果主选择中的选项很少,则可以在首次呈现页面时在js数组哈希中设置所有可能的辅助选项,然后在更改主选择时,从该客户端js数组进行查找-这显然很快,但如果选项太多,则可能会减慢初始页面加载或增大页面大小


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

Andrew Kuklewicz的回答很好。再加上

使用“Rails”

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

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

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

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

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


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

如果您查看log/development.log,是否有明显缓慢的查询或部分呈现?我非常理解这些查询,我正在寻找更多有关缓存或其他方法的信息,这些方法在有人更改浏览器下拉列表时不需要在服务器上查找数据库。我目前正在将所有可能的选项存储在客户端哈希中。有些下拉列表有很多选项。这会降低初始页面加载速度。总的来说,这是一个很好的建议——但是我这样做了,在这种情况下,它会大大降低初始页面加载速度。您可以在文件中加载辅助选项,然后使用脚本标记将它们添加到页面中,在这种情况下,浏览器甚至可以缓存javascript文件,在服务器端也可以。这将有助于初始页面加载,但缺点是在加载脚本文件之前,您可能必须禁用更改主选择。我目前正在将所有可能的选项存储在客户端哈希中。有些下拉列表有很多选项。这会降低初始页面加载速度。总的来说,Andrew的推荐是一个很好的建议——但是我这样做了,在这种情况下,它会大大降低初始页面的加载速度。
<% cache do %>
  alert('hello from javascript');
<% end %>
Company.where({name: 'foo'}) # this
Company.where({name: 'foo'}).all # not this