Какой подход использовать для кэширования уникальных списков автоматического предложения для пользователей? - PullRequest
3 голосов
/ 04 февраля 2009

Я создаю приложение (asp.net/c#), которое будет автоматически добавлять пару полей, которые вводят пользователи. Каждый пользователь в конечном итоге создаст свой собственный список автоматического предложения. Каждый раз, когда они добавляют элемент, если это новое слово, он добавляется в их список автоматических предложений, как gmail.

Мне было интересно, как большинство людей делают это? Звонок на сервер для каждого нажатия клавиши не кажется очень эффективным? Должен ли я сделать огромный XML-файл с одной записью для каждого пользователя? XML-файл для каждого пользователя? как бы я кешировал это, чтобы сделать его эффективным?

Все виды вопросов, но я в основном ищу лучшие практики. Спасибо.

Ответы [ 3 ]

2 голосов
/ 05 февраля 2009

Хранение данных
Вы должны хранить эту информацию в базе данных. Создайте одну или две таблицы для хранения этого типа информации для каждого пользователя в каждом поле.

Запрос на стороне клиента
Вы можете запросить базу данных со стороны клиента (через AJAX), когда пользователь начинает вводить текстовое поле. Если вы сделаете это, рекомендуется подождать, пока в поле появятся не менее 3 (ish) символов, прежде чем запрашивать предложения у сервера. Это немного уменьшает количество запросов и трафик между клиентом и сервером.

Я использую этот метод для полей, где имеется большое количество возможных совпадений с автоматическим предложением.

Кэширование
Если вы используете этот метод, вы можете оптимизировать процесс, кэшируя ответ в определенных ситуациях.

Предполагая, что запрос запускается только после того, как в текстовом поле появятся 3 символа, вы можете затем кэшировать весь результат. Любые дополнительные символы, добавленные в текстовое поле, не будут увеличивать количество возвращаемых результатов. Таким образом, вы можете просто продолжить фильтровать кэшированные результаты. Однако если пользователь удаляет персонажа, вы можете обновить кэш, чтобы убедиться, что у вас есть наиболее подходящие из доступных автоматических совпадений.

Предварительная загрузка на стороне сервера
На стороне сервера соберите все эти данные и отправьте их вместе с запросом страницы. (Вы можете поместить его как массив javascript где-нибудь, на который можно сослаться в событии onchange текстового поля. Таким образом, вам не нужно делать никаких вызовов AJAX.

Похоже, это лучше для полей, где не будет большого количества возможных попаданий с автоматическим предложением.

1 голос
/ 05 февраля 2009

Чак Норрис рекомендует, в зависимости от вашей среды JavaScript, что вы можете создавать проверки на стороне клиента перед выполнением вызова сервера, чтобы посмотреть, есть ли в поле заданное количество символов или слов. Файл XML должен генерироваться динамически с автоматически предложенными словами для данного пользователя на основе информации, введенной этим пользователем в базу данных.

В зависимости от приложения, которое вы пытаетесь создать, может быть проще выполнять полнотекстовые запросы SQL для определенных полей базы данных. Для повышения производительности вы, вероятно, могли бы создать cookie-файл, который будет кэшироваться браузером клиента, и ваше приложение проверяет наличие изменений или проверяет, существует ли оно перед выполнением полного запроса к базе данных.

Чак не рекомендует использовать переменные сеанса, потому что вы снизите производительность своего приложения, потому что он должен сохранять эти значения автоматического предложения в памяти для каждого пользователя.

Чак хотел бы знать, нужно ли вам что-нибудь еще, прежде чем он сдаст мой мозг.

1 голос
/ 04 февраля 2009

Я бы сохранил значения в базе данных (где вы, возможно, храните их пользовательские профили) и вытянул их в сеанс ASP.NET при входе пользователя. Затем просто используйте значения из сеанса для автоматического завершения ценности. Таким образом, вам нужно будет войти в базу данных только один раз, когда они войдут в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...