記住這兩兄弟,他們可能是Web史上最大的錯(cuò)誤
上個(gè)世紀(jì)90年代,有兩個(gè)兄弟,他們看到互聯(lián)網(wǎng)風(fēng)起云涌,馬上就要爆發(fā),決定投身其中,干出一番事業(yè)。
他們倆仔細(xì)研究了當(dāng)時(shí)互聯(lián)網(wǎng)的入口,即瀏覽器,發(fā)現(xiàn)了一個(gè)重大的問(wèn)題:
瀏覽器能做的事情太有限,就是展示文字+圖片的網(wǎng)頁(yè),最多執(zhí)行一點(diǎn)兒可憐的JavaScript。
相比于功能強(qiáng)大、界面漂亮,有極強(qiáng)交互的桌面應(yīng)用程序,這實(shí)在是太簡(jiǎn)陋、太差勁了!
兩兄弟想到:能不能把桌面應(yīng)用程序“搬”到瀏覽器中呢?
以后大家只要打開(kāi)瀏覽器,就可以聽(tīng)音樂(lè)、看視頻、玩游戲、辦公、做圖像處理......桌面能做的一切,瀏覽器都可以干。
具體該怎么實(shí)現(xiàn)呢?
插件?。?/p>
給瀏覽器裝插件,然后從網(wǎng)絡(luò)上下載代碼來(lái)執(zhí)行。
1
不過(guò),兩兄弟走了不同的道路,老大綁定了微軟,改名為ActiveX。
老二去了Sun,和Java眉來(lái)眼去,改名為Applet。
他們的目的也確實(shí)達(dá)到了,不信你看看這些應(yīng)用,哪里像一個(gè)網(wǎng)頁(yè),完全就是桌面應(yīng)用(90年代)嘛。
如果這么發(fā)展下去,就沒(méi)有后來(lái)的Vue,ReactJS什么事情了。
前端工程師用的編程語(yǔ)言不會(huì)是JavaScript,而是C#/VB.NET/Java。
壞就壞在兩兄弟有著致命的缺陷。
兩兄弟當(dāng)中,老大ActiveX的能力最強(qiáng),能訪問(wèn)計(jì)算機(jī)的所有資源——這是程序員喜歡的能力,卻是用戶害怕的能力。
想想看,你打開(kāi)一個(gè)包含ActiveX控件的網(wǎng)站,按照IE的提示把ActiveX從網(wǎng)絡(luò)上下載到瀏覽器,結(jié)果這個(gè)ActiveX控件把你硬盤上的文件刪除了,嚇人不?
更有些流氓ActiveX控件,賴到你瀏覽器中,怎么趕都趕不走,如3721。
所以,如果是公司自己開(kāi)發(fā)的ActiveX控件,運(yùn)行在局域網(wǎng)中,這是個(gè)不錯(cuò)的選擇。
如果一旦進(jìn)入廣闊的、野蠻的互聯(lián)網(wǎng),ActiveX就太嚇人了。
老二Applet則聰明得多,他宣稱自己運(yùn)行在Java沙箱中,根本沒(méi)法訪問(wèn)本地計(jì)算機(jī)的資源。
但是Applet需要Java運(yùn)行環(huán)境(JRE),JRE又大又復(fù)雜,如果瀏覽器沒(méi)有JRE,需要網(wǎng)絡(luò)下載,非常緩慢。
Java的GUI界面也非常丑陋,嚇跑了無(wú)數(shù)人。
再加上ActiveX和Applet不是開(kāi)放標(biāo)準(zhǔn),沒(méi)法獲得其他大佬的支持,兩兄弟慢慢淡出了大家的視野,在瀏覽器中運(yùn)行復(fù)雜應(yīng)用的第一次努力失敗了。
Web頁(yè)面繼續(xù)平淡無(wú)奇,運(yùn)行在瀏覽器中的依然是HTML+CSS,和一點(diǎn)兒簡(jiǎn)單的JavaScript。
2
轉(zhuǎn)折點(diǎn)是Google的GMail, Google Maps,大家發(fā)現(xiàn):臥槽,用JavaScript也能做出交互這么良好的應(yīng)用啊,還用啥Java,用啥VB, 用啥C++??!
于是,JavaScript火了。
瀏覽器要執(zhí)行的JavaScript越來(lái)越多,負(fù)擔(dān)越來(lái)越重,響應(yīng)越來(lái)越慢。
Google又把兩兄弟的理想給撿了起來(lái):Web不僅僅是網(wǎng)頁(yè),而是應(yīng)用。
只不過(guò),此應(yīng)用再也不是封閉的ActiveX, Applet,而是開(kāi)放的JavaScript、HTML、CSS。
Google還為這種應(yīng)用專門打造了一個(gè)瀏覽器Chrome,用V8引擎把JavaScript編譯成類似Java的字節(jié)碼,高效率執(zhí)行。
JavaScript一路狂飆,jQuery、Angular、React、Vue等框架如雨后春筍冒出。
相應(yīng)地,Web能做的事情也越來(lái)越復(fù)雜,很多應(yīng)用都可以在瀏覽器中運(yùn)行了。
3
但是JavaScript畢竟是個(gè)動(dòng)態(tài)語(yǔ)言,無(wú)論如何優(yōu)化,面對(duì)性能要求很高的應(yīng)用時(shí),還是力不從心。
例如3D 游戲、CAD、軟件模擬/仿真、虛擬和增強(qiáng)現(xiàn)實(shí)、計(jì)算機(jī)視覺(jué)、圖像/視頻編輯以及許多其他需要本機(jī)性能的應(yīng)用,在Web中運(yùn)行是非常吃力的。
此外,下載、解析和編譯非常大的 JavaScript 應(yīng)用程序的成本可能令人望而卻步。
瀏覽器需要一種能力:
- 執(zhí)行一種特殊的代碼,要能達(dá)到接近本機(jī)的速度
- 一定得安全,可以在安全沙盒中運(yùn)行,還有有瀏覽器的同源策略和權(quán)限策略。
- 和瀏覽器中的其他Web技術(shù)(如JavaScript)協(xié)作。
這就是瀏覽器的匯編語(yǔ)言:Web Assembly(WASM)。
不過(guò),這次不再用兩兄弟時(shí)代的插件了,而是在瀏覽器中內(nèi)置了一個(gè)虛擬機(jī)(VM),既能執(zhí)行JavaScript,又能執(zhí)行WASM。
JavaScript負(fù)責(zé)簡(jiǎn)單的交互,WASM負(fù)責(zé)高性能的部分。兩者密切配合,完美。
并且,各種編程語(yǔ)言都可以寫代碼,編譯成WASM:
以后你想用某個(gè)應(yīng)用,只需要瀏覽器中輸入網(wǎng)址,立刻開(kāi)始使用,不用安裝。
和別人分享也非常的方便,發(fā)個(gè)link就行了。
4
不知道ActiveX和Applet兩兄弟看到此處會(huì)何感想,他們最早提出了在Web中運(yùn)行桌面應(yīng)用,絕對(duì)是先驅(qū),就是過(guò)于超前,成先烈了。
但是Web技術(shù)還是沿著他們倆的愿景走了下去,瀏覽器的能力越來(lái)越強(qiáng),也許真的有一天,所有的應(yīng)用都被搬到了瀏覽器中。
那將是一場(chǎng)偉大的變革!