我有两个使用相当大的 json 对象(1.2mb)的测试用例:
source: data
和
source: function (request, response) {
response(data);
}
在第一种情况下,自动完成功能按我的预期工作。
在第二种情况下,自动完成功能偶尔会起作用,而且速度非常慢。有时浏览器会挂起 3-4 秒“无响应”,然后才再次释放。
与第一种情况相比,第二种情况有什么不同?
(我会在某个时候在此函数中添加一些过滤逻辑,但现在我正在这样进行测试)。
最佳答案
您的数据集在作为本地对象传递时会被过滤,但在使用回调时不会被过滤(这将是程序员的责任)。
当使用source: data
时自动完成功能会为您过滤结果集:
response($.ui.autocomplete.filter(array, request.term));
使用回调时source: function(request, response) { response(data) }
没有应用任何过滤,因此您的页面正在生成 1.3MB json 的标记。
当自动完成从本地源加载数据时,它会缓存数据。当远程检索时,默认情况下不会缓存。
此 jQuery UI 自动完成文档解释了该行为并建议如何实现远程调用的缓存。
http://jqueryui.com/demos/autocomplete/#remote-with-cache
罢工><罢工>罢工>
关于jQuery Autocomplete 源属性作为 function(){} 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7754156/