Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top