flex 2.0出來後…
又到了夜深人靜的週五夜晚,終於有時間好好寫點東西
所以現在大家應該都知道Flex 2.0 + Flash Player 8.5 已經出來了,但它們到底代表了什麼意義呢?
首先這次的 release包含了下面幾樣東西:
-Flash Player 8.5
-Actionscript 3.0
-Flex Builder 2.0 (based on Eclipse)
它們每一樣對 RIA開發者都可說是意義重大,下面我們就一項項來看。
*Flash Player 8.5
FP8.5的核心全部重新寫過,現在它內部同時包含了兩個 AVM,一個給 AS1/AS2的程式碼,而另一個則是AS3專用,由於AS3的語法架構已經完全大翻新,因此許多以往在AS1/2無法做的事,例如 compiler的最佳化或記憶體配置與GC等,現在都變的可能。
依照過去的經驗,VM的更新通常都是伴隨者程式語言的變動而來,或者可以這麼說,程式語言的變動很大一部份是為了VM的運作而生,而這次 FP8.5 + AS3就是最好的例子。
*Actionscript 3.0
AS3的出現對許多人都不是太震撼的消息,早在今年初Flash 8還在beta階段時,它就曾經短暫出現過,但當時因為太多功能來不及放進去,所以大約在六月時就決定完全抽出,留待今年十月再release。
而AS3到底變了什麼呢?實在太多了。
如果要用一句話來描述,那就是:全新的 DOM與Event Model。
全新的DOM(Document Object Model)是指以往以 MovieClip為基礎的文件架構已完全推翻,以前在flash裏開一份新文件時,最底層的 _root 就是一個大型的MovieClip,其後再加上去的 btn, mc等,都是存在於這個大mc裏面。
這樣做最大的好處,或應說是設計目地,就是Flash做為一個動畫軟體,俱有時間軸的 MC是最自然的作畫空間。
而AS3的DOM則明顯的走向比較宏觀的境界,它不再認定自已只是一個「動畫軟體」,而也有可能是一個Application的介面設計工具,在這種應用情境下,時間軸不一定是必需,因為做app時,需要的不再是橫向的延伸(例如透過多個關鍵影格來切換狀態),反而比較偏向縱向的發展,例如一個個 form的切換(而每個form裏面的縱深可能很深)。
因此AS3最大的改變就是不再以MovieClip 為一切的基礎,相反的,在整個 class tree裏,比較上層的反而是新出現的 Sprite, Shape, Loader等物件,MovieClip則被視為是特殊型態的Sprite(也就是有者timeline的 sprite)。
依循者這樣的DOM架構,AS3也順勢推出了 Display List的概念。DL在其它程式語言裏其實不是很新的東西,例如用 C#寫 windows form時就經常會用到 addControls(button)這樣的語法,將一個button control 加入目前作用的form裏面。
而flash裏的DL是這樣運作的;以往flash是以底層 _root做為最大的MovieClip,然後依序在它的 level空間上堆疊物件,而現在Sprite則成為當年的_root,是最底層的畫布,但不同的地方是它不再以惡名昭暲的 level/depths 做堆疊,而是採用 Sprite.addChild(mc)的方式,將後續的物件一個個的加入最底層的這張畫布。
在這樣的設計架構下,很明顯的畫面上物件就可以立分為二,一個是可顯示在畫面上的物件,另一個則是不但自已可顯示,還可容納其它物件的物件。其中前者就是 Display Object,而後者則是 Display Object Container。
如果以作用權力的大小來看,很明顯 Display Object Container 是比較大的,這個類型的物件有 Sprite, Loader, MovieClip, Stage等,它們的共同特色就是本身內部還可以再塞進其它物件,例如你可以將一個mc塞進 Sprite裏面,也可以將一個jpg圖檔塞進 Loader裏面,但你不能將一個文字串塞進 Jpg圖檔,或是將一張圖片塞進 shape裏。
因此,像圖檔,shape這種本身可以顯示在畫面上的物件,就是 Display Object,而它們可以塞入的 Sprite, Loader, MovieClip 這些物件則同時是 Display Object 也是 Display Object Container。
呼,這是很不一樣的文件架構吧?
當然,接下來會出現的問題就是 WHY ??
為何要變成這樣?原因有很多,gary grossman在max 2005裏的keynote有解釋許多,但最基本的一個原因就是效率與記憶體控制。
簡單來說,Display Object Container內部是用一個 linked List 來控管所有下屬的 display object,因此整份文就像 tree 一樣可以互相牽連,每個node各有所屬,透過這樣一個 list,AVM可以很效率的清除、新增或位移某個物件,而不用像以往一樣一層層的去尋找,因此在運作效率上自然就增快許多。另一方面,透過層層相連的linked list,也可以保証已用不到的物件不會遺留在記憶體裏,必定會在每次的 GC cycle中被清除掉,這樣一來 memory leak的問題也就解決大半。
這就是全新DOM帶來的好處。
(續)


Trackback this post | Subscribe to the comments via RSS Feed