Плагин автозаполнения пользовательского интерфейса jQuery - Вопросы - PullRequest
2 голосов
/ 28 января 2011

У меня есть веб-приложение ASP.NET MVC 3 (Razor) и определенный View с плагином jQuery UI AutoComplete (v1.8).

Вот настройки, которые у меня сейчас есть:

$('#query').autocomplete({
        source: function (request, response) {
            $.ajax({
                url: "/Search/FindLocations",
                type: "POST",
                dataType: "json",
                data: { searchText: request.term },
                success: function (data) {
                    response($.map(data, function (item) {
                        return { name: item.id, value: item.name, type: item.type }
                    }))
                },
                error: function (xmlHttpRequest, textStatus, errorThrown) {
                    // don't know what i should do here...
                }
            })
        },
        select: function (event, ui) {
            $.get('/Search/RenderLocation', { id: ui.item.name }, function (data) {
                $('#location-info').html(data);
            });
        },
        delay: 300, minLength: 3
    });

Автозаполнение возвращает местоположения в мире, в основном идентичные автозаполнению Google Карт.

Вот мои вопросы:

1) Какие рекомендуемыенастройки для delay и minLength?Оставить по умолчанию?

2) Я думал о включении [OutputCache] в действие контроллера, но я смотрю, как будто плагин автоматически выполняет кэширование?Как это работает?Сохраняет ли он результаты в куки?Если так, когда это истекает?Рекомендуется ли дополнительное кэширование?

3) Я заметил, что если я что-то печатаю, и хотя AJAX-запрос запускается, если я что-то печатаю, в диалоговом окне отображается первый результат.на мгновение второй результат.Я могу понять почему, но это сбивает с толку пользователя (учитывая, что запрос AJAX может занять 1-2 секунды), но я думаю об использовании async: false в опциях $.ajax для предотвращения множественных запросов - это плохой дизайн / UX?

4) Можете ли вы порекомендовать какие-либо другие изменения в моих вышеуказанных настройках для улучшения производительности / удобства использования?

1 Ответ

0 голосов
/ 28 января 2011

1) Это действительно зависит от вашего использования и ваших данных.

2) Вы должны использовать [OutputCache]. Если в плагине происходит кэширование, оно будет только для каждого пользователя, если вы используете кэширование на уровне действий контроллера, оно будет кэшировать одно для всех пользователей. (опять же, это может быть на самом деле плохо в зависимости от вашего использования, но обычно это хорошо делать)

3) Этот вопрос тоже довольно сложный из-за отсутствия контекста. Если ajax-запросы составляют 1-2 секунды, и нет возможности сделать это короче, вы действительно должны быть довольно большими, чтобы пользователи не отправляли много запросов при наборе длинного слова (если они набирают медленно). 1005 *

4) звучит так, будто вам нужно взглянуть на ваш метод / search / FindLocations и посмотреть, где вы можете сделать кэширование или улучшить pref. Дайте нам посмотреть ваш код здесь, и я могу попытаться предложить больше.

...