Доступ к данным ASP.NET - PullRequest
       40

Доступ к данным ASP.NET

1 голос
/ 11 апреля 2009

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

На главной странице сайта отображается

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 11 апреля 2009

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

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

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

2 голосов
/ 11 апреля 2009

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

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

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

1 голос
/ 11 апреля 2009

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

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

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

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

Тем не менее, прежде чем делать что-либо из этого, сделайте, как Энтони предложил и профилируйте свой код. Узнайте, в чем истинная проблема.

...