ria link
goowy : flash+dhtml做的mail介面
teknision:融合 IM chat的flash 網站
flexstore:mm的示範作品,不過在 Flex 2裏面有附更新版的flexstore, 效果更讚,不久後會更新在macromedia lab上。
這幾個是學生、客戶等問起RIA時最常順手拿出來的範例,其它還有像 google video, flickr image organizer等也很常見。
goowy : flash+dhtml做的mail介面
teknision:融合 IM chat的flash 網站
flexstore:mm的示範作品,不過在 Flex 2裏面有附更新版的flexstore, 效果更讚,不久後會更新在macromedia lab上。
這幾個是學生、客戶等問起RIA時最常順手拿出來的範例,其它還有像 google video, flickr image organizer等也很常見。
AS3除了帶來全新的DOM外,另一個大革新就是 Event Model。
以往在AS1/2裏,處理事件的方式有百百種,但基本上就是:
或是
而使用V2 components時,處理方式又變成
這些不一致性往往讓新手倍感頭痛(好吧,其實老手才更是咬牙切齒...)不知標準在那。
從AS3開始,flash的世界將只有一種Event Model,也就是V2 元件用的那種,而為了慣徹這種設計理念,整個Actionscript Class的架構都做了大改變,我們可以從下面的class tree看出來。
Object
|
+--flash.events.EventDispatcher
|
+--flash.display.DisplayObject
|
+--flash.display.InteractiveObject
|
+--flash.display.DisplayObjectContainer
|
+--flash.display.Sprite
|
+--flash.display.MovieClip
在這個架構的最上層是Object(是的,這代表下次你不知該如何cast一個物件時,仍然有個萬靈丹可惡搞,但當然這樣做要付出許多代價),下一個就是 EventDispatcher,這代表者flash裏幾乎每個物件都俱備了 dispatchEvent()的能力,因此自然也都可以用 addEventListener()來偵聽事件。
這也是為何在 flash.events.* 裏面新增了快一百多種event type 與 event class,真可說是處處是event、何處不廣播啊~
既然放了這張圖,可以順便看一下這顆樹的前面幾層,前文中提到的 Display Object與 DisplayObjectContanier都在很前面的位置,因此它們的重要性就不言可喻,此外InteractiveObject也是個重要的東西,它負責一切 Mouse, Keyboard、IME等裝置的動作偵測與廣播,從它所在的位置就可看出這次mm真的是很用心在重新設計整個架構。
AS3其它幾個重大的改變快速整理如下:
*runtime type checking + JIT compiled bytecode:
AS2之前flash只有 compiler time check, 因此許多runtime做的 type casting如果發生錯誤是沒辦法被抓出來的,只能靠自已一次次的 debug並trace每個物件來瞭解程式執行時記憶體的狀態,但現在加入了 runtime type checking後事情就變的很不一樣。
每次在 eclipse裏debug 時,只要一出現 casting error,eclipse會立刻跳到那一段並說明那裏錯誤,我故意試了幾個轉手casting的dirty trick想騙過它結果沒一個成功。
至於JIT的好處主要是在 byte code 與 native code之間的轉換,前者有體積小、可攜性高與安全的優點,但是執行效率慢(非常慢,看看JVM 1.1時的表現即知,或拿 FP7 與 FP8.5比較看看也可以),後者最主要的優點就是「快」,快到像 C++一樣的神速,這次 FP8.5全面採用 JIT bytecode後,執行效率的進步已經快到讓人驚訝(一般常見的測速結果都有 10x - 15x左右的差距)。
*32k 魔咒退卻:
以往一個class最大只能有32k, 這讓許多人得不停的把原本好好的一支class給分裂出去,才能降到 32k以下,而AS3則一口氣把這個limit拉高到 8mb,yes, 這應該是一個你永遠也沒辦法達到的上限才對,如果你能達到,代表你該把 design pattern的書拿出來再好好k一遍 Facade 跟 delegate 這兩章....(呃 Abstract Factory 跟 Command其實也要看一下)
*binary socket:
這是一個非常有趣的功能,FP8.5可以直接透過socket與各種socket server連線,最常見的socket 應用就是 email, 例如可以用 flash 寫一個 native的 pop3/smtp mail client,或是夠熱血的話可以連 NNTP, IMAP, IRC, SSH等各種應用都寫起來,目前我正在試者寫一個 pop3 client,直接透過 port 110 跟 pop3 server交談並操作,雖然對 socket programming還不是很熟悉,但仍然覺得很有趣啊~
另外伴隨 binary socket而來的就是 byteArray,這個array可以儲存 binary的資料,一般是透過socket傳回來的資料,但有趣的是它提供了一個 zlib壓縮功能,只要用:
就可以使用FP內建的 zlib 將資料壓縮,然後透過 socket傳出去,更棒的是,還記得 Flash 8裏最引人注目的 Image API嗎?現在只要透過 ByteArray.readXXX()的一系列操作,就可以將Image Data讀入 ByteArray, 然後壓縮後傳回 server,這不正是許多人夢眛以求的圖片/video上傳功能嗎?(ticore你不用再試 lzw 跟 php壓縮了,開始用 byteArray + socket才是王道啊...)
*mx.collection.*:
這個 package裏提供了兩個重要的資料結構,一個是 ICollectionView,另一個是 IList,它們將是未來AS3裏最主流的兩種資料結構(當然 Array的重要性仍然是排第一的啦),而在這裏面最重要的實作就是 ArrayCollection,簡單來講,它就是 RecordSet的繼任人選,對使用 flash remoting的人來說,recordset的重要性與必要性應該不用再解釋吧?現在既然AS3已把 recordset完全拿掉而且也不會再支援,應該是開始學ArrayCollection的時後囉~
*AMF3:
AMF(Action Media Format)是flash remoting, flashcom, local connection三者共用的 binary format,主要用來傳遞native flash object 並提供高度壓縮與自動編/解碼的功能,之前AS2使用的現在統稱為 AMF0,而AMF3自然就是專給AS3使用。
它主要的改良是在運作模式與編碼方式上,變的更有效率而且更聰明,因此可以大幅減少redundant data,這代表者傳輸速度會更快,同時應用範圍也會更廣,而且種種跡象顯示mm似乎有開放這個規格的傾向(例如在手冊中就提到 binary socket 的用途之一是透過它傳遞AMF object)。
但由於 FP8.5還在alpha階段,因此 remoting adptor這段只能靠最原始的 NetConnection自已去手動製作,當初為了成功連回 AMFPHP,可是廢了好大一翻功夫把整個 NetService, Service class都翻完才搞定,這真是回味無窮的經驗吶 -_-"
*e4x:
好吧,這個實在已經是舊聞中的舊聞了,AS3正式支援 ECMAScript For XML,you can dot down the xml document, period.
不過目前E4X 真的還在alpha的階段,執行效率只能用慘不忍睹來形容,比自已寫的 XPath還要慢,所以現在還不用期待太深。
(待續)
又到了夜深人靜的週五夜晚,終於有時間好好寫點東西
所以現在大家應該都知道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帶來的好處。
(續)
jesse 寫了一個 codesharing的小程式,可以讓工程師快速的分享程式碼。
這是用flex寫的,據他說只花了三晚共六小時就ok,很不賴吧?
在flex 2.0出來後,大部份玩家都認同這應該是 html 問市之後近十年來最令人讚賞的革新,非常有可能完全改變未來 web app的樣貌。

alright, ladies and gentlemen, let me introduce you Lab Macromedia
美國西岸時間十月十七日凌晨十二時,RIA的新時代正式開始。
macromedia在三十八鐘前開放下一代 flex builder 2 與 flash player 8.5 下載,這是macromedia有史以來第一次在產品還在開發階段就展開的public alpha, 意思是所有人現在就可以開始試試未來的玩具。
這個 public alpha為何意義重大呢?
首先,這是 flash player 8.5第一次曝露在大眾面前,而這個版本是flash有史以來最大幅度的改版,簡單來說就是整個 Actionscript Virtual Machine (以後簡稱AVM)的核心都全部改寫。
至於改寫的目地,當然就是為了支援 Actionscript 3.0 ,AS3 也同樣經歷了前所未有的大改革,全部的class package都完全改掉,同時加入了更多現代語言嚴謹的特色,使得它不論是語法、使用方式與表現都更像Java語言了。
那為何說這是一個新時代的開始呢?
答案很簡單,AS3 + FP8.5,代表的是flash正式成為一個robust enough的VM,也可以說是至此 Flash Platform終於齊備了所有商業平台所需要的要件,例如開發工具、程式語言、執行速度與效能表現,從今天之後,業界終於可以將flash pla
從今天起,我將每天一篇(或時間許可,數篇)專文介紹Flex Builder 2, Flash Player 8.5 與 Actionscript 3.0的種種細節,看完之後你就會瞭解為何我會用如此篤定的標題來型容這件事。
當然在文章還沒發表前,你可以先去下載一份軟體
試試,體驗一下全新的震撼吧