Один и тот же ресурс может понадобиться в одном приложении несколько раз: при создании навигации по приложению, для отображения в различных участках в рамках одного проекта, для придания целостности (например, используя один и тот же файл шрифта), да и ещё много для чего. Используя silverlight объект 'downloader', можно заставить ваше приложение брать уже скачанные файлы, но необходимые снова, из кэша браузера. Это экономит трафик пользователей и снижает нагрузку на сервер. Рассмотрим небольшой пример. Добавим к стандартному JS файлу, создаваемому автоматически, глобальную переменную cached_downloader (это важно, так как при использовании локальной переменой, cached_downloader уничтожается после выполнения функции и кеширования не происходит) и назначим его инициализацию по событию onLoad плагина. В данном случае объектом для скачивания является файл шрифта, который затем назначается TextBox'у в функции handleDLComplete.
var cached_downloader;
var slControl;
function createSilverlight()
{
Silverlight.createObjectEx({
source: "Page.xaml",
parentElement: document.getElementById("SilverlightControlHost"),
id: "SilverlightControl",
properties: {
width: "100%",
height: "100%",
version: "1.0"
},
events: {
onLoad: handleLoad
}
});
}
if (!window.Silverlight)
window.Silverlight = {};
Silverlight.createDelegate = function(instance, method) {
return function() {
return method.apply(instance, arguments);
}
}
function handleLoad(control, userContext, sender)
{
slControl=control;
cached_downloader = control.createObject("downloader");
cached_downloader.addEventListener("completed",
"handleDLComplete");
cached_downloader.open("GET","myfont.ttf");
cached_downloader.send();
}
function handleDLComplete(sender,args)
{
var tb = sender.findName("txtChinese");
tb.setFontSource(cached_downloader);
tb.fontFamily="myfont family";
}
Если на следующей станице вам вновь понадобится этот шрифт, то можно использовать идентичный JavaScript-код для загрузки, но при инициализации этого и последующих запросов, шрифт уже будет загружен не с сервера, а из кэша браузера.