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