注:本文轉載自InfoQ – 張龍
Adobe想要強化Flash與Flex在企業,特別是在移動領域中的地位。但最近的一項調研表明jQuery已經超越了Flash,成為前17,000個網站首選的Web部署解決方案。
近日,來自Adobe Systems開發工具事業部的產品經理Andrew Shorten在Adobe的官方部落格上發表了一篇博文,談到了Flash與Flex的當前狀態,並就Adobe的旗艦平臺給出了自己的一些看法。Shorten承認雖然Flash曾是跨平臺Web開發的唯一解決方案,但現在HTML5的發展勢頭越來越好,也表現出了極強的吸引力:
過去有無數的例子表明Flex是富使用者體驗的唯一解決方案。但現在,很多應用已經開始使用HTML5相關的技術並通過瀏覽器交付。在Adobe,我們也向設計者與開發者提供工具來實現這些體驗——Edge與Muse就是佐證。
就HTML5以及相關的工具(Edge與Muse)來說,Shorten認為HTML5並不是“萬靈丹”,企業出於”效能、框架成熟度以及健壯的工具“等原因仍會選擇使用Flex。Shorten繼續談到了Flex與Flash的主要發展方向,即面向企業與移動,特別是後者。他承諾Flash與Flex會成為企業業務應用的執行時與開發環境:
我們將會繼續加大對Flex在企業級應用中的投資力度,確保開發者可以交付富於表現力、健壯的應用。由於我們會提供未來發布版本的更詳盡的資訊,因此大家將會看到我們的承諾來解決很多領域的問題,如Spark元件的實現、可訪問性、構建系統整合、效能分析工具以及下一代編譯器的整合,這些舉措會保證Flex成為企業級RIA應用的首選。
關於移動開發的未來,Shorten提到:
我們將會繼續關注執行時效能、原生擴充套件、新的元件、宣告式皮膚等,並新增更多的平臺以及改進工具工作流,這樣在下一個主版本釋出之際,我們期望大多數應用都可以使用Flex進行開發,而完全的原生應用的需求則會降到最低點。
Shorten對此並未透露太多,只是說在10月1日至4日於洛杉磯舉辦的Adobe MAX大會上對此將會有詳盡的介紹。
我不清楚Shorten為何會發表這樣一篇關於Flash與Flex路線圖的博文,不過這可能與前一天appendTo, LLC釋出的關於全球前17,000個站點的分析報告有關,這個報告的結果可以概括為:在全球的流行站點中,jQuery已經超越了Flash。appendTo是個提供基於HTML5與jQuery諮詢、培訓與開發的公司。根據報告所述,全世界流行站點中的48%已經在使用jQuery進行部署,47%則使用Flash。該分析基於HTTP Archive所提供的資料,後者則是一個蒐集Internet資料的組織。appendTo的CEO及聯合建立者Mike Hostetler說到:
這些資料表明了這兩年的一個發展趨勢。越來越多的網站開發者選擇了jQuery與JavaScript而非Flash,而這種轉換速度則有愈演愈烈之勢。
作為曾經的網站之王,Flash已經開始不斷失守,其地盤不斷被HTML5與JavaScript等Web技術所蠶食。這個勢頭還會繼續下去麼?眾多公司是會因為成熟度的原因繼續選擇Flex還是會等待HTML5工具成熟起來呢?HTML5是否會統治Web開發呢?只有時間能告訴我們答案,但現在我們可以根據已有的經驗猜測一二。
此文一經發布,即在InfoQ英文站引來了眾多讀者的回應,現摘錄幾篇評論以饗各位:
讀者Dean Schulze說到:
Adobe對Flex的處理方式非常差勁。他們到現在為止也沒有提供具備商業質量的Eclipse外掛來幫助開發者構建Flex應用。哦,他們對外掛收費,但這個外掛卻是Eclipse世界中最差勁的商業外掛了。
Adobe花了好多年才釋出新版本的Flex。
由於Adobe的質量一直以來都不咋樣,因此除非Adobe的文化發生了變化,否則就別指望Flex能有啥出息了。
現在HTML5標準尚未最終確定,但HTML5卻已經超越了Flex,從這個事實就能看出Adobe對Flex的管理方式有多差勁了。
讀者Clinton Begin說到:
Flex已經玩完了。主要原因是它幾乎沒能提供什麼東西,使用者體驗也變得越來越糟。如果說Flex對於開發者來說還不錯的話,那麼對於使用者來說就太差勁了。此外,Adobe把Flex 4搞砸了,Flex 3.5要更簡單,更整潔一些。主要原因在於他們之間的互操作實在是太可怕了,Spark並沒有完全取代Halo。噁心啊,噁心。我真後悔在兩個重要專案中使用了Flex。Flex完蛋了。
Flash的未來要更加光明,Adobe可以通過多種手段保持Flash的統治地位。即便人們討厭player外掛,但Adobe可以通過JavaScript對VM進行移植(有一些開發者可以證實這一概念),他們也可以在編譯器級別上解決這一問題,將AS3和FLA檔案編譯為原生的JavaScript(其他一些平臺已經做到了這一點)。即便他們依舊採用外掛方式,他們也依舊可以統治Web,因為微軟、Google和Mozilla與Adobe之間保持了良好的關係。
然而,Flash的使用場景將會發生變化。也許優秀的Flash開發者會承認很多站點都在濫用Flash(請看看那些汽車製造商的網站吧)。在現在這個年頭,網站和廣告條不應該再使用Flash了。或許過去這麼幹是必要的,但現在早已物是人非了。對了,還有視訊。只要瀏覽器能好好地播放,我才不在乎是Flash,還是H.264,或是Ogg呢。作為終端使用者,我不管那麼多。
到現在為止,Flash最擅長的領域還是遊戲和其他互動式媒體等領域。Flash Player、框架、庫、AS3語言和工具大大超出了HTML5所能提供的,他們之間有至少10年的差距。你試著在各種瀏覽器和裝置上使用HTML5來播放音訊,看看結果如何。
你可以通過比JavaScript更好的語言和一些基於向量的建立工具實現這種效果,然後將其編譯為JavaScript與HTML5 Canvas,但Adobe在這方面領先很多,至少有10年的優勢——更不必說了解這些工具的開發者與設計師的網路效應了。Adobe所需的就是全新的編譯器或是VM(抑或兩者兼而有之)。其他人則要從頭開始。
因此我的設想是:Flash將會越來越好,或許使用不同的執行時。Flex將會死掉。HTML5將會統治除了遊戲之外的其他領域。移動將會依賴於原生程式碼以謀求最佳的體驗(Java之於Android,Objective-C之於iOS)。
此外,像Unity之類的工具/框架是非常有趣的,但最終他們將會變成像Flash一樣的外掛或是像Java一樣的跨平臺語言(下面是Mono)。因此他們還需要不斷努力才行。
讀者Andreas Tasoulas說到:
能夠指出Flex與Flash之間的差別,這很好。我完全同意你關於Flex與Flash未來的觀點。然而,文章中將Flex與Flash的處境混為一談的做法是有誤導嫌疑的,做調研的公司說jQuery超越了Flash是有些偏頗的(用他們自己的話來說就是他們是關於jQuery的培訓、諮詢公司),這影響到了最後的結果。
讀者Alex TicToC說到:
Web上使用的jQuery比Flash/Flex多根本不是什麼事兒,要是事實不是這樣我反而覺得不正常呢。Flash/Flex不應該用於顯示基本資訊或是作為大多數簡單網站的技術選型,甚至是電商網站。那些飯店的網站使用了Flash,最後只不過是顯示選單,然後通過PDF下載,這正是對Flash的濫用。
HTML5/JS是個可怕的技術,它可以用於交付企業應用。目前,大多數網站都不是”企業應用“,這個結果不錯。語言、工具、瀏覽器差異性與怪癖、編寫程式/OOP的開發者之間的層次(Google可能沒有這個問題)都是前進路上的障礙。現在總有人通過一些手段來提供一些工具:我看到線上版的純JS PhotoShop,還不賴。但這並不能說明什麼。一群聰明的傢伙可以創造出很不錯的技術(我想到了PHP)。我還看到有人使用匯編編寫出了非常棒的遊戲,很有表現力,但這並不是說彙編就是遊戲開發的技術選型。
現在說Flex已死還為時尚早,但我自己也想過Flex的未來,幾乎每天都想。
如果你想要開發一個富客戶端、跨瀏覽器/OS的應用,那麼Flex依舊是正確的選擇,雖說要付出更多的努力(需要Flex專家)。
Flex有很多問題,有很多遺留下來的程式碼,堆砌的特性、糟糕的設計決策、甚至有時程式碼質量也很差(我就見過太多了)。但一言以蔽之,Flex是個框架,它以效能為代價提供了很多特性(你不能去掉大多數特性),除非你是個效能專家,並且洞察Flex的原理,在這種情況下才會保證效能。如果你在配置不錯的桌面機上執行Flex還好。毋庸置疑,Flex在移動裝置上的表現不盡如人意。
這幾年來,Adobe做過的最糟糕的決策就是重用現有的Flex程式碼基,然後對其進行一些調整就執行在移動裝置上了。笨重的皮膚架構、樣式系統對CPU的消耗、優化失效/驗證程式碼(意指空轉執行,因為SDK開發者有時會呼叫invalidate(),並不是所有新特性都會用上)在移動裝置上的表現並不好。另一方面,純Flash應用則在移動裝置上運轉良好!這只不過是膨脹的Flex/AIR SDK導致的效能問題。Flash Player變得越來越好,這都要歸功於如Thibault Imbert之類的富有激情的人們。AS3語言則有一些提升。另外,Flex SDK變得越來越臃腫,其架構也沒有什麼變化(我上一次聽說Flex 5將會對框架進行徹底的整理。在2011/2012之際,你可以期望Flex SDK將會演變為基於外掛的平臺,而不是像義大利麵條一樣,充滿了大量的單例、靜態、過程式程式碼,這些東西都是6年的老古董了)。
在檢視Flex SDK的程式碼時,我常常覺得這是一個基於社群的專案而不是一個真正成熟的面向企業的產品;有幾個Flex的領導/架構師是非常不錯的,但大多數都不咋地。對基本的OO原則的違背比比皆是,有時都達到了無法接受的程度(複雜的類繼承中,父類竟然完成了子類該做的具體事情)。即便是一些基本的概念,如私有方法的程式碼行數不要超過500行這種事情也會經常遇到。
千萬別讓我用Flash Builder。
雖然有這麼多問題,但實際上Adobe並沒有真正的對手,我想這種情況會使得Flex成為贏家。
讀者Russell Leggett說到:
我覺得”現在“這個詞兒是很適合的,這取決於開發者的受眾,但確實沒有太多的時間了。我曾使用Flex開發過一個大型的貸款發放系統,但4年前我們卻轉向了html/js,因為我們覺得采用html/js能夠更簡潔地實現我們的目標(當然了,還有其他一些原因)。我們之所以這麼做是因為我曾經寫過框架的重要程式碼。我們所實現的感覺並不好,但實際效果還不錯,這個經驗告訴我們可以通過html/css/js實現與Flex一樣的應用。
我們現在使用了宣告式UI和資料繫結,就像MXML一樣(甚至比它更好),可以通過JSON、REST和程式碼生成實現與Java後端的無縫整合。它擁有一個相當強大的構建系統,可以完成依賴分析,並能自動建立延遲載入程式碼模組,這樣就可以將成千上萬行JavaScript程式碼劃分到多個檔案中,並且根據需要進行載入。在開發過程中,我可以在頁面重新整理時快速重新編譯客戶端程式碼。
UI與html/css/js一樣靈活,並且現有的第三方元件可以輕鬆整合進來,同時能夠很輕鬆地編寫自定義元件來得到框架資料繫結的優勢。
雖然我所開發的框架沒法展示出來,但我看到社群中很多人已經開始採取類似的方式開發框架了。有些框架非常輕量級,如backbone.js,有些則稍微重量級一些,如Sproutcore。雖說工具、文件及解決方案並不一定適合於企業業務,但瀏覽器與語言卻沒問題。我們只需從背後的公司獲得一些反饋即可,如微軟,它正在大力推進HTML5。甚至連Adobe都開發出了HTML5工具。