Asp.net Cache Dropdown данных на клиенте - PullRequest
3 голосов
/ 06 февраля 2010

Мы хотели бы кэшировать данные для некоторых выпадающих списков на клиентском компьютере, чтобы уменьшить передачу медленно меняющейся информации. Эти данные будут использоваться на нескольких страницах в бизнес-приложении, поэтому, например, список из 5000 клиентов часто используется либо для поиска, создания заказа на продажу, либо для других целей. Мы попробовали как полную загрузку данных со страницы, так и доступ к базе данных с постраничной загрузкой, а также загрузку сетки по требованию, которая возвращает только 25-50 записей. Пользователи жалуются на производительность обоих вариантов и хотят, чтобы они работали быстрее, поэтому мы ищем варианты того, как кэшировать данные на клиенте для повторного использования.

Мы видели в Интернете некоторые записи, касающиеся кэширования, что, возможно, файл JS может быть сгенерирован сервером и кэширован локально, чтобы быть источником данных для ddl, но так и не нашел, как это сделать.

Есть предложения? Или другие варианты, которые вы бы порекомендовали?

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

Ответы [ 2 ]

3 голосов
/ 06 февраля 2010

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

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

  2. Что именно медленно влияет на взаимодействие с пользователем? Проанализируйте его с помощью firebug или fiddler и посмотрите, сколько запросов делается к серверу на страницу. Простое сведение к минимуму количества отправляемых HTTP-запросов (например, путем слияния и минимизации CSS и javascript-сценариев) изменит время отклика.

  3. Что находится в вашем ViewState? Уменьшите объем данных, отправляемых взад и вперед в ViewState, для ускорения загрузки страницы.

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

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

2 голосов
/ 06 февраля 2010

Вы можете сделать это с помощью javascript, преобразовать список в JSON и подать его через тег сценария из кэша сервера. Я говорю JSON, потому что что-то вроде jQuery или любого другого фреймворка javascript может легко его использовать.

например. в html / aspx:

<script src="CustomerList.aspx?Refresh=12308798798023745" type="text/javascript"></script>

Обновлением является DateTime.Now.Ticks в последний раз, когда оно изменялось на сервере . Поэтому, пока вы размещаете этот тег на каждой странице, клиент получит его только один раз и снова, когда он действительно изменится на сервере.

Что-то вроде серверной стороны:

public class Cache {
  public static List<Customer> Customers { get; set; }
  public static DateTime LastRefresh { get; set; }
  public static void RefreshCustomers {
    //Populate Customers, Customers = blah;
    LastRefresh = DateTime.Now;
  }
}

На странице:

ScriptTagwithRunAtServer.Src = "CustomerList.aspx?Refresh=" + Cache.LastRefresh.Ticks;

Любой способ визуализации этого тега будет хорошим, просто пример. Страница CustomerList.aspx просто отобразит Cache.Customers в форме json ... и ваша страница будет работать с небольшим javascript, чтобы использовать его как угодно.

Просто идея, пожалуйста, прокомментируйте, если она вас интересует, а я что-то упускаю.

...