Управление доставкой динамического содержимого в Silverlight - Резюме
ОГЛАВЛЕНИЕ
Резюме
Все изменения и детали, обсуждавшиеся до сих пор, возникают под прикрытием общедоступного класса — класса Downloader. Встраивая этот класс в приложение Silverlight, вы получаете сразу несколько уровней кэширования. При надлежащем кодировании загруженные пользовательские элементы управления можно кэшировать на время сеанса приложения. Если загружается содержимое, которое предназначено, скажем, для элемента вкладки, впоследствии можно скрывать и отображать элемент вкладки без необходимости в повторных загрузках пакета.
Если загрузка осуществляется посредством класса WebClient (как в статье прошлого месяца), то данные проходят через подсистему браузера, и вы получаете кэширование на уровне обозревателя. Любой загруженный пакет XAP находится на машине пользователя до тех пор, пока пользователь не очистит кэш обозревателя. Наконец, класс Downloader, который вы получаете с этой статьей, поддерживает постоянный кэш, реализованный с помощью изолированного хранилища. Это означает, что каждый раз, когда выполняется загрузка через WebClient, пакет XAP сохраняется и в локальном хранилище.
Но класс Downloader, кроме того, предоставляет возможность выбирать из хранилища файл XAP, если можно отыскать пакет, у которого не истек срок действия. Отмечу, что это верно в рамках нескольких сеансов приложения. Вы загружаете пакет один раз, работаете, а затем закрываете приложение. При возобновлении работы пакет повторно загружается из хранилища, если срок действия пакета не истек. Что происходит, если срок действия пакета истек? В этом случае загрузчик проходит через WebClient. Но в этот момент WebClient должен просто вернуть копию этого же пакета, кэшированную ранее обозревателем.
Так это задумано. Для обхода кэширования на уровне обозревателя необходимо, как обсуждалось в прошлом месяце, отключить эту операцию в исходном запросе HTTP. Необходимо кэшировать свойства на уровне страницы или получать пакет посредством обработчика HTTP, в котором можно более точно указать политики срока действия, не оказывая влияния на другие ресурсы, сопровождающие данную страницу.
Несколько заключительных замечаний
Кэширование пакета XAP не подразумевает кэширования отдельных ресурсов, таких как библиотеки DLL, анимация XAML или мультимедийное содержимое. В текущей реализации ресурсы извлекаются из пакета XAP каждый раз, когда они используются. Тем не менее, с помощью класса Downloader можно и дальше улучшать этот аспект. Подобным же образом пакет предоставляет пользовательский элемент управления, но не отслеживает изменения, которые пользователь может внести в рамках своего пользовательского интерфейса. Отслеживание динамических изменений дерева XAML является еще одной темой и заслуживает отдельной статьи.
Существуют два способа получения доступа к собственной файловой системе Silverlight на локальной машине пользователя. Во всех фрагментах кода для данной статьи я использовал метод GetUserStoreForApplication класса IsolatedStorageFile. Этот метод возвращает маркер для доступа к разделу файловой системы, изолированной для каждого приложения. Это означает, что все сборки, связанные с приложением (и только они), будут использовать одно и то же хранилище. Можно также выбрать хранилище и распределить его между всеми приложениями, размещенными на одном и том же узле. В этом случае вы получаете маркер с помощью метода GetUserStoreForSite.
Отмечу также, что локальным хранилищем можно управлять посредством диалогового окна настройки Silverlight (щелкните правой кнопкой мыши приложение Silverlight). Можно даже полностью его отключить. В этом случае при попытке получения маркера создается исключение. Дисковая квота для локального хранилища также распределяется по доменам; по умолчанию на один домен выделяется 1 МБ. Планируя использование постоянного кэша Silverlight, следует помнить об этом.
Автор: Дино Эспозито (Dino Esposito)
Источник: http://msdn.microsoft.com/ru-ru/magazine/