ASP.NET MVC, автозаполнение текстового поля, кеширование? - PullRequest
4 голосов
/ 19 июля 2009

Используя ASP.NET MVC, я реализовал текстовое поле автозаполнения, используя подход, очень похожий на реализацию Бена Шейрмана, как показано здесь: http://flux88.com/blog/jquery-auto-complete-text-box-with-asp-net-mvc/

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

Если кеширование предпочтительнее, можете ли вы подсказать мне, как реализовать кеширование для этой цели?

Ответы [ 4 ]

5 голосов
/ 19 июля 2009

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

[OutputCache(Duration=60, VaryByParam="searchTerm")]

ASP.net будет обрабатывать все остальное.

5 голосов
/ 19 июля 2009

У вас есть пара вопросов, чтобы спросить себя:

  1. Являются ли данные, которые я извлекаю, динамическими?
  2. Если нет, как часто я ожидаю, что этот звонок произойдет?

Если ответы таковы: 1 - не совсем, а 2 - вызов часто случается, вы должны его кешировать.

Я не знаю, как настроен ваш доступ к данным, но я просто выбрасываю свои данные в объекты кэша, например:

public IQueryable<Category> FindAllCategories()
{
    if (HttpContext.Current.Cache["AllCategories"] != null)
        return (IQueryable<Category>)HttpContext.Current.Cache["AllCategories"];
    else
    {
        IQueryable<Category> allCats =  from c in db.Categories
                                          orderby c.Name
                                          select c;

        // set cache
        HttpContext.Current.Cache.Add("AllCategories", allCats, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, 30, 0, 0), System.Web.Caching.CacheItemPriority.Default, null);
        return allCats;
    }
}

Это пример одного из моих запросов к репозиторию, основанный на LINQ to SQL. Сначала он проверяет кеш, если запись существует в кеше, он ее возвращает. Если нет, то он отправляется в базу данных, затем кэширует его со скользящим сроком действия.

0 голосов
/ 19 июля 2009

Ну, как кеширование в asp.net предотвратит обход сервера? Вы по-прежнему будете выполнять обходы сервера, в лучшем случае вам не придется искать базу данных, если вы кешируете. Если вы хотите предотвратить обход сервера, вам необходимо кэшировать данные на стороне клиента.

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

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

0 голосов
/ 19 июля 2009

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

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