SPA和JavaScript框架體會

fango發表於2012-08-05

今天的圖靈社群亦喜亦憂,兩篇文字交織在一起。憂的是暢所欲言變成火爆的隔空罵戰,社群是公共場所,如果你的斯文告訴你在大街上當眾吵架很不雅,那就讓那些誤解私下裡澄清去吧。喜的是,SPA技術通過今天的一篇翻譯,得到了眾人的關注。而這個SPA,正是我近兩年一直在鑽研的東西。所以,欣喜之餘,寫些體會和同行共享。

SPA,是Single Page Web Application的縮寫,大概可以翻譯為"單頁網程"。也就是說,使用者訪問了一個網址,瀏覽器顯示了一頁內容,而使用者無需去自行點選瀏覽器的"重新整理",就可以不斷地得到更新。

這個技術的核心之一是XHR,最早是微軟在IE中留給自己的Outlook Web Access的後門,被Mozilla發現後,克隆到自己的瀏覽器,最終在2005年隨著Gmail的普及,進入公眾視野,成為Ajax技術。

Ajax提供了瀏覽器頁面和網站伺服器通訊的第二通道,但這個通道只能為JavaScript程式設計使用。所以,如何讓JS這個不成熟的早產叛逆討厭鬼,規規矩矩地正式完成些像樣的工作,就成了當時web app程式設計師最頭痛的事。

jQuery赫赫有名,是因為它提供了一套簡便可靠的介面,讓JS寫的程式能遵守一些大家認可的規矩,從而才可以有精力完成較大的專案,而不必時刻擔心哪條JS指令,會不小心觸碰到不同瀏覽器中不太相容的敏感神經,引發一場不必要的誤會。

但jQuery只是個庫。也就是它只給程式設計師一些標準零件,而用哪個和怎樣用,仍要程式設計師不斷地實驗以積累經驗。這樣,從成熟的桌面應用程式、特別是Java和Cocoa程式得到的MVC的經驗,催產了大量的JavaScript MVC框架。

我接觸的最早的一個,是蘋果的Dashcode。雖然它並不是用來寫web app的,而只是給Mac OS X的Dashboard寫下些Widget。但因為它使用JavaScript而不是Objective-C,當我猶豫要不要對OC太認真的時候,我認真地研究了一下Dashcode的結構,驚訝地發現,JavaScript可以這樣寫,而且可以完整地再現桌面程式。要知道2008年時我還和絕大部分程式設計師一樣小瞧JavaScript,認為它不堪大任,就是在網際網路小打小鬧,幫著那些大佬跑馬圈地而已。

Dashcode內部是SproutCore,也就是現在的Ember。它因為有些龐大,下載較慢,不太適合web app。而Backbone則比較直截了當,所以廣泛用在了第一批的MVC結構的Web App中。那時,SPA這個詞還沒有出現在大家視野,市面上炒得最熱的,仍舊是Ajax。

隨著Backbone的成功,更成功的就是同一個天才作者所發明的CoffeeScript語言。而隨著我對JavaScript的恐懼日益嚴重,CoffeeScript就成了當時一個小專案的救命稻草。還好,CS也好,Backbone也好,都隨著那個小專案的取消,淡出了我的視野。

現在的專案,讓我有時間比較AngularJS,SpineJS,以及——Dart!

簡單地講,AnguluarJS因為使用HTML作為模版,比較適合需要專門設計師的專案,而其良好的模組結構,以及完備的測試框架,也為大型工程提供了堅實基礎。作為谷歌核心產品的Double-Click廣告發布平臺的框架,至少證明了其成熟度和光明前途。如果現在需要投資一門MVC,AngularJS是最佳人選之一。

SpineJS的優勢是它與CoffeeScript以及Backbone的淵源。因為它很小巧,又有一本書詳細解釋其架構,所以,如果要徹底學習和掌握MVC的內部,可以從它入手。

至於Dart,我仍在持續關注中,希望它在2012年底穩定下來,2013年可能會大放光彩。

相關文章