因為手上的專案需要使用中文字體,所以決定使用字體用匯入的方式處理,來節省讀取資料量,不過因為用匯入的方式,會去讀取外部字體檔,結果就是全部的swf檔都自己去讀字體檔了,導致loading過重~Orz
讀取流程:
1.main.swf 讀取完成
2.main.swf讀取 Font.swf,並存到記憶體內
3.讀取 a.swf檔案
4.a.swf讀取 Font.swf,並存到全域字體內
5.讀取 b.swf檔案
6.讀取 c.swf檔案
總共讀取資料量:
1.main.swf 500k
2.Font.swf 6000k
3.a.swf 1000k
4.Font.swf 6000k
5.b.swf 1000k
6.c.swf 500k
共計: 15000k
上面讀取流程會變成Font.swf讀取2次,如果把step 2拿掉,會發生不知道字體檔的讀取進度的問題,這樣會造成無法在main檔內的讀取條中顯示讀取進度的問題
解決方式:
1.在main.swf先用loader載入字體檔(font.swf),然後再載入共享用的字體資源分享檔(shareFont.swf)
2.所有的swf的字體設定都設定為匯入字體檔並且把匯入的url設定為shareFont.swf
3.shareFont.swf只做字體定義的動作,實際上還是由main.swf讀取字體檔,所以可以知道讀取進度
/*---------------------------------------------------------------
程式碼
---------------------------------------------------------------*/
import flash.system.ApplicationDomain;
import flash.text.Font;
var appDomain:ApplicationDomain = ApplicationDomain.currentDomain;
if(appDomain.hasDefinition('ArialRegular')){
var fc:Class = appDomain.getDefinition("ArialRegular") as Class;
if(fc != null){
trace('set font:ArialRegular');
//字體定義
Font.registerFont(fc);
}
}
讀取流程:
1.main.swf 讀取完成
2.main.swf讀取 Font.swf,並存到記憶體內
3.main.swf讀取 shareFont.swf,存到記憶體內,這樣shareFont.swf才能去使用Font.swf的字體並做定義
4.main.swf讀取其他swf檔案,因為其他的swf檔案可以找到shareFont.swf的字體,所以就不會又去重新讀取
總共讀取資料量:
1.main.swf 500k
2.Font.swf 6000k
3.shareFont.swf 1k
4.a.swf 1000k
5.shareFont.swf 1k
5.b.swf 1000k
6.c.swf 500k
共計: 9002k
少讀了5998k~~!!!!
備註:中文字體檔是真的很大的,只帶5000中文字而已就有6M的實力了,所以不用想說要把字體檔瘦身~Orz
沒有留言:
張貼留言