今天發生這樣一件“奇怪”的事情:
因為某種原因,我將系統日期改早了一個月時間,之後我編譯過一次Flash程式(Flash程式中有很多的as2.0的類)。
後來我將系統時間改回正常時間,然後修改了我的類中的某些代碼,發布Flash程式時,怪事出現了,我修改的那些代碼,不起作用,任我如何修改,編譯,重啟Flash,都是執行著修改前的舊代碼。
然後我進行跟蹤調試,但發現新修改的代碼就是莫名的跳過不執行,這讓我甚至懷疑Flash編譯器是不是有問題。。。
在大概上千秒的時間內,這似乎要讓我抓狂了,我想應該是有什麼東西緩衝了,於是將電腦重啟,但結果還是一樣。
然後我又想:這還可能與更改系統時間有關,可是Flash產生了什麼與時間有關的東西呢?
。。。
再次沉默了若干時間後,我突然眼前一亮,記得控制功能表裡有一個"刪除 ASO 檔案",莫不是與這個有關係?
趕緊執行這個命令,再編譯,好了。
這個平時根本不用的功能表命令,沒想讓我今天給用上了。那倒底什麼是ASO檔案呢,看來有必要好好瞭解一下了,查協助,對ASO檔案說明如下:
(摘自Flash協助:類 > 編譯和匯出類 > 使用 ASO 檔案)
在編譯過程中,Flash 有時會在預設全域類路徑目錄下的 /aso 子目錄下建立副檔名為 .aso 的檔案。
(aso緩衝在如下目錄:C:\Documents and Settings\Yao\Local Settings\Application Data\Macromedia\Flash 8\zh_cn\Configuration\Classes\aso\)
.aso 副檔名代表 ActionScript object (ASO)。Flash 將為每個被隱式或顯式匯入並成功編譯的 ActionScript 2.0 檔案產生一個 ASO 檔案。該檔案包含從相關的 ActionScript (AS) 檔案中產生的位元組碼。因此,這些檔案包含類檔案的編譯形式(位元組碼)。
只有在出現以下情況時 Flash 才需要重建 ASO 檔案:
對應的 AS 檔案已被修改。
那些包含了由對應的 ActionScript 檔案匯入或使用的定義的 ActionScript 檔案已被修改。
對應的 ActionScript 檔案中包含的 ActionScript 檔案已被修改。
編譯器建立 ASO 檔案以便進行緩衝。您可能會注意到第一個編譯過程比後面的編譯過程要長。這是因為只有更改過的 AS 檔案才被重新編譯到 ASO 檔案中。對於未更改的 AS 檔案,編譯器直接從 ASO 檔案讀取已編譯過的位元組碼而不是重新編譯 AS 檔案。
ASO 檔案格式是僅為內部使用而開發的中間格式。它不是文檔檔案格式,而且不會重新進行分布。
如果您遇到 Flash 編譯已編輯過的檔案的早期版本的問題,請刪除 ASO 檔案然後重新編譯。
根據最後一句,顯然Flash編譯了早期的ASO檔案,也就是說,我的AS類是修改過的,而ASO檔案沒有得到更新。那麼,這裡的“早期版本”是如何維護的呢?是什麼原因導致ASO沒有更新呢?或者說,如何斷定是早期版本呢?
答案顯然是,這個早期版本,是靠這個ASO檔案的產生時間來判斷的,如果這個ASO時間早於目前時間,那麼就算你修改了AS類,仍然不會被重新編譯,而我修改過系統時間後編譯過一次,這樣系統時間改回來後,不管如何編譯,從時間上來說,這個ASO都是最新的版本,這就是為什麼會出現我文頭所描述的問題現象的原因了。
說起“早期版本”,真希望Flash能有真正的版本簽名功能,舉個例子,我發布了一個程式(swf),程式中動態載入了若干的其它子程式(swf),但這個程式或子程式在某段時間之後,有新版本發布了,這時候瀏覽器會緩衝有舊版本,而這時候使用者要看到新版本,必須手動清空緩衝的舊檔案,才能看到新的檔案。如果有版本簽名功能,Flash會自動檢測並重新載入新檔案,這該是多好的事情呢。