2011-10-13 26 views
6

Tôi có hai trường hợp thử nghiệm sử dụng một đối tượng hợp lý lớn json (1,2 MB):jQuery Autocomplete sở hữu nguồn như function() {} là rất chậm

source: data 

source: function (request, response) { 
       response(data); 
      } 

Trong lần đầu tiên trường hợp công việc tự động hoàn thành như tôi mong đợi.

Trong trường hợp thứ hai, tính năng tự động hoàn thành thỉnh thoảng hoạt động và rất chậm. Đôi khi trình duyệt bị treo trong 3-4 giây "không trả lời" trước khi nó giải phóng lại.

Điều gì đang xảy ra khác trong trường hợp thứ hai so với trường hợp đầu tiên?

(Tôi sẽ đưa một số logic lọc vào hàm này tại một số điểm nhưng hiện tại tôi đang thử nghiệm như thế này).

Trả lời

5

Tập dữ liệu của bạn đang được lọc khi chuyển nó dưới dạng đối tượng cục bộ nhưng không được lọc khi sử dụng gọi lại (sẽ là trách nhiệm của người lập trình).

Khi sử dụng source: data autocomplete lọc tập hợp kết quả cho bạn:

response($.ui.autocomplete.filter(array, request.term)); 

Khi sử dụng callback source: function(request, response) { response(data) } không lọc đang được áp dụng, do đó trang của bạn được tạo ra đánh dấu cho 1.3MB của json.

Khi tự động hoàn tất tải dữ liệu từ nguồn cục bộ, nó lưu trữ dữ liệu. Khi nó được lấy ra từ xa nó không được lưu trữ theo mặc định.

Tài liệu hướng dẫn tự động hoàn thành giao diện người dùng jQuery này giải thích hành vi và đề xuất cách triển khai bộ nhớ đệm cho cuộc gọi từ xa.

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

+0

Bạn có gợi ý rằng việc sử dụng một callback được coi là một nguồn dữ liệu từ xa? –

+0

Xin lỗi, tôi đã hiểu nhầm câu hỏi của bạn. Tôi đăng một bản cập nhật mà tôi tin là câu trả lời đúng. –

+0

Cảm ơn Jeremy. Điều đó trả lời câu hỏi của tôi một cách xuất sắc. –