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