2010-04-09 2 views
2

Привет Я создаю внутреннее приложение для своей компании, используя jQuery's autocomplete, и нахожу, что он имеет тенденцию начинаться очень медленно. Мое предположение заключается в том, что шея бутылки, возможно, добавляет ее элементы в DOM, поскольку после первого запроса она кажется значительно более быстрой. Кто-нибудь знает, как предварительно загрузить эти элементы в загрузку страницы, а не делать это в первый раз, когда пользователь начнет печатать?Медленная загрузка jQuery Autocomplete

+0

Какой серверный язык вы используете? –

+0

PHP, но это не проблема, с первой попытки всегда медленнее. НАПРИМЕР. если я введу 'foobar' в качестве первого запроса и' random' как следующий, случайные результаты будут отображаться значительно быстрее (я проверил запросы MySQL и беспокоился о возвращении на что-то вроде 0.01ms) –

ответ

1

Если вам не нужно использовать вызовы ajax для извлечения данных, а ваш список автозаполнения не слишком велик, вы можете передать данные для автозаполнения из массива объектов js.

Давайте предположим, что у вас есть такие данные (которые вы строите уже, как вы хотите/можете):

var data = [{"n":name, "p":pagename,"c":number_of_results},...]; 

Тогда автозаполнения вызов будет выглядеть:

$("#autocomplete").autocomplete(data, { 
    matchContains: true, 
    formatItem: function(row, i, max) { 
     return row.n + " ("+row.c+")"; 
    }, 
    formatMatch: function(row, i, max) { 
     return row.n; 
    }, 
    formatResult: function(row) { 
     return row.n; 
    } 

}); 
$("#autocomplete").result(function(event, data, formatted) { 
    if(!data) { 
     alert("Please select an item"); 
    } else { 
     window.location.href = data.p; 
    } 
}); 

Это создаст автозаполнения, который будет выглядите как item name (number of results), и при нажатии на элемент он будет перенаправлен на соответствующий элемент pagename.

У меня около 1000 предметов, и скорость автозаполнения мгновенная.

0

Серверная сторона на PHP/SQL работает медленно.

Не используйте PHP/SQL. Моя автозаполнение написано на C++ и использует hashtables для поиска. См. Производительность here.

Это компьютер Celeron-300, FreeBSD, Apache/FastCGI.

И, видите ли, быстро бегает по огромным словарям. 10 000 000 записей не проблема.

Также поддерживает приоритеты, динамические переводы и другие функции.

Смежные вопросы