2009-04-11 3 views
1

Я построил онлайновый новостной портал, перед которым работает отлично для меня, но некоторые говорят, что домашняя страница немного медленнее. Когда я думаю об этом, я вижу причину, почему это так.Data Access ASP.NET

Домашняя страница сайта отображается

  1. новости
  2. Пятно новости (суб-заголовки
  3. пятна с фотографиями
  4. Наиболее читаемые новости (как заголовки)
  5. Самые комментируемые новости (как названия)
  6. 5 названий новостей из каждой категории новостей (всего 11 человек, например, спорт, экономика, местное население, здоровье и т. д. .)

Теперь каждый из них представляет собой отдельные запросы к db. У меня есть таблицы наборов данных и datatables (стандартные сценарии доступа к данным), поэтому для заголовков я называю бизнес-логику в своем классе новостей, который возвращает данные datatables с помощью tableadapter. оттуда я либо использую datatable, просто привязывая его к элементам управления, либо (большую часть времени) объект преобразует его в список (из новостей), например, и я его уничтожаю оттуда.

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

Например, проект, который я описывал выше, является высокодинамичным веб-сайтом, новости вставляются по мере поступления из агентств круглосуточно без остановок. поэтому кэширование в этом случае может показаться не очень хорошим. но, с другой стороны, у меня есть другой подобный проект для местной газеты. Сайт будет обновляться только один раз в день. В этом случае: Могу ли я запустить только один запрос, который вернет datatable, содержащий все введенные на сегодняшний день новостные сообщения, затем запросит данные, которые будут размещены в виде данных, и помещает заголовки, точки и другие элементы в соответствующие места на сайте? Или есть лучшая альтернатива? Я просто блуждаю, как другие люди выполняют подобные задачи самым эффективным способом.

ответ

2

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

Во-вторых, вы можете загрузить плагин Yahoo Firefox YSlow и исследовать, есть ли у вас какие-либо замедляющие скрипты.

Но Firebug должен дать вам лучший обзор. После загрузки Firebug нажмите вкладку «Net», чтобы просмотреть время загрузки каждого элемента на странице.

+0

+1 для использования Firebug и YSlow для профилирования на стороне клиента. – Anthony

2

Если у вас низкая производительность, ваш первый шаг - не начинать сбрасывать. Профилируйте свой код. Узнайте, почему это происходит медленно. Является ли замедление при передаче страницы, ее рендеринга или фактической динамической генерации страницы? Слишком длинный один запрос?

Узнайте, где находится узкое горло, и атаковать проблему в ее сердце.

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

1

Если вы обнаружили, что ваши задержки поступают из БД, проверьте свои таблицы, убедитесь, что они правильно проиндексированы, сгруппированы или что-то еще, что вам нужно, в зависимости от объема данных в таблице. Кроме того, если вы используете динамические запросы, попробуйте вместо этого сохранить хранимые процедуры.

Если вы хотите получить несколько запросов в одном запросе базы данных, вы можете. Поскольку изначально вы не будете показывать какие-либо данные до тех пор, пока все запросы не будут выполнены в любом случае и не будут устранены другие проблемы, вы, по крайней мере, будете экономить время на обращении к БД для каждого отдельного запроса. DataSets содержит набор таблиц, которые могут быть сгенерированы несколькими запросами в одном запросе.

ASP.NET предоставляет вам довольно хороший механизм для кэширования (HttpContext.Cache), который вы можете обернуть и упростить для вас. Поскольку вы можете установить продолжительность жизни на ваших кеш-объектах, вам не нужно беспокоиться о том, что статьи и заголовок не обновляются.

Если вы используете WebForms для этого сайта, отключите ViewState для элементов управления, которые им действительно не нужны, чтобы сделать страницу, которая немного быстрее загружается. Не говоря уже о множестве других настроек и изменений, чтобы ускорить загрузку страницы (gzipping, сводя к минимуму скрипты и т. Д.)

Все еще, прежде чем делать что-либо из этого, сделайте как Anthony suggested и профайл вашего кода. Узнайте, какова настоящая проблема.

Смежные вопросы