有些人認(rèn)為“Javascript是Web的匯編語言”完全是精神病說的話。為此,我詢問了幾位Javascript權(quán)威,比如Brendan Eich(Javascript之父)、Douglas Crockford(JSON之父),還有Mike Shaver(Mozilla技術(shù)副總裁)。
昨天我跟Erik Meijer聊天,他說:
Javascript就是一個匯編語言。Javascript加上生成的HTML就像是.NET匯編一樣。瀏覽器可以執(zhí)行這些代碼,但沒人真的關(guān)心里面到底寫的是什么。
——Erik Meijer
怎么會說起這件事兒呢?當(dāng)時我正在試用Google+,就跟上大多數(shù)讓我印象深刻的網(wǎng)站一樣,我立即就查看它的源代碼。不看不要緊,一看嚇一跳:
咱就將就說吧,我看到了1300行代碼,密密麻麻的,大約90KB。上面圖片顯示的只是最前面的一小部分,基本上都是“瘦身后”的Javascript代碼。再往下看,頁面中間呢,全都是像下面這樣的span、div以及生成的類和id:
我勒個去,滿篇都是GUID(Globally Unique Identifier,全局唯一標(biāo)識符)。
話又說回來了,http://msn.com、http://www.bing.com、http://.www.facebook.com,全都這樣啊。就連http://www.twitter.com也都開始有點“瘦身”的跡象了。所有大點的網(wǎng)站好像都絲毫不在乎什么標(biāo)記之美。這是為什么呢?
這樣有效率啊,性能高啊。Google很多最出色的網(wǎng)站背后都依賴GWT呢。在這種情況下,要是這一類網(wǎng)站的里頭和外頭全都一樣漂亮,你反而會覺得不可思議了。
不能不說這可真有點諷刺的意味。曾幾何時,ASP.NET的開發(fā)人員對ViewState可是怨聲載道啊。“簡直太笨了”的意思就是“我看不懂它都干什么了。”ViewState曾經(jīng)(現(xiàn)在也)是一項讓W(xué)eb開發(fā)效率提高很多倍的技術(shù)。它跟Google Web Toolkit(GWT)不一樣,但GWT與WebForms的出發(fā)點也并非完全沒有相似之處。看看GWT網(wǎng)站自己怎么說:
Google Web Toolkit(GWT)是一個開發(fā)工具包,用于構(gòu)建和優(yōu)化基于瀏覽器的復(fù)雜應(yīng)用。GWT的目標(biāo)是提高高性能Web應(yīng)用開發(fā)的效率,而且無需開發(fā)人員熟悉瀏覽器的各種怪癖,以及XMLHttpRequest,還有Javascript。
這個出發(fā)點可真是值得贊美,不對?難道不可以這樣說(抱歉,開個玩笑而已):
“ASP.NET WebForms”是一個開發(fā)工具包,用于構(gòu)建和優(yōu)化基于瀏覽器的復(fù)雜應(yīng)用。它的目標(biāo)是提高高性能Web應(yīng)用開發(fā)的效率,而且無需開發(fā)人員熟悉瀏覽器的各種怪癖,以及XMLHttpRequest,還有Javascript。
本文的目的不是想夸獎WebForms,也不是給WebForms正名。WebForms對于某些應(yīng)用是不二之選,正如GWT對其他一些應(yīng)用那樣。我真正想說的是,使用服務(wù)器端的工具包,沒有辦法像使用jQuery寫出清晰的Javascript,或者使用Razor或HAML寫出清晰、清楚的標(biāo)記一樣,給Web開發(fā)帶來真正的快樂。歸根結(jié)底,其實就是你選擇的抽象級別的問題。
所謂的語義標(biāo)記在這種情況下仍然是被隱藏的,而諸如http://schema.org之類的站點也仍然非常重要,只不過可別指望你能在心儀的站點里看到縮進(jìn)得像俳句一樣整齊的源代碼。
大家知道,精簡和壓縮屬于正交優(yōu)化。而我要說的是,一點也不在乎標(biāo)記和腳本發(fā)送到客戶端之后是否美觀,確實太草率了。假如誰都不在乎發(fā)送到瀏覽器的標(biāo)記,只在乎結(jié)果,那誰的標(biāo)記和JS就那么不值錢啊,誰還愿意主動公開自己的源代碼呢?反正,網(wǎng)站不是運行得挺好嘛,誰還在乎其他的?
現(xiàn)在我要給親愛的讀者提個問題,你覺得自己為什么那么在乎點擊“查看網(wǎng)頁源代碼”之后的結(jié)果呢?難道HTML5和Javascript是Web的新匯編語言不成?
(更新)聲明一下:
當(dāng)然,這個比喻不一定準(zhǔn)確。Javascript代碼無論從外觀到行為,肯定不像ASM。但作為一個比喻,至少可以說明:
Javascript無所不在;
它速度快而且越來越快;
Javascript酷似低級的Web編程語言;
它可以通過手工編寫,也可以從另一種語言編譯而來。
作為開發(fā)人員或者設(shè)計人員,如果有工具提供了你需要的控制和你需要的結(jié)果,你最關(guān)心哪一個?我認(rèn)為Rails、ASP.NET,甚至GWT,都沒有100%做到這一點。它們都有自己的問題,但我認(rèn)為將來的Web不會再專注于清晰的標(biāo)記,而是奪目的用戶體驗和語言、工具的天下,開發(fā)人員會很享受,效率也會更高。
親愛的讀者,你愿意HTML和Javascript再多抽象一點嗎?還是希望它少抽象一點?
(再更新)為了讓大家明白,我得再說一遍。本文討論了兩個獨立的問題。一個當(dāng)然就是源代碼經(jīng)過了精簡和通常的混淆。但這只是第一個問題。真正的問題在于,Javascript已經(jīng)成了其他多種語言的目標(biāo)語言。GWT是一個用JAVA來寫Web應(yīng)用的框架,它產(chǎn)生的字節(jié)碼是“Javascript”。GWT為原來天然的語言(HTML+JS)選擇了一個設(shè)計好的高級語言,并將整個瀏覽器當(dāng)成了一個VM。好,問題來了:我們是在寫匯編呢,還是在寫某種更高級點的代碼?而且,我剛知道Google+是用Closure來寫的,但這不影響前面的問題。
(來源:為之漫筆 原文:hanselman.com)