我有一个Rails应用程序,它用cocoon在select上从一个模型加载超过2k个寄存器用于关联。我已经在使用select2 jQuery插件来滚动和搜索主题,但是加载速度非常慢。
<%= f.select :subject_id, options_for_select(Subject.all.map{ |c| [c.name, c.id, {}] }, f.object.subject_id), {include_blank: 'Select a subject'}, {required: true, class: "select2 "} %>
这个模型从模型中加载了超过2k个寄存器,使得select加载速度很慢,对于用户来说,从模型中更快地加载寄存器的最佳实践是什么?
发布于 2018-09-26 17:36:55
您应该考虑使用诸如Select2之类的javascript插件,它将使您能够搜索与远程ajax调用的关联。您可以在https://select2.org/data-sources/ajax中看到Select2 ajax的实际应用。
然后,你需要在javascript中初始化select2,并确保你的寄存器控制器响应json (你也应该对这些结果进行分页,比如Kaminari gem)。
任何时候,当您添加对可能包含许多记录的关联的引用时,都会希望使用此远程方法来选择记录。
如果您发现有许多关联需要此相同的远程查找行为,则可以使用诸如SimpleForm之类的gem来帮助创建可重用的custom input,以便为您设置此行为。
发布于 2018-09-28 07:21:59
你不应该一次从数据库加载2k条记录,你的数据必须对每个请求进行分页/限制。你会遇到Ruby的性能问题(内存问题),你的JS的性能也会很差。
一种可能的解决方案是将记录从SQL移动到Redis。因为Redis更快。然后从Redis获取数据。
要在Select2中处理大型数据集,请遵循以下plnkr:http://embed.plnkr.co/db8SXs/preview
发布于 2018-09-28 11:18:39
我得到了一个参数为Select2的解决方案。我让它只在输入最后3位数字后才开始搜索。这样,在处理大量数据时,它就不再慢了。
$(".select2").select2({
width: '100%',
placeholder: 'Start ',
minimumInputLength: 2,
tags: true
});
https://stackoverflow.com/questions/52522981
复制