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

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

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

3
naspinski 4 Фев 2009 в 20:07

3 ответа

Лучший ответ

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

1
mkchandler 4 Фев 2009 в 20:13

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

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

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

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

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

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

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

2
EndangeredMassa 5 Фев 2009 в 10:16

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

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

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

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

1
RJ Russell 5 Фев 2009 в 09:30
Бьюсь об заклад, ты самый слабый человек на этой доске ... :)
 – 
naspinski
5 Фев 2009 в 20:14