Обновите тяжелую карту сайта MvcSiteMapProvider, добавив новые элементы.

У меня есть карта сайта с парой IDynamicNodeProviders. Когда я добавляю, например, новостную статью, которая должна быть помещена в карту сайта, я могу использовать Атрибут SiteMapCacheReleaseAttribute. Что будет, если релиз кеша делать много (может большой сайт с кучей изменений)? Если я хорошо понимаю документацию, карта сайта обновляется при следующем действии пользователя. Но если обновление может занять, скажем, 10 секунд, и обновление выполняется каждый раз, когда кто-то редактирует или добавляет какие-то данные, то посетители сайта ожидают, что сайт будет медленным.

Или я что-то упускаю?


person LockTar    schedule 03.09.2015    source источник


Ответы (1)


SiteMapCacheReleaseAttribute предназначен для администраторов веб-сайтов, которые время от времени добавляют/изменяют/удаляют данные, когда время, необходимое для перезагрузки SiteMap, незначительно по сравнению с количеством чтений.

На стороне пользователя лучше использовать свойство/атрибут PreservedRouteParameters для принудительное совпадение, чтобы вы могли повторно использовать один и тот же узел для каждой записи в таблице базы данных. См. загружаемую демонстрацию в статье, чтобы увидеть полный пример CRUD.

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

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

person NightOwl888    schedule 04.09.2015
comment
Ок спасибо за ответ. Поэтому, если администратор/участники меняют много данных (скажем, всемирная новостная компания с каждой минутой новой новостной статьей), карта сайта каждый раз сбрасывается. Таким образом, каждую минуту карта сайта обновляется. Что делать, если обновление карты сайта занимает около 6 секунд? Тогда ваш сайт не работает 10% времени? Просто попытайтесь понять, как это работает и что означает влияние атрибута. - person LockTar; 04.09.2015
comment
Это то, что я планирую исправить в следующей версии. Многое MvcSiteMapProvider было взято непосредственно из дизайна Microsoft SiteMapProvider, но вместе с этим появились и его ограничения. Одним из таких ограничений является то, что карта сайта полностью хранится в памяти в одном кэше. Я думаю, что каждый ISiteMapNodeProvider должен предоставлять инструкции по кэшированию и иметь отдельный кеш для каждого, но мне придется поэкспериментировать, чтобы выяснить, как это работает. В настоящее время, если вам нужно что-то более динамичное для создания «хлебных крошек», возможно, вам лучше создать собственное решение. - person NightOwl888; 05.09.2015
comment
Хорошо, спасибо за ответ. На данный момент это не проблема, но просто выяснял, может ли это стать проблемой в будущем. Мне очень нравится ваша упаковка! Все работает нормально прямо из коробки. Спасибо! - person LockTar; 07.09.2015