如何使用应用程序库缓存
文字摘自:http://msdn.microsoft.com/zh-cn/library/dd833069%28v=vs.95%29.aspx
?
應用程序庫緩存可在用戶重新訪問網站時幫助改善啟動性能。
當您使用應用程序庫緩存時,Silverlight 將某些程序集打包成應用程序包外部的外部部件(.xap 文件)。應用程序包中的清單指定啟動時所需的程序集,并指示它們是在應用程序包的內部還是外部。
當用戶首次訪問您的網頁時,Silverlight 插件下載應用程序包以及所有需要的外部部件。這些文件添加到瀏覽器緩存中,以便可以在后續訪問時再次使用。
所有下載的文件都受服務器和瀏覽器中的緩存配置設置約束。在典型的配置中,僅當文件不在緩存中或它們比緩存的版本更高時,才下載這些文件。
庫程序集的更改機會遠小于應用程序程序集。因此,將它們作為單獨的文件進行緩存非常重要。這樣,當您更改應用程序代碼而非庫代碼時,許多回訪者將只下載 .xap 文件。
Silverlight 隨 Silverlight SDK 提供了許多庫,而它們不是運行時的組成部分。這些庫已預配置為用于應用程序庫緩存。在 Visual Studio 中,這些庫與運行時程序集一起位于"添加引用"對話框的".NET"選項卡上。還可以從 Silverlight SDK 文件夾訪問它們。默認情況下,Silverlight SDK 安裝在 %ProgramFiles%\Microsoft SDKs\Silverlight 文件夾中。還可以配置自己的程序集,以便支持應用程序庫緩存。
應用程序庫緩存僅影響應用程序在啟動時需要的那些程序集。如果您的應用程序按需加載了一些程序集,該應用程序會始終從服務器檢索這些程序集,而始終不會從瀏覽器緩存中檢索。
下面的過程介紹如何啟用和使用應用程序庫緩存,以及如何配置自己的程序集進行緩存。
啟用應用程序庫緩存
在"解決方案資源瀏覽器"中,選擇要為其啟用庫緩存的 Silverlight 應用程序項目。
在"項目"菜單上,選擇項目名稱"屬性"。
將顯示項目設計器。
在"Silverlight"選項卡上,選擇"使用應用程序庫緩存減少 XAP 大小"。
說明:
不能在同一個應用程序中使用應用程序庫緩存和瀏覽器外支持。瀏覽器外應用程序要求所有啟動程序集駐留在應用程序包中。
添加對于 Silverlight SDK 中某個庫程序集的引用,或者添加對于由有效的 assemblyShortName.extmap.xml 映射文件伴隨的任何程序集的引用。
這會導致發生以下操作:
-
程序集引用添加到項目中,其中"復制本地"值為 True。此值指示在啟動時需要此程序集,并且該值與包內程序集使用的值相同。
-
當您生成此項目時,生成操作會將此程序打包成一個單獨的 zip 文件,并在應用程序清單中生成 ExtensionPart 元素。
-
當 Silverlight 插件加載應用程序包時,它檢查清單以搜索 ExtensionPart 元素,并下載所有對應的文件。如果您的應用程序實現初始屏幕,它將繼續運行,直到加載所有外部部件。
將程序集配置為用于應用程序庫緩存
在程序集所在的相同位置創建一個映射文件。此文件必須與程序集同名,而將 .dll 文件擴展名替換為".extmap.xml"。例如,Silverlight SDK 程序集 System.Json.dll 具有名為 System.Json.extmap.xml 的映射文件。
按下面示例中所述將配置數據添加到映射文件中,并替換程序集元素中的值以與程序集匹配。
復制
<?xml version="1.0"?> <manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><assembly><name>System.Json</name><version>2.0.5.0</version><publickeytoken>31bf3856ad364e35</publickeytoken><relpath>System.Json.dll</relpath><extension downloadUri="System.Json.zip" /></assembly> </manifest>name、version 和 publickeytoken 元素必須與對應的程序集元數據相匹配。relpath 元素指示程序集文件名。最后,extension 元素通過 downloadUri 屬性指示打包的外部部件的名稱。
downloadUri 屬性 (Attribute) 值用于填充應用程序清單中的 ExtensionPart.Source 屬性 (Property),如下面的清單摘要中所示。
復制
<Deployment.ExternalParts><ExtensionPart Source="System.Json.zip" /> </Deployment.ExternalParts>如果 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 中測試應用程序庫緩存
下載并安裝 HTTP 通信監視器,例如,Fiddler。這樣,您就可以查看 HTTP 請求和響應,并驗證是否未下載緩存的文件。
打開下面的 Windows 功能:
-
Internet 信息服務 (IIS)
-
IIS 元數據庫和 IIS 6 配置兼容性
-
ASP.NET
-
Windows 身份驗證
IIS 是必需的,因為 Visual Studio 開發服務器在其 HTTP 響應標頭中不啟用緩存。
在管理員帳戶的上下文中運行 Visual Studio。
在包含 Silverlight 項目的解決方案中,加入用于測試的 Web 項目。
將 Web 項目配置為使用 IIS,并從 HTTP 通信監視器中啟用 localhost 監視。(例如,Fiddler 提供了一個代理 URL,您可以用它來替換"啟動 URL"值中的"localhost"。)
執行以下操作并觀察產生的 HTTP 通信:
-
在 Visual Studio 中運行您的應用程序。
-
在瀏覽器中按 F5 以重新加載頁面。
-
在另一個瀏覽器窗口中打開該頁的 URL。
-
在 Visual Studio 中重新生成解決方案,然后在瀏覽器中重新加載頁面。
在初始下載之后,對于應用程序包和庫文件的其他請求將不會生成附加的下載通信。而是請求由緩存的副本完成。但是,當您重新生成應用程序時,將檢測到更改并且下載新副本。
轉載于:https://www.cnblogs.com/elaborateday/archive/2011/03/29/1998711.html
總結
以上是生活随笔為你收集整理的如何使用应用程序库缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 体系结构和应用程序组成
- 下一篇: Oracle 实例恢复时 前滚(rol