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