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