我有两个使用相当大的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 Autocomplete文档解释了该行为并建议了如何为远程调用实现缓存。
http://jqueryui.com/demos/autocomplete/#remote-with-cache
关于作为function(){}的jQuery Autocomplete源属性非常慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7754156/