jQuery自动完成源属性as function(){}非常慢

Jam*_*xon 6 jquery jquery-ui autocomplete jquery-ui-autocomplete

我有两个使用相当大的json对象(1.2mb)的测试用例:

source: data
Run Code Online (Sandbox Code Playgroud)

source: function (request, response) {
                response(data);
            }
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,自动完成功能正如我所料.

在第二种情况下,自动完成偶尔会起作用并且非常慢.有时浏览器会在再次释放之前挂起3-4秒"没有响应".

第二种情况与第一种情况相比有何不同?

(我会在某个时候在这个函数中加入一些过滤逻辑,但是现在我正在测试这个).

Jer*_*ith 5

当您将数据集作为本地对象传递时,您的数据集将被过滤,但在使用回调时不会被过滤(这将是程序员的责任).

使用source: data自动完成过滤器时,为您设置结果集:

response($.ui.autocomplete.filter(array, request.term));
Run Code Online (Sandbox Code Playgroud)

使用回调时,source: function(request, response) { response(data) }不会应用任何过滤,因此您的页面会生成1.3MB的json标记.

当自动完成从本地源加载数据时,它会缓存数据.远程检索时,默认情况下不会缓存它.

此jQuery UI自动完成文档解释了该行为,并建议如何为远程调用实现缓存.

http://jqueryui.com/demos/autocomplete/#remote-with-cache