首页 > 编程语言 >Silverlight如何使用应用程序库缓存

Silverlight如何使用应用程序库缓存

时间:2023-07-02 11:08:08浏览次数:57  
标签:文件 Silverlight 缓存 程序 应用 程序库


 

应用程序库缓存可在用户重新访问网站时帮助改善启动性能。

当您使用应用程序库缓存时,Silverlight 将某些程序集打包成应用程序包外部的外部部件(.xap 文件)。应用程序包中的清单指定启动时所需的程序集,并指示它们是在应用程序包的内部还是外部。

当用户首次访问您的网页时,Silverlight 插件下载应用程序包以及所有需要的外部部件。这些文件添加到浏览器缓存中,以便可以在后续访问时再次使用。

所有下载的文件都受服务器和浏览器中的缓存配置设置约束。在典型的配置中,仅当文件不在缓存中或它们比缓存的版本更高时,才下载这些文件。

库程序集的更改机会远小于应用程序程序集。因此,将它们作为单独的文件进行缓存非常重要。这样,当您更改应用程序代码而非库代码时,许多回访者将只下载 .xap 文件。

Silverlight 随 Silverlight SDK 提供了许多库,而它们不是运行时的组成部分。这些库已预配置为用于应用程序库缓存。在 Visual Studio 中,这些库与运行时程序集一起位于"添加引用"对话框的".NET"选项卡上。还可以从 Silverlight SDK 文件夹访问它们。默认情况下,Silverlight SDK 安装在 %ProgramFiles%/Microsoft SDKs/Silverlight 文件夹中。还可以配置自己的程序集,以便支持应用程序库缓存。

下面的过程介绍如何启用和使用应用程序库缓存,以及如何配置自己的程序集进行缓存。

启用应用程序库缓存
  1. 在"解决方案资源管理器"中,选择要为其启用库缓存的 Silverlight 应用程序项目。
  2. 在"项目"菜单上,选择项目名称"属性"。
    将显示项目设计器。
  3. 在"Silverlight"选项卡上,选择"使用应用程序库缓存减少 XAP 大小"。
    说明:

不能在同一个应用程序中使用应用程序库缓存和浏览器外支持。浏览器外应用程序要求所有启动程序集驻留在应用程序包中。

  1. 添加对于 Silverlight SDK 中某个库程序集的引用,或者添加对于由有效的 assemblyShortName.extmap.xml 映射文件伴随的任何程序集的引用。
    这会导致发生以下操作:
  • 程序集引用添加到项目中,其中"复制本地"值为 True。此值指示在启动时需要此程序集,并且该值与包内程序集使用的值相同。
  • 当您生成此项目时,生成操作会将此程序打包成一个单独的 zip 文件,并在应用程序清单中生成 ExtensionPart 元素。
  • 当 Silverlight 插件加载应用程序包时,它检查清单以搜索 ExtensionPart 元素,并下载所有对应的文件。如果您的应用程序实现初始屏幕,它将继续运行,直到加载所有外部部件。
将程序集配置为用于应用程序库缓存
  1. 在程序集所在的相同位置创建一个映射文件。此文件必须与程序集同名,而将 .dll 文件扩展名替换为".extmap.xml"。例如,Silverlight SDK 程序集 System.Json.dll 具有名为 System.Json.extmap.xml 的映射文件。
  2. 按下面示例中所述将配置数据添加到映射文件中,并替换程序集元素中的值以与程序集匹配。复制代码
System.Json
     
     
    
     
     
      
      2.0.5.0
     
     
    
     
     
      
      31bf3856ad364e35
  1. System.Json.dllname、version 和 publickeytoken 元素必须与对应的程序集元数据相匹配。relpath 元素指示程序集文件名。最后,extension 元素通过 downloadUri 属性指示打包的外部部件的名称。
    downloadUri 属性 (Attribute) 值用于填充应用程序清单中的 ExtensionPart..::.Source 属性 (Property),如下面的清单摘要中所示。

    复制代码
    如果 downloadUri 值是一个文件名,则当您添加对程序集的引用时,Visual Studio 提供以下支持:
  • 生成系统将程序集打包成具有指定文件名的 zip 文件。此文件将被复制到输出目录中 .xap 文件旁边。
  • 如果您使用相同的 downloadUri 文件名添加对于多个程序集的引用,则生成系统会将它们全部压缩成单个 zip 文件。
  • 不会自动添加 .zip 扩展名。尽管打包文件是 ZIP 文件,但您可以使用服务器要求的任何文件扩展名。

如果 downloadUri 是一个绝对 URI,生成系统将不会对程序集打包。而是由您负责压缩程序集并将其部署到指定的 URI。这可用于创建由多个应用程序使用的库的单一存储库。但是,当您使用绝对 downloadUri 值时,应考虑以下问题。

  • 如果 URI 与 .xap 文件位于不同的域中,则该域必须在其根目录中具有跨域策略文件。有关更多信息,请参见 Silverlight 中的 HTTP 通信和安全
  • 请记住,URI 是一个全局唯一标识符,可以引用非常具体的程序集文件。这意味着,您可以并且应该对不同的程序集版本使用不同的 URI。此外,当您在更新后的 URI 中部署新程序集版本时,应继续保持每个版本特定的 URI 和您创建的程序集。这有助于避免当使用 Silverlight 的一个版本构建的 .xap 文件试图加载使用其他版本构建的库时可能产生的问题。
在 Visual Studio 中测试应用程序库缓存
  1. 下载并安装 HTTP 通信监视器,例如,Fiddler。这样,您就可以查看 HTTP 请求和响应,并验证是否未下载缓存的文件。
  2. 打开下面的 Windows 功能:
  • Internet 信息服务 (IIS)
  • IIS 元数据库和 IIS 6 配置兼容性
  • ASP.NET
  • Windows 身份验证

IIS 是必需的,因为 Visual Studio 开发服务器在其 HTTP 响应标头中不启用缓存。

  1. 在管理员帐户的上下文中运行 Visual Studio。
  2. 在包含 Silverlight 项目的解决方案中,加入用于测试的 Web 项目。
  3. 将 Web 项目配置为使用 IIS,并从 HTTP 通信监视器中启用 localhost 监视。(例如,Fiddler 提供了一个代理 URL,您可以用它来替换"启动 URL"值中的"localhost"。)
  4. 执行以下操作并观察产生的 HTTP 通信:
  • 在 Visual Studio 中运行您的应用程序。
  • 在浏览器中按 F5 以重新加载页面。
  • 在另一个浏览器窗口中打开该页的 URL。
  • 在 Visual Studio 中重新生成解决方案,然后在浏览器中重新加载页面。

在初始下载之后,对于应用程序包和库文件的其他请求将不会生成附加的下载通信。而是请求由缓存的副本完成。但是,当您重新生成应用程序时,将检测到更改并且下载新副本。

  请参见

参考

ExternalPart

ExtensionPart


标签:文件,Silverlight,缓存,程序,应用,程序库
From: https://blog.51cto.com/u_3319687/6603656

相关文章

  • Silverlight 3 中的新增功能
    本主题包括下列各节。三维效果(透视转换)位图效果和像素着色器WriteableBitmap位图缓存支持新媒体(原始视频/音频和H.264)在运行时更改样式BasedOn样式动画缓动函数标志符号中的FontSource支持脱离浏览器支持基于Silverlight的本地应用程序之间的通信应用程序库缓存应用程序扩展......
  • Silverlight路线图
     本主题介绍用于开发基于Silverlight的应用程序的主要功能。其中包含使用代码示例创建基于Silverlight的应用程序的常规步骤,以帮助您初步了解如何编写代码。本主题包括下列各节。先决条件将Silverlight集成到应用程序中XAML布局控件添加代码逻辑动态语言图形媒体和动画数据......
  • Silverlight应用程序服务
     当使用Silverlight的托管API创建应用程序时,必须创建一个从Application派生的类。Application类提供应用程序通常要求的若干服务。它主要表示应用程序代码在Silverlight插件生命周期中的入口点。Silverlight插件生命周期自用户导航到承载Silverlight插件的网页时开始......
  • 如何创建新Silverlight项目
     Silverlight项目文件是您可以使用不同工具来创建和编辑的文本文件。例如,可以使用VisualStudio2008和ExpressionBlend来创建Silverlight项目或修改现有项目。有关更多信息,请参见ExpressionBlend文档。本主题介绍如何使用VisualStudio2008来创建和生成新的Silver......
  • gitlab--缓存 cache
    缓存cache介绍使用 cache 指定要在作业之间缓存的文件和目录列表。您只能使用本地工作副本中的路径。缓存在流水线和作业之间共享。缓存在产物之前恢复。cache:paths使用cache:paths关键字来选择要缓存的文件或目录,路径是相对于项目目录,不能直接链接到项目目录之外例如......
  • LeetCode-146-LRU缓存
    146题:LRU缓存题目请你设计并实现一个满足 LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量 capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回关键字的值,否则返回-1。voidput(intke......
  • LRU缓存机制
    LRU缓存题目链接LRU,即Least-Recently-Used。是一种高速缓存替换策略,是一种缓存机制。主要是利用局部性原理。局部性原理分两种,空间局部性和时间局部性。在一个具有良好时间局部性的程序中,被引用过一次的内存位置很可能在不远的将来再被多次应用。在一个具有良好空间局部性......
  • 4.Rasterization光栅化(反走样,深度缓存)
    走样Aliasing(锯齿)采样的广泛应用采样不仅可以在图片的某个位置,也可以在时间轴上动画就是一组图在时间的采样Artifacts(瑕疵、错误)采样会产生一些Artifacts(瑕疵、错误)例如:锯齿(图像上的采样)摩尔纹(删除图像奇数行,再放大成原大小后可得)”车轮效应“(车轮旋转速度过快,......
  • 缓存击穿、缓存雪崩、缓存穿透
    怎么防止缓存击穿:在实际应用中,我们会在程序和数据库之间增加一个缓存层,一方面是为了提升数据的检索效率,提升程序的性能,另一方面是为了缓解数据库的一个并发压力,缓存击穿是因为客户端恶意发送一些大量不存在的key的请求,由于访问的key,对应的数据本身不存在,所以每一次必然都会穿透到......
  • 四种语言刷算法之LRU 缓存
    力扣146. LRU缓存1、Ctypedefstruct{intkey;intval;UT_hash_handlehh;}LRUCache;LRUCache*usr=NULL;intsize=0;LRUCache*lRUCacheCreate(intcapacity){size=capacity;returnusr;}intlRUCacheGet(LRUCache*obj,intke......