好文:Flex 10 大錯誤(slightly revised)
Top 10 Mistakes when building Flex Applications
幾點有趣的 highlight 一下
#4. Slowing the application down by using XML for data transfer over optimized protocols.
如果可能,儘量不要用 XML,速度慢,造成的問題也多,改用 BlazeDS 或至少 AMF 是最優的選擇,行有餘力,捧個場買個 Live Cycle Data Services 也是很不錯的,至少 v2.6 裏用 NIO 重新改寫過 concurrency 變的非常好,一台撐幾千個 users 不是問題。
#3. Slowing the application down with the use of too many containers.
#6. Over use of animations
#9. Slowing the DataGrid down with complex renderers.
上面三項還只是眾多常見錯誤中最常見的幾個…在一個完整的開發過程中,保証是歡樂一籮筐處處皆地雷啊…
#1. Using an RIA framework to build Web 1.0 applications (aka. New technology same old stuff).
這是最常見的錯誤之一,公司興沖沖的採用了 flex,把一批 web developers 送去學完 flex 後動手開始寫,結果最後得到的是 flex 版的 html application,版面配置、操作方式完全一樣,唯一的差別是開發時程慢三倍,總成本增加五倍(因為後來發現寫出來的東西實在不能用,只好打掉用舊方法重練一次,或請外面的人重寫) <– 應大長輩之建議,此段特別標為紅色,使其重要性++
解決之道:look, before you JUMP.
#5. Trying to hire Flex developers.
Experienced Flex developers are very hard to find right now. Flex is at the point in the adoption curve which Java was at in the late nineties. The demand for Flex developers is exceeding the supply. This makes finding experienced Flex developers difficult. This, however, creates a huge opportunity for Java developers to expand their skill sets and work with a fun emerging technology. Many companies looking for Flex developers have great success training Java or other web application developers for only a few weeks on Flex. Flex’s language and APIs are easily learnable by developers who are familiar with Web and GUI programming.
(白話文:如果你以為 2005 – 2007 那段期間 flex 好手難尋?那可就錯了,現在才是真正困難的時刻,原因是早幾年 flex/air adoption rate 還沒那麼高,所以只要努力,打著燈籠一定可以在世界某個角落找到真正的好手,但從 2007 年底開始,adoption rate 急速拉高,因此早已呈現需求遠遠高於供給的現象,而早期的好手們早就卡好位置在某個企業或大公司裏穩穩的服務,或是開啟了自已的顧問事業,晚來的企業主要嘛花大錢請顧問公司提供真正一流的服務,要嘛就只能去 freelance 市場碰碰運氣了,至於想公開 hire 已成熟的高手級 flex developer 進到公司裏服務 ? 或許買張彩票運氣會好一點…)
說到 hiring 與才人供給,真是感觸特別深,以下再廢言數千字,要跳頁者現在是按 page down 的好時機…
———————————————-
如同文中所說,我試過找 java developer 然後訓練他們成為 flex developer,但事後証明,或許當初直接做換心或換腦手術可能效果比較好,主要原因不在於編程功力、資質,而是在於 mindset,說的更明白一點,每個人慧根與背景不同,很難 one size fits all (meaning: a java guru doesn’t necessarily make a good flex developer, ’cause it’s not all about coding but waaaaaaaay beyond that).
在我的經驗,資深的工程師普遍有個共通的特質:他們的優點也不幸的成為他們的缺點。
因為是很優的工程師,所以處理邏輯、架構、演算法這些事情上特別傑出,做的又快又好,寫的程式碼簡潔且有效率,如果他們能一直留在 faceless class 的世界(例如 server-side programming)那世界就會依然美好,可惜的是 flex 有著非常豐富的 UI DOM,它不像簡單的 html/javascript 就算搞爛了,也只是爛一頁,當 flex app 擺爛時,就是非同小可的大災難,而在開發過程中,有太多陷井等著讓工程師跳下去,不幸的是,因為缺乏 UI programming 的經驗,因此很容易就中招落馬。
更悲情的是,很多企業或主管仍然抱著『正港台灣人沒在怕』的態度(台語發音更有味喔),認為反正工程師就是要給他/她/它(?)操到翻,丟下去上個課,特訓幾十個小時後回來就準備手牽手上工開發最 in 的 flex app 正式帶領企業邁向 RIA 的光明世界,基本上這種做法跟 『玩過 30小時 Flight Simulator 就宣稱自已會開飛機』是差不多的下場,不如直接把飛機炸了可能爽度還高一點 (有聽過爆破藝術嗎?) XD
簡單總結一下:
1、十年 server-side 編程經驗的 Java 老手,當他開始做 UI programming 時,程度其實跟小孩差不多,除非他那個前十年正好是在寫 SWT/SWING/Qt…
2、請後台工程師來寫 front-end client-side app,它造成的破壞等級跟殺傷力絕對是讓人大開眼界的,一個簡單的例子請看『不良 UI 又一例』這篇(我相信那就是某位可憐的 java 工程師被硬拉去順手寫幾頁 html…人家沒受過這種 UI 的訓練,寫出來的當然就是這種等級的東西,然後造成使用者不滿,算來算去這是誰的錯呢?
a. java工程師該死,
b. 逼 java 工程師去寫 UI 又不給適當訓練的主管該死,
c. 明知它爛還去用該網站的顧客該死
… 請作答 XD
3、okok, 我瞭解人性中一個永恆不滅的特質就是『懷疑』,什麼事情非要自已跌過一次才會相信,所以即使上面寫的落落長一篇,還是會有很多人認為:『騙肖,程式寫了幾十年哪會有無法搞定的技術,給它拼下去就對了』anyway, it’s a long and winding road ahead, we will see
延伸閱讀:台灣人勇於冒險,死不認錯,好騙難教 (把 台灣人 改成 地球人 就一體通用了)


13 Comments Add your own
1. ken&hellip | April 22nd, 2008 at 12:08 pm
第4點的少用XML = =?
Flex裡頭不是很多都吃XML嗎
上面是在講反話丫,還是真的透過XML來中繼資料
處理最後會抬去種丫
2. SBT&hellip | April 22nd, 2008 at 12:24 pm
這年頭懷才不遇好像也不一定「對自己」有用就是了 (謎)
3. Y.Boy&hellip | April 22nd, 2008 at 1:08 pm
少量XML是好事来的.
大量的XML会吃掉机子资源的.
你说对吗?
4. saicn&hellip | April 22nd, 2008 at 1:12 pm
其实,在server 到client 互传data的事情,尽可能避免xml,一般xml都是对应古老的server,不可能为了你的一个应用去实现amf的server。
5. saicn&hellip | April 22nd, 2008 at 1:13 pm
顺便。。。。。作为flex 中高阶人员。。。搭顺风车,求职。。。。。
6. sike&hellip | April 22nd, 2008 at 2:59 pm
虽然我会讲闽南话有几处还是只能猜出大致在讲什么…
第一个错误经常看到,有些东西用js+html+css的方式好多了。
7. jerome&hellip | April 22nd, 2008 at 7:37 pm
據小弟所了解Flex 內建也是可以透過 xmllistcollection 接 xml 資料。而本身 mxml 就是 xml dom 的 model 。所以盡量不要透過 xml 這個論點,我是覺得有點意外。
http://211.78.35.48/demo/twdeco/twdecoEC.html
這邊是我們公司用 flex 開發的 Demo 測試購物網站,請您點選線上購物的各大館別,都可以有資料可以顯示出來。
經過測試,八成的點閱機率,大部分商品的顯示應該都可以在 3 秒內顯示出來。後端就是以 Java 透過 JDBC 讀讀取資料,透過 Dom4j 輸出 XML 資料到 Flex 這邊經過轉換後,呈現出結果的。我們是採取資料庫直接分頁的機制。
所以,若真的追求效率,我想本身整體架構,Server 端建立合理的資料分頁機制,Client Flex 建立背景分批載入的機制,或許可能是一個可以參考的解決方式。
透過 AMF 如果沒有把基礎的分頁與分批載入的機制做好,就可以達到預期的效率嗎?我可能會持比較保守的態度來看這個議題。
8. admin&hellip | April 22nd, 2008 at 8:34 pm
關於 xml,主要的差異是在資料量大時,AMF 是 binary 外加高度壓縮,然後 native format 可以省掉一些 parsing time。
不過大前提是,如果是全新開始的東西,沒什麼理由後台不能用 blazeDS 之類的 AMF gateway 做起來,通常只有跟 legacy system 打交道時不得已才會走 xml 這條路,這是目前同業間普遍的共識。
9. jerome&hellip | April 22nd, 2008 at 11:04 pm
抱歉,由於之前我都是在鑽研 ajax 的技術,所以 Server 端採用 xml 作為資料傳輸的基礎,已經是相當熟析的機制。最近這一年來,才從 ajax 轉道 flex 這樣的技術平台。
flex 從無至有,一路摸索過來,在資料格式對於系統效率的影響,也累積了一些些經驗,在這邊稍做整理跟大家分享一下。
就個人用 flex 開發這個購物網的經驗來看,我覺得用什麼格式不是重點,重點是資料量的控制,還有分批載入的機制。
沒錯,xml 資料量大確實會嚴重影響效率,因為他要建立每個一節點標籤的描述。
所以,要採用 xml 作為整個系統的傳輸媒介,本身對 xml 資料格式的設計,掌握度就要相當的夠。另外在什麼時候要傳適當的 xml 格式的資料,也是非常重要的。
所以,我們網站剛開始,也是把所有的商品資料,分頁一次 60 筆往前端傳,大概都要傳 100 多KB。光是資料傳輸跟轉換就要花一定的時間,那時候測出來的速度,如果等極普通一點的電腦,從按下去到瀏覽畫面商品的呈現,大概要 12-18 秒附近。
後來為了提升效率變成,在商品瀏覽畫面,只有傳商品瀏覽畫面的資料,從 60 筆降成 30 筆,並將單品畫面的資料拿掉,將傳輸的資料從 100 多 KB,降成不到 5 KB。而單品畫面的資料,是點到某項單品再去後端讀取單品的資料,也加上 Cache 的機制,把點過的單品資料就留在 client 端了,不用每次都去 Server 端要單品 xml 資料。經過這樣的改善後,一般等級的電腦從 12-18秒,時間壓縮至 5-10 秒。但這樣我們還是覺得慢。
所以又把 Tomcat 分頁的機制,做成在資料庫的分頁機制,也就是在資料庫,就把每頁的筆數切好,再送給 tomcat,大量減少 tomcat 的負擔。
最後,再加上 flex 這邊,採用背景分批載入的機制,把 30 筆,拆成 10 批,一批批透過背景載入顯示出來。最後才能達到,不管查詢或瀏覽所有管別,幾乎都可以在 3 秒內,顯示出商品瀏覽畫面的資料。
所以,依照這樣的依附調整效率的經驗走過來,xml 本身應該不是影響整體系統效率的關鍵。
關鍵在於系統整體存取與在入資料的機制,那可能才是影響使用者觀感的臨界點。
畢竟使用者不會知道我們系統採用什麼資料格式,他在乎的是點下去後,幾秒內可以看到他想要的商品資訊。
而這些機制,其實也是個人從 ebay desktop 一路改版,觀察到的現象,僅提供出來請各位先進做參考。
10. Leeheng Ma&hellip | April 23rd, 2008 at 2:09 am
媽呀,前四點我們專題通通犯了,一點都不缺…
11. pawaca&hellip | April 24th, 2008 at 9:34 am
除了传输方面,像 Server 通过 POJO->XML 到 Client XML->AS Object 这样需要苦工来做的事情换成 AMF 就完全省掉了。
12. Foster&hellip | April 24th, 2008 at 11:04 am
有錢就有有錢的做法,沒錢也有沒錢的做法~
不過blazeDS已經是免費,真的想不透有什麼理由不用
使用者想的是管你用什麼技術,我用起來好用就好了。
但老闆想的是管你用什麼技術,只要能快速、免錢解決需求才是重要的。
難道真的是:台灣人<>,死不認錯,好騙難教xd…
13. Foster&hellip | April 24th, 2008 at 11:05 am
<>內的文字是,<勇於冒險>
Trackback this post | Subscribe to the comments via RSS Feed