Я делаю приложение (asp.net/c#), которое будет автоматически предлагать пару полей, которые вводят пользователи. Каждый пользователь в конечном итоге создаст свой собственный список автоматических предложений. Каждый раз, когда они добавляют элемент, если это новое слово, оно будет добавлено в их список автоматических предложений, как и в Gmail.
Мне было интересно, как большинство людей это делают? Звонок на сервер при каждом нажатии клавиши кажется не очень эффективным? Должен ли я сделать огромный XML-файл с одной записью для каждого пользователя? XML-файл для каждого пользователя? как я могу кэшировать это, чтобы сделать его эффективным?
Вопросы всевозможные, но в основном я ищу лучшие практики. Спасибо.
3 ответа
Я бы сохранял значения в базе данных (где вы, возможно, храните их профили пользователей) и извлекал значения в сеанс ASP.NET, когда пользователь входит в систему. Затем просто используйте значения из сеанса для значений автозаполнения. Таким образом, вам нужно будет только один раз попасть в базу данных, когда они войдут в систему.
Хранение данных
Вы должны сохранить эту информацию в базе данных. Создайте таблицу или две для хранения такого типа информации для каждого пользователя в поле.
Клиентский запрос
Вы можете запросить базу данных со стороны клиента (через AJAX), когда пользователь начнет вводить текст в текстовое поле. В этом случае рекомендуется подождать, пока в поле не будет не менее 3 (ish) символов, прежде чем запрашивать у сервера предложения. Это немного снижает количество запросов и трафик между клиентом и сервером.
Я использую этот метод для полей, где есть большое количество возможных совпадений с автоматическим предложением.
Кеширование
Если вы используете этот метод, вы можете оптимизировать процесс, кэшируя ответ в определенных ситуациях.
Предполагая, что запрос запускается только после того, как 3 символа находятся в текстовом поле, вы можете затем кэшировать весь результат. Любые дополнительные символы, добавленные в текстовое поле, не увеличивают количество возвращаемых результатов. Итак, вы можете просто продолжить фильтрацию кешированных результатов. Однако, если пользователь удаляет символ, вы можете обновить кеш, чтобы убедиться, что у вас есть наиболее подходящие варианты с автоматическим предложением.
Предварительная загрузка на стороне сервера
На стороне сервера соберите все эти данные и отправьте их вместе с запросом страницы. (Вы можете разместить его как массив javascript, на который можно ссылаться в событии onchange
текстового поля. Таким образом, вам не нужно выполнять какие-либо вызовы AJAX.
Кажется, это лучше для полей, где не будет большого количества возможных совпадений с автоматическим предложением.
Чак Норрис рекомендует, в зависимости от вашей среды JavaScript, вы можете создавать проверки на стороне клиента перед вызовом сервера, чтобы увидеть, есть ли заданное количество символов или слов, записанных в поле. XML-файл должен быть динамически сгенерирован с автоматическим предложением слов для данного пользователя на основе информации, введенной этим пользователем в базу данных.
В зависимости от приложения, которое вы пытаетесь создать, может быть проще выполнять полнотекстовые запросы SQL к определенным полям базы данных. Для повышения производительности вы, вероятно, могли бы создать файл cookie, который будет кэшироваться браузером клиентов, и ваше приложение будет проверять наличие изменений или проверять, существует ли он, прежде чем выполнять полный запрос к базе данных.
Чак не рекомендует использовать переменные сеанса, потому что вы снизите производительность своего приложения, потому что оно должно сохранять эти автоматически предлагаемые значения в памяти для каждого пользователя.
Чак хотел бы знать, нужно ли тебе что-нибудь еще, прежде чем он сдаст мой мозг.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.