解讀Flex性能優(yōu)化基本原則
你對(duì)Flex性能優(yōu)化的概念是否了解,這里和大家分享一下,眾所周知,目前國(guó)內(nèi)的寬帶應(yīng)用并不是像很多發(fā)達(dá)國(guó)家發(fā)達(dá),個(gè)人應(yīng)用帶寬基本上都是2M以下的,怎么樣能夠使你的Flex應(yīng)用能夠流暢的運(yùn)行在客戶(hù)端的問(wèn)題,成為了制約每個(gè)Flex應(yīng)用開(kāi)發(fā)程序員的大難題。在這里,我收集整理了一下網(wǎng)絡(luò)上關(guān)于這方面經(jīng)驗(yàn),歡迎大家補(bǔ)充。
Flex性能優(yōu)化基本原則:
1.從外部加載媒體(Media)
Heider提到了一個(gè)常用的Flex最佳實(shí)踐——限制嵌入到應(yīng)用/SWF文件中的媒體的數(shù)量,如圖像、影片及mp3等資源都可以從外部的SWF文件加載。
Flex框架可以直接將圖片、mp3及字體等資源編譯到SWF中。當(dāng)你想讓最終用戶(hù)獲得全部資源時(shí),這種方式確實(shí)能派上用場(chǎng),但是這會(huì)導(dǎo)致你的應(yīng)用長(zhǎng)時(shí)間停留在“Loading”階段。
2.在嵌入式字體中限制字符集
Flex性能優(yōu)化的第二個(gè)原則就是在嵌入式字體中限制字符集,Heider建議在嵌入式字體中限制字符集以降低SWF文件的總下載時(shí)間:
當(dāng)你在Flex中嵌入一種字體時(shí),你就會(huì)獲得該字體的全部字符的支持。盡管這可能是你想要的,但你確信你需要全部字符么?例如,在一個(gè)只面向英文的應(yīng)用中,你確信你真的想花時(shí)間下載中文字符數(shù)據(jù)么?
3.緩存框架
Heider回顧了Flex3supportforruntime-shared-libraries(RSL)這篇文章:
從Flex3開(kāi)始,你可以將Adobe簽名的框架——RSLs緩存到FlashPlayer的cache中。這有兩個(gè)好處。首先,緩存在FlashPlayercache中的簽名的框架RSLs可由所有配置好的Flex應(yīng)用共享。換句話(huà)說(shuō),如果某人的應(yīng)用已經(jīng)下載了500k的簽名的框架RSL,并且該RSL仍舊在FlashPlayercache中,那么你的應(yīng)用就可以使用緩存下來(lái)的RSL。其次,即使某人清空了其瀏覽器緩存,對(duì)FlashPlayercache也沒(méi)有任何影響。
4.考慮模塊化
Flex性能優(yōu)化的第四個(gè)原則就是模塊化,Heider談到了將Flex應(yīng)用劃分成模塊的好處:減少字體加載時(shí)間的另一種方式就是將你的Flex應(yīng)用劃分成模塊。使用模塊的一個(gè)好處在于當(dāng)加載和卸載模塊時(shí)你能完全操控它。
之所以要?jiǎng)澐殖赡K的最后一個(gè)原因是他們更快,而且我能即時(shí)加載它們。換句話(huà)說(shuō),在啟動(dòng)時(shí)唯一需要加載的模塊就是Step1.swf模塊。因此,在使用模塊的情況下,最終用戶(hù)節(jié)省了啟動(dòng)時(shí)間,但是當(dāng)他從一個(gè)模塊切換到另一個(gè)模塊時(shí)卻需要花更多時(shí)間,因?yàn)槊總€(gè)模塊都需要以JIT形式加載。在我的應(yīng)用中,只有當(dāng)用戶(hù)首次在steps1-5之間切換時(shí)需要花更多時(shí)間。
5.推遲實(shí)例化
Heider圍繞著Flex組件的“creationPolicy”屬性及何時(shí)實(shí)例化應(yīng)用的不同部分給出了很多建議。
如果你想減少?gòu)臄?shù)據(jù)下載到用戶(hù)真正可以使用的總時(shí)間,當(dāng)務(wù)之急就是推遲實(shí)例化。這項(xiàng)技術(shù)背后的理念就是直到應(yīng)用真正使用的時(shí)候才在內(nèi)存中創(chuàng)建對(duì)象。
盡管推遲實(shí)例化技術(shù)會(huì)在應(yīng)用的整個(gè)使用過(guò)程中導(dǎo)致少許——通常不那么明顯——的延遲,但與長(zhǎng)時(shí)間的啟動(dòng)延遲相比,它還是可接受的。推遲實(shí)例化的另一個(gè)好處在于內(nèi)存使用的優(yōu)化。
以上Flex性能優(yōu)化原則來(lái)自JunHeider在O'Reilly的InsideRIA站點(diǎn)上發(fā)表了一篇精彩的文章,該文章就如何加快Flex應(yīng)用的啟動(dòng)速度提出了很多建議,以幫助用戶(hù)減少看見(jiàn)討厭的“Loading”對(duì)話(huà)框的出現(xiàn)時(shí)間。他深入探討了問(wèn)題的不同方面,并對(duì)每種技術(shù)的優(yōu)勢(shì)和劣勢(shì)進(jìn)行了評(píng)判。Heider還談到了一個(gè)“實(shí)驗(yàn)性”的條款——“使用流”,這是他在討論DirkEismann的帖子(BuildingmonolithicFlexSWFsthatstillstartupquickly.”)時(shí)談及的。Eismann提出一項(xiàng)技術(shù)以利用FlashPlayer中的多個(gè)frames以在部分應(yīng)用中達(dá)到流的目的。查看所有的帖子以更多地了解該技術(shù)及關(guān)于加快Flex啟動(dòng)速度的建議。
【編輯推薦】