Поиск правильной стратегии кэширования и сжатия для asp.net - PullRequest
2 голосов
/ 11 июня 2009

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

  1. Пользователь запрашивает тему из Википедии через мой сайт (то есть http://www.wikipedia.org/wiki/Kevin_Bacon будет http://www.wikipediamaze.com/wiki?topic?=Kevin_Bacon) ПРИМЕЧАНИЕ. Поскольку IIS не может обработать запросов, заканчивающихся на '.' Я вынужден использовать параметр строки запроса
  2. Проверьте, сохранил ли я уже отформатированный html в своей базе данных, и если это так, просто отобразите его пользователю
  3. В противном случае я выполняю веб-запрос к википедии
  4. При необходимости распаковать поток.
  5. Сделайте кучу манипуляций с DOM, чтобы избавиться от того, что мне не нужно (и введите то, что мне нужно).
  6. Хранить HTML в моей базе данных для будущих запросов
  7. Вернуть HTML в браузер

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

  1. Есть ли лучший способ сделать кеширование или дополнительные вещи, которые я могу сделать, чтобы помочь производительности?
  2. Я знаю, что asp.net имеет встроенный механизм кэширования, но будет ли он работать так, как мне нужно? Я не хочу получать html (довольно тяжелый) из базы данных при каждом запросе, но мне НЕОБХОДИМО хранить html, чтобы каждый пользователь получал одну и ту же страницу. Я только хочу получить данные из Википедии 1 раз.
  3. Могу ли я что-нибудь сделать со сжатием, чтобы быстрее доставить его в браузер, и если да, то может ли браузер обрабатывать несжатие и отображение html? Или это даже не рассмотрение. Единственная причина, по которой я спрашиваю, состоит в том, что некоторые страницы Википедии отправляют меня через HttpWebRequest через gzip-поток.

Любые предложения, рекомендации и т. Д. Очень ценятся.

Спасибо!

Ответы [ 2 ]

1 голос
/ 11 июня 2009

Вы можете попытаться включить OutputCache для своей страницы с помощью VaryByParam = topic. Это сохраняет копию страницы в памяти, если ее запрашивают несколько клиентов. Когда страница не находится в памяти, сервер может извлечь ее из вашей базы данных. Прелесть OutputCache в том, что вы даже можете хранить сжатую версию HTML (используйте VaryByEncoding)

Если вам сложно распаковать материал, который вы получаете из Википедии, не отправляйте заголовок Accept-Encoding. Это должно заставить Википедию прислать вам страницу без сжатия.

1 голос
/ 11 июня 2009

Стратегия кэширования: запишите HTML-код в статический файл и разрешите пользователям загружать файлы из этого файла. Стратегия сжатия: посмотрите Рекомендации Google PageSpeed ​​.

...