Silverlight開發廋身攻略(一)

作者: 劉其武  來源: 博客園  發布時間: 2010-12-20 22:48  閱讀: 1308 次  推薦: 0   原文鏈接   [收藏]  

  相信大家在用Silverlight做應用開發時,隨著項目的進展系統功能越來越多,肯定為Xap包越來越大而煩惱,Xap包的大小直接影響應用程序的加載速度,給用戶造成不良的用戶體驗。我也曾為這個問題頭痛過,經過在網上查閱資料和項目實踐發現可通過以下三種方式給Silverlight應用程廋身。

  1、定期檢查系統項目模塊的引用集,移除多余的引用庫

  2、圖片資源文件,如果不是必須放在資源中的,可以采用按需加載

  3、將系統劃分成多個Silverlight項目,然后根據需要進行Xap加載

  下面我將結合實例來對三種方法進行說明:

  一、定期檢查,移除多余引用庫

  在我們實際項目開發中,我們有時因技術的需要會引用一些第三方控件、.Net FrameWork框架下的動態庫,但后來發現不需要這么做只是在界面上或代碼中移除控件,沒有對程序集引庫進行檢查移除,從而導致在Xap包中打入了一些無用動態庫,造成資源浪費,Xap包體積增大。這種方法簡單,只要在項目日常管理中注意就能解決。

  二、圖片資源按需加載

  圖片資源在應用系統中占有相當大的比重,如我們的界面上的背景、按鈕圖標等等。它們都被編譯到項目dll文件中,然后打包到Xap中。為了減小Xap包的大小,我們可以把圖片資源和Xap包分開存放,當系統需要進行下載。

  操作實例:

  1、用Vs2010添加名稱為LoadImage的SL Application項目

  2、在SL Application項目中添加images文件夾,然后在文件夾中添加兩張圖片1.png、2.jpg,將兩張圖片的Build Action屬性由原來默認"Resource"改成"DesignData",這么做的好處是圖片在設計期可用,便于界面設計,程序編譯時圖片不在Xap包中。如下圖所示:   

  3、在LoadImage.Web項目中的ClientBin目錄下也添加images目錄,并且添加圖片1.png、2.jpg。如下圖所示:   

    4、在LoadImage項目的MainPage.xaml文件中添加如下代碼:

 
<Grid x:Name="LayoutRoot">
<Grid.Background>
<ImageBrush ImageSource="/images/1.png" />
</Grid.Background>
<Image Grid.Column="1" Source="/images/2.jpg" Height="300" Width="400"></Image>
</Grid>

  設計期的效果圖如下:   

  5、圖片按需加載的原理

  圖片路徑一般有反斜杠開頭的相對路徑和程序集+資源路徑兩種寫法,例如:/images/1.png、/LoadImage;component/images/1.png。前一種以反斜杠開頭的相對路徑,代表的相對位置是應用程序運行的根目錄,即.xap壓縮包內,若在這其中尋找不到要引用的文件,則相對路徑的回退機制(fallback mechanism )自動在在.xap所在的遠程目錄中查找,本例即為Web網站的ClientBin目錄中尋找加以查找引用,如果兩個位置都沒有,才會發生錯誤;后一種程序集+資源路徑則代表的絕對位置是引用該圖片的XAML文件所在的目錄,本例即.xap壓縮包內的嵌入資源中,一般都在程序集的dll文件中,通過reflector反編譯可以發現圖片資源。

  此實例編譯發布后,LoadImage.Xap文件大小只有4k,如果將圖片以資源(Resource)的形式打入.XAP包中,則LoadImage.Xap的大小是636k。

  按需加載圖片實例源代碼:下載

  在下一節中,將用兩種實現方法對按需加載.Xap包進行實例講解。

0
0
 
標簽:Silverlight
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()