JavaScript其實出來好多年了,這大家都清楚,但是近幾年新出現的一些JavaScript架構的確給JavaScript帶來了新的活力。隨著基於JavaScript的RIA開發越來越頻繁、熱門,越來越多的程式員開始為如何編寫這些繁多而散亂的JavaScript代碼而抓狂,代碼越來越多、越來越複雜,一些調試工作似乎已經成為標準的體力活,也正是因為如此才有了我接下來要說到的幾款JavaScript開發架構。
最早也是最出名的要數prototype了,這款鼻祖級的JavaScript庫,如今已經配了新的搭檔,那就是Script.aculo.us,這是一款完全基於prototype的開發架構,提供了相當數量的上層應用組件和函數,你可以這麼理解,假如把prototype比作MSIL,那麼Script.aculo.us就是.NET語言。目前prototype的最新版本是1.6,Script.aculo.us的最新版本是1.8,詳細資料請見:http://script.aculo.us/
接下來介紹的是JQuery,這個也算是JavaScript開發架構的新星了,雖然出來也有些時日了。JQuery與prototype比起來要更成熟一些,並且支援更好地擴充性,目前有相當多的JavaScript開原始檔控制都是基於JQuery的,其強大的selector的功能堪稱一絕,對於html的元素選擇就像css selector一樣。詳細資料請見:http://jquery.com。另外jquery還把一些UI控制項整合為一套庫,叫做ui.jquery,大家可以去http://ui.jquery.com 看看demo(建議看的時候不要喝水、吃東西,會噴出來的)。
接下來要介紹dojo,這也是一套類似於prototype的庫,不過我沒有怎麼用過,功能方面似乎與prototype基本類同,還是屬於比較底層的庫。目前也有一些基於dojo的控制項和應用。想瞭解dojo的資訊,請看http://dojotoolkit.org/
另外的兩個比較有名的架構就是Yahoo UI和Google Web Toolkit了,這兩個相信大家都比較熟悉,特別是Google Web Toolkit更是解決了如何用java代碼來寫javascript的問題,即通過編譯器和解析程式產生javascript,這是一個很不錯的功能。這一點,.NET仍然做的不足,我們仍然要通過大量的RegisterScriptBlock來解決問題動態javascript產生問題,從開發體驗的角度講,這樣容易分散程式員的經曆,因為程式員不得不平凡地切換思考模式,一會兒是寫.NET代碼,一會兒是寫Javascript代碼。不過呢,有人已經注意到了這個問題,並且開發了Script#,就是專門用來解決.NET下的JavaScript開發體驗問題,個人用下來還是不錯的,大家可以去http://projects.nikhilk.net/Projects/ScriptSharp.aspx 瞭解Script#。
還有一款不得不介紹的JavaScript開發架構就是extjs,這兩天已經看到cnblogs上有人在介紹這個庫的一些開發心得了。這款開發架構並不像jquery和prototype那樣,嚴格意義上講jquery和prototype只能算開發庫,而extjs則是真正的開發架構,它不僅僅解決了底層的瀏覽器安全色問題、通用的一些開發功能,也為開發人員提供了大量的內建控制項陳列庫,例如,用於布局的BorderLayout、Viewport,用於產生表單的FormPanel等等,請注意,這些控制項都是內建的,而非基於extjs開發,這個差別直接導致了整個開發架構的完整性有很大程度的提高,對於開發人員來說,與其把很多來自第三方基於一套庫開發的控制項放到一個項目中來,倒不如直接用內建的控制項來得方便,而且整合度更高,代碼可靠性也高。extjs還有一點值得稱道,那就是它為其他javascript開發庫提供了相容適配器,主要為jquery,prototype+Script.aculo.us和Yahoo UI提供了適配器,這是其他開發庫所沒有涉及的,這直接說明extjs的開發人員們很有遠見,融百家之眾長,把其他庫好的地方直接引入為我所用。有關extjs的詳細資料你可以訪問http://extjs.com。
另外,微軟的ASP.NET AJAX以及Silverlight中也引入了相應的JavaScript庫,雖然以我個人的角度看,這些庫還無法與第三方開源庫相抗衡,但對於微軟自己的產品來說是足夠了,當然這是一個訊號,預示著在微軟未來的開發庫中,JavaScript將佔據相當比重,特別是當Silverlight後續版本發布的時候。這裡要澄清一點,在過去幾個月中,曾經看到過一些文章中說微軟的Silverlight與ASP.NET AJAX的定位有重合,所以有人認為ASP.NET AJAX是沒有意義的,是微軟的決策失誤,但從我個人的角度看,就目前的Silverlight 1.0(1.1目前沒有release,不納入討論範疇)而言,它與ASP.NET AJAX並不衝突,Silverlight是針對高端RIA應用的,而ASP.NET AJAX則更多地瞄準低端RIA,至於最後會不會把這兩個產品整合,我目前不敢斷言,但從技術發展的趨勢看,微軟在未來2-3年內很有可能會推出RIA Foundation(個人猜測,不代表微軟官方觀點)。從技術角度看,Silverlight選擇JavaScript作為指令碼引擎自然有它的道理,一方面是因為減少重複開發,沒有必要像Adobe的Flash那樣再做一個ActionScript,勞命傷財~~另一方面是因為它能很好地與現有的AJAX及低端JavaScript應用整合,這是一個很明智的選擇,如果你要把應用程式移植到Flash上,還是有相當的ActionScript要重寫(雖然Flash也支援JavaScript互動),但是如果移植到Silverlight上完全不需要這麼麻煩,Silverlight能與以前的程式形成互補,這就是差別。
大家如果覺得還有其他比較好的開發庫,請留言,我會更新這篇文章。如果你覺得這篇文章的觀點有問題,歡迎拍磚(買磚頭的費用自理)。