我有两个使用相当大的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/

10-13 00:21