Доступ к данным ASP.NET
Я создал онлайн-портал новостей, который раньше работал нормально для меня, но некоторые говорят, что домашняя страница немного медленная. Когда я думаю об этом, я вижу причину, почему это так.
На главной странице сайта отображаются
- Последние новости
- Спот новости (подзаголовки
- Пятна с картинками
- Самые читаемые новости (как заголовки)
- Самые комментируемые новости (как заголовки)
- 5 заголовков новостей из каждой категории новостей (всего 11, например, спорт, экономика, местное здравоохранение и т. Д.)
теперь каждый из них - это отдельные запросы к БД. У меня есть наборы данных таблиц-адаптеров и таблицы данных (стандартные сценарии доступа к данным), поэтому для заголовков я вызываю бизнес-логику в своем классе новостей, которая возвращает таблицы данных адаптером таблиц. с этого момента я либо использую datatable, просто привязывая его к элементам управления, либо (в большинстве случаев) объект преобразует его, например, в список (новостей), и я использую его оттуда.
Делать это для каждого из вышеперечисленных, кажется, работает нормально, хотя. По крайней мере, это не ставит огромный груз. Но заставляет меня задуматься, есть ли лучший способ.
Например, проект, который я описал выше, является высокодинамичным веб-сайтом, новости добавляются по мере поступления из агентств 24 часа в сутки. поэтому кэширование в этом случае может показаться нехорошим. но с другой стороны, я знаю, что есть еще один подобный проект для местной газеты. Сайт будет обновляться только один раз в день. В этом случае: Могу ли я выполнить только один запрос, который вернет таблицу данных, содержащую все новости, вставленные за сегодня, а затем запросит эту таблицу и разместит заголовки, рекламные ролики и другие элементы в соответствующих местах на сайте? Или есть лучшая альтернатива? Мне просто интересно, как другие люди выполняют подобные задачи наиболее эффективным способом.
3 ответа
Я думаю, что вы должны использовать FireBug, чтобы узнать, какие элементы требуют времени для загрузки. Иногда большие изображения могут испортить представление (и размер изображения на экране не всегда зависит от размера загрузки).
Во-вторых, вы можете скачать плагин Yahoo Firefox YSlow и проверить, есть ли у вас замедляющие скрипты.
Но Firebug должен дать вам лучший обзор. После загрузки Firebug нажмите на вкладку "Сеть", чтобы увидеть время загрузки каждого элемента на странице.
Если у вас плохая производительность, ваш первый шаг - не начинать дурачиться. Профилируйте свой код. Узнайте точно, почему это медленно. Замедление передачи страницы, ее рендеринга или динамического генерирования страницы? Один запрос занимает слишком много времени?
Узнайте, где именно находится узкое место, и решите проблему в самом ее сердце.
Кэширование также очень хорошая идея, даже если контент обновляется довольно быстро. Пока ваш механизм кэширования интеллектуален, вы все равно сэкономите много времени генерации. В случае новостного портала или блога, а не форума, вы можете значительно повысить производительность с помощью системы кеширования.
Если вы обнаружите, что ваши задержки поступают из БД, проверьте таблицы, убедитесь, что они правильно проиндексированы, кластеризованы или что-то еще, что вам нужно, в зависимости от объема данных в таблице. Кроме того, если вы используете динамические запросы, попробуйте вместо этого хранимые процедуры.
Если вы хотите выполнить несколько запросов за один запрос к базе данных, вы можете. Поскольку изначально вы не будете показывать какие-либо данные до тех пор, пока все запросы не будут выполнены в любом случае, и не будете исключать любые другие проблемы, вы по крайней мере сэкономите время на повторном обращении к БД для каждого запроса. Наборы данных содержат набор таблиц, они могут быть сгенерированы несколькими запросами в одном запросе.
ASP.NET предоставляет вам довольно хороший механизм для кеширования (HttpContext.Cache), который вы можете обернуть и упростить его использование. Так как вы можете установить срок службы ваших кэшированных объектов, вам не нужно беспокоиться о том, что статьи и заголовки не обновляются.
Если вы используете WebForms для этого сайта, отключите ViewState для элементов управления, которые на самом деле не нужны, просто чтобы страница загружалась немного быстрее. Не говоря уже о множестве других твиков и изменений для ускорения загрузки страницы (сжатие, минимизация скриптов и т. Д.)
Тем не менее, прежде чем делать что-либо из этого, сделайте, как предложил Энтони, и профилируйте свой код. Узнайте, в чем истинная проблема.