天天看點

AS3本地運作庫探索

 自從AS3推出來之後,研究它已有一段時間了.AS3在本地用戶端提供了兩個對象:LocalConnection和SharedObject本地共享對 象.利用這兩個對象可以彌補用戶端浏覽器Js的很多不足.而本地共享對象更具獨有的性質,對每一個獨立域的SWF來說預設都擁有100K的本地共享存儲空 間.雖然隻有100K但是可以做很多的事情了,例如可以用作跨域Cookie,或是使用者參數設定的儲存等.當看到這裡的時候,不知道有沒有人想到,可以将 這100K做成一個在本地加載的運作庫? 在這裡我們探索一下.

先解釋一下什麼叫本地運作庫, 如果學過C的人都知道,C有一些庫檔案,字尾名為.lib,這些庫檔案裡面存儲的是已編譯好的程式,包抱資料結構和功能函數,它是一個靜态的庫,當C編譯的時候加載這些庫裡面已編譯好的二進制資料結構或函數放到目标的程式中,這樣就可以實作代碼重用,加快編譯速度. 在C++時代,也有類似的庫,但更多使用的是字尾名為.dll的庫檔案,.dll的庫檔案跟.lib的有根本性的差別. .dll的庫檔案叫動态庫檔案, 它是指程式在執行的時候加載這個.dll檔案進記憶體再調用裡面的函數,執行個體它裡面的類. 現在我們讨論的就是在AS3中實作類似的.dll這種檔案的功能. 在使用者用戶端浏覽器中緩存一些可動态加載并運作的庫類. 當然,你也可以将Js字元串放在裡面,加載運作. 呵呵,聽起來是不是不可思議? 你可千萬不要下載下傳一個病毒放在這裡面哦,不然我想殺毒 軟體都清不了. 呵呵,說笑啦,FlashPlayer的安全沙箱不允許你緩存的這個庫跨域讀取或執行,是以不用擔心這個.

要實作本地運作庫的第一個條件成熟了,就是有地方緩存,有100K供我們使用,如果有的使用者設定達1M的空間,那麼,你可以緩存更多的東西,不過一般的使用者不會設定這麼高的. 第二個條件就是如何存取一個庫到這個本地共享對象中去, 我們可以采用将swf從伺服器端讀取出來,然後用二進制的形式寫進去, 還好AS3的URLRequest提供了一個讀取二進制資料的功能,而Loader也提供了一個将二進制轉化為SWF的功能. 這樣,本地運作庫實作起來就比較簡單了.

下面講一下我的思路:

本地運作庫的目的是,将一些常用的工具類,或是一些不變的資源檔案打包成一個SWF檔案,帶一個版本号,通過URLRequest加載成功後,緩存在本地,作為一個運作支援的庫,裡面的類,或是圖檔資源等,你要的時候就去這個庫取出來就可以了.示例代碼如下:

package {

import flash.display.Loader;

import flash.display.Sprite;

import flash.events.Event;

import flash.net.SharedObject;

import flash.utils.ByteArray;

import load.LoadEvent;

import load.LoadFileBase;

import load.LoadFileData;

public class LocalRunLib extends Sprite{

public const LOADFAILED:String= "load_local_Lib_failed" ;

public const LOADSUCCESS:String= "load_local_Lib_success"

private var ver:String;

public var Lib:*;

public

本文轉自:http://www.5uflash.com/flashjiaocheng/Flashyingyongkaifa/992.html

繼續閱讀