Javascript實現HTML5重要語言
很長時間以來,JavaScript在我眼裡都是程式語言中的二等公民。早先,它經常是很多安全問題的發源地,就像是膠水一樣,它能把HTML應用與樣式 粘到一塊,可沒有人拿它來正正規規地編寫程式;這樣的情形太普遍了。而Java、Ruby、Python,這些才是真正能用來編寫程式的語言。
過去幾年間,我對JavaScript的態度有了徹底的改變。JavaScript已經“長大成人”了。我敢保證很多JavaScript開發人員都不會 認同我前面的說法,他們會說JavaScript一直都是一個十分強大、成熟,深得人心的語言。或許他們說得沒錯,事實上只要是一門完整的程式語言,就能 拿來編寫程式,也包括BASIC這種濫東西。而一門語言真正有用,必須一方面自身具備很強的表達能力,另一方面還要有眾多的庫和開發工具。顯 然,JavaScript的表達能力早就沒有問題了,即便是建立物件的方式有點不好讓人接受,其實問題也不大。直到最近,一些極其重要的扭轉局面的技術出 現了:jQuery、JSON、Node.js和HTML5。或許JavaScript以前就是一門完善的語言了,但卻是這些重要的相關技術(以及其他一 些沒有在這裡提及的),讓JavaScript成為了每一個開發人員都知道的語言。如果明年你要學一門新語言的話,那一定就是JavaScript。
潛力無限的Node.js
說Node.js潛力無限的意思,就是它有可能引發Web開發的革命。 Node.js是一個框架,用於構建高效能Web應用——即使是巨量的請求也能應對如流。雖然Node本身作為一個底層框架,能夠用於構建任何應用,但它 還是最適合構建Web伺服器。它的非同步事件驅動模式與傳統的請求-響應模式相比,無疑更適合Web應用。
有兩方面因素更讓人看好Node。首先,Google在提升JavaScript效能方面掀起了一場革命。這句話的意思並不是說你隨時隨地都可以用上最好 的JavaScript引擎(儘管這也是我們一個美好的期望)。但可以肯定的是,Google在其他競爭對手還沒有上心的情況下,真的把 JavaScript效能當成了一回事兒。如此一來,就把Mozilla、Apple、Microsoft、Opera,還有其他瀏覽器開發商逼到了效能 競賽的跑道上。結果導致我們現在使用的JavaScript引擎較之幾年前快了不知道有多少倍,完全有能力執行復雜的大型Web應用。
其次,Node有著龐大的開發人員基礎。不管大家在伺服器端使用的是什麼語言,但在客戶端卻鮮有不使用JavaScript的。有的人可能是“剪刀加漿 糊”式的東拼西湊,有的人則可能用JavaScript做出了高超的Ajax應用,而有的人甚至實現了全功能的應用程式,像Twitter或Gmail。 可不管怎麼說,JavaScript開發人員的數量無疑是非常龐大的。而Doug Crockford等作者更是極力宣傳所有人都應該把JavaScript當成一門嚴肅正經的程式語言來看待——儘管它還有不少缺點。
當時當下,編寫Node應用相對還是個“粗”活兒,畢竟它只是一個底層庫。想象一下單純使用JavaScript寫程式碼,對,就是這種感覺,Node當前 還是一個beta版的格局,與Rails或Django這樣成熟的Web開發框架還沒法比。這種狀況無疑會改變。一些輕量級的框架,比如Express,已經出現了;我堅信更多基於Node的全功能框架將繼續不斷湧現。
前面提到過一些幾乎完全在瀏覽器中執行的高階Web應用。那些都已經不算什麼新鮮事兒了,Gmail多大了?Google Maps貴庚了?不過,用JavaScript編寫在瀏覽器中執行的應用的客戶端無疑是越來越有吸引力了。HTML5則繼續推高了人們對這一趨勢的期許。
HTML5就是JavaScript
我不知道已經說過多少次了,HTML5實際上並沒有多少與HTML有關,它其實就是JavaScript。HTML本身有什麼變化?不過一些新標籤而已, 況且哪個新標籤都不難理解。HTML5的威力在於讓你能用JavaScript來建立這些標籤。假如沒有後臺程式碼通過Canvas來建立動畫、遊戲,或者 通過它來實現一些資料的視覺化,這個標籤也沒有大用處。從瀏覽器開始支援Canvas開始,我已經看到了Asteroids(行星遊戲)的上百個實現,那都是開發人員為熟悉這個新特性所做的練習。有的比較粗糙一些,而有的則極其精美。這些完全都要歸功於JavaScript。
由此可見,HTML5並不是以尖括號為特徵的標籤語言的一次大的改進,其實質是賦予了JavaScript更強大的能力。WebGL庫 (當前還羽翼未豐)支援在HTML5的畫布中繪製實時的3D圖形。HTML5的地理位置支援在瀏覽器中實現LBS(Location Based Service)應用——這都是手機的基本配置。而持久儲存以及離線功能則為開發能與桌面應用媲美,但卻在瀏覽器中執行的全功能應用奠定了基礎。目前,就 連增加多點觸控事件的實驗性的庫也已經出現了。凡此種種,無一不是實實在在的JavaScript特性。HTML5只是為這些高階功能的發揮提供了舞臺。
退一步講,不依賴於HTML5的瀏覽器端開發庫也取得了長足的進步。長久以來,JavaScript一直都是在HTML中實現動態效果的不二之選。可兩個問題遲遲得不到解決:一是瀏覽器相容性問題,二是直接操作DOM太麻煩。jQuery讓這兩個問題霎那間消失得無影無蹤,這個庫已經成為現代基於瀏覽器的客戶端開發的基本配置。不過,並非只有jQuery。Protovis、還有D3,都可以讓你直接在瀏覽器中建立複雜的互動性資料視覺化效果,有史以來第一次讓瀏覽器成為了展示資料的一個重要媒介。
JavaScript與資料庫,編譯器與語言
就連資料庫裡都開始廣泛使用JavaScript了!當前如火如荼的NoSQL運動的三隻領頭羊:CouchDB、MongoDB和Riak,都是“文件資料庫”。它們儲存的不是表,而是文件。這幾個資料庫所謂的“文件”,其實就是JSON文 檔,而不是Word或Excel。(Riak除了JSON文件,還支援XML和純文字。)JSON已經成為一種被廣泛採用的資料交換格式(所有現代的程式設計 語言幾乎全都有解析JSON的庫),不過請注意,JSON實際上不就是一種序列化JavaScript物件的格式嘛!因此,雖然你可以在任何語言中使用 JSON,但在JavaScript開發中使用它則是再自然不過的事了。況且,JSON 這個格式成為一種跨語言的標準,而不是Python、Ruby或Java等語言的序列化格式,這個事實本身足以說明JavaScript將在更加廣闊的舞 臺上大顯身手。還不僅僅如此,上述三個資料庫都內建了支援JavaScript查詢的能力。未來幾年,更多的人都將會驚訝地發現,JavaScript和 JSON還會內建到其他應用程式中!
JavaScript時代的大幕才剛剛拉開。在今年的JSConf上,一個核心主題就是“JavaScript到JavaScript的編譯器”,也被人們看成是未來的一個主要趨勢。Google在“編譯生成JavaScript程式碼”方面是首開先河者。據我所知,GWT(Google Web Toolkit)應 該是通過編譯(從Java程式碼)生成JavaScript程式碼的第一個框架。以前我對GWT並沒有太重視,只是覺得它是一個致力於拯救那些Java程式設計師 的框架,好讓他們不必因為(學習)編寫JavaScript而浪費時間。可是,GWT在編譯過程中對JavaScript做了那麼多的優化,簡直是太神 了。Closure就是一個“JavaScript到JavaScript的編譯器”,能夠實現同樣級別的優化。Traceur,這是幾個星期前才冒出來的一個框架,通過它能夠試驗JavaScript的新特性,換句話說,它可以把帶有實驗性語言特性的JavaScript程式碼編譯成可以在所有現代平臺中執行的JavaScript程式碼。
最後,我們也開始看到了當初Java大旗下JVM語言的蓬勃景象:很多語言都在致力於編譯成JavaScript!其中有一些語言比較有意思,像Coffeescript和Kaffeine, 它們在風格上酷似JavaScript,但更關注彌補JavaScript的一些不夠完善的地方。是不是覺得JavaScript的物件模型特有意思,可 怎麼看怎麼有點笨笨滴,有木有?是不是一想到基於原型建立一個實際的物件都需要反反覆覆地定義這定義那,就望而卻步了,有木有?Coffeescript 對此作了明顯的改進。除了完善物件模型,Coffeescript 還新增了類似列表解析(list comprehensions)的新特性,去掉了大部分花括號。就像在Python中一樣,要使用縮排來區分程式碼塊。
未來的Web伺服器、取之不盡的客戶端庫、HTML5、資料庫,乃至基於JavaScript的語言——我現在一睜眼看到的就是JavaScript!假 如你曾經對JavaScript敬而遠之,今年可是該學習它了。沒有任何理由,真的,再不學,恐怕你就沒機會跟上時代了!
相關文章
- 實現JavaScript語言直譯器(三)JavaScript
- [譯]用javascript實現一門程式語言-語言構想JavaScript
- 用JavaScript實現一門程式語言 2 (λanguage語言簡介)JavaScript
- JavaScript演化成為一種重要程式語言JavaScript
- [譯] 用javascript實現一門程式語言-前言JavaScript
- 用javascript實現一門程式語言-字元輸入流JavaScript字元
- 如何使用 JavaScript 實現一門程式語言(1) : 前言JavaScript
- 使用JavaScript實現“真·函數語言程式設計”JavaScript函數程式設計
- [譯]用javascript實現一門程式語言-詞法分析JavaScript詞法分析
- JavaScript 函數語言程式設計中的 curry 實現JavaScript函數程式設計
- JavaScript 函數語言程式設計中 compose 實現JavaScript函數程式設計
- 使用JavaScript實現“真·函數語言程式設計”-2JavaScript函數程式設計
- 程式語言實現模式模式
- [譯]用javascript實現一門程式語言-AST的介紹JavaScriptAST
- Go語言實現RPCGoRPC
- 掃雷--C語言實現C語言
- C語言實現DES加密C語言加密
- OAF多語言的實現
- go語言實現掃雷Go
- c語言實現階乘C語言
- 利用棧實現佇列(C語言實現)佇列C語言
- [譯] 用javascript實現一門程式語言-寫一個解析器JavaScript
- Html5實現的語音搜尋功能HTML
- C語言實現TCP通訊C語言TCP
- go語言依賴注入實現Go依賴注入
- .NET CORE 多語言實現方案
- go語言實現ssh打隧道Go
- Go語言interface底層實現Go
- GO語言 實現埠掃描Go
- 高精度加法(C語言實現)C語言
- Go語言實現TCP通訊GoTCP
- c語言實現this指標效果C語言指標
- C語言實現順序表C語言
- so easy 前端實現多語言前端
- C語言實現連結串列C語言
- 漢諾塔(hanoi) C語言實現C語言
- RTree原始碼——C語言實現原始碼C語言
- ASP實現多語言支援 (轉)