1. 從外部加載媒體(Media)
Heider提到了一個常用的Flex最佳實踐——限制嵌入到應(yīng)用/SWF文件中的媒體的數(shù)量,如圖像、影片及mp3等資源都可以從外部的SWF文件加載。
Flex框架可以直接將圖片、mp3及字體等資源編譯到SWF中。當(dāng)你想讓最終用戶獲得全部資源時,這種方式確實能派上用場,但是這會導(dǎo)致你的應(yīng)用長時間停留在“Loading”階段。
2. 在嵌入式字體中限制字符集
Heider建議在嵌入式字體中限制字符集以降低SWF文件的總下載時間:
當(dāng)你在Flex中嵌入一種字體時,你就會獲得該字體的全部字符的支持。盡管這可能是你想要的,但你確信你需要全部字符么?例如,在一個只面向英文的應(yīng)用中,你確信你真的想花時間下載中文字符數(shù)據(jù)么?
3. 緩存框架
Heider回顧了Flex 3 support for runtime-shared-libraries (RSL)這篇文章:
從Flex 3開始,你可以將Adobe簽名的框架——RSLs緩存到Flash Player的cache中。這有兩個好處。首先,緩存在Flash Player cache中的簽名的框架RSLs可由所有配置好的Flex應(yīng)用共享。換句話說,如果某人的應(yīng)用已經(jīng)下載了500k的簽名的框架RSL,并且該RSL仍舊在Flash Player cache中,那么你的應(yīng)用就可以使用緩存下來的RSL。其次,即使某人清空了其瀏覽器緩存,對Flash Player cache也沒有任何影響。
4. 考慮模塊化 Heider談到了將Flex應(yīng)用劃分成模塊的好處:
減少字體加載時間的另一種方式就是將你的Flex應(yīng)用劃分成模塊。使用模塊的一個好處在于當(dāng)加載和卸載模塊時你能完全操控它。 …
之所以要劃分成模塊的最后一個原因是他們更快,而且我能即時加載它們。換句話說,在啟動時唯一需要加載的模塊就是 Step1.swf模塊。因此,在使用模塊的情況下,最終用戶節(jié)省了啟動時間,但是當(dāng)他從一個模塊切換到另一個模塊時卻需要花更多時間,因為每個模塊都需要以JIT形式加載。在我的應(yīng)用中,只有當(dāng)用戶首次在steps 1-5之間切換時需要花更多時間。
5. 推遲實例化
Heider圍繞著Flex組件的“creationPolicy”屬性及何時實例化應(yīng)用的不同部分給出了很多建議。
如果你想減少從數(shù)據(jù)下載到用戶真正可以使用的總時間,當(dāng)務(wù)之急就是推遲實例化。這項技術(shù)背后的理念就是直到應(yīng)用真正使用的時候才在內(nèi)存中創(chuàng)建對象。
盡管推遲實例化技術(shù)會在應(yīng)用的整個使用過程中導(dǎo)致少許——通常不那么明顯——的延遲,但與長時間的啟動延遲相比,它還是可接受的。推遲實例化的另一個好處在于內(nèi)存使用的優(yōu)化。