從腳本到主流,JavaScript的扶正之路

說到最流行的編程語言,可能要數JavaScript,Java和Python了。但是向上追溯幾年、十年、甚至是20年,在2000年的時候你絕不會相信,如今JavaScript將成為世界上最受歡迎的語言之一。那時候的JavaScript不僅無法完成專業語言所能做到的各個功能,甚至也沒有被設計成一種嚴肅的編碼工具。本文我們一起來致JavaScript發展的那些歲月。

概述

1995年,網景通信公司Netscape意識到,需要給瀏覽器一個簡便可用的瀏覽器動態腳本程序以便於Microsoft的IE做市場競爭。於是在結束與Sun Microsystems戰略合作伙伴的之前,利用最後一段時間,讓Sun的Brendan Eich在不到10天時間內創造了一個新的語言,並將它嵌入了Netscape 2瀏覽器中。


從腳本到主流,JavaScript的扶正之路

並且當時為了蹭Java的熱度,他們將該語言叫做JavaScript。但是實際上和Java語言沒有半毛錢的關係。Java和JavaScript這兩個類似的名稱引起了很多人多年的困惑,至今還是個個問題。(JavaScript現在是甲骨文的商標名稱,隨意使用可能會有版權問題。)

第一章 伊始:滾動按鈕時代

在JavaScript誕生的頭五年中,它是不便使用Java (Applet)編程的人們的一個白板工具。其擁躉包括業餘愛好者,以及急於做簡單完成任務的人。還有Web設計師一群新生技術工種,其工作是使網頁用戶界面看起來更加時尚和圖形化。他們想要的東西比<blink>標籤更精緻,比GIF的旋轉的地球儀更現代。/<blink>

在專業領域,這是JavaScript的主要工作,創建UI膠水,將過度設計的網頁粘合在一起。當你需要一個交互式按鈕,一個彈出菜單,一個圖像跨過動態效果時,你會用到 JavaScript。

從腳本到主流,JavaScript的扶正之路

不久之後,JavaScript開始被大量使用於創建類似效果:每當鼠標經過時,就將一個圖像換成另一個。

儘管認為開發人員會使用代碼來自動執行發光按鈕,然後將其代碼分發到網頁上似乎有些瘋狂,但這是每個人都一遍又一遍地做的事情(今天,CSS提供了這種裝飾,它使用樣式設置和動畫而不是預先生成的圖像文件,以更易於維護的方式來做到了這一點。)。很少有人期望JavaScript會走得更遠。而且,許多編碼人員更樂於使用服務器端編程語言,讓它們按需提供正確的JavaScript腳本。 JavaScript可以為應用程序中的業務邏輯提供支持的想法就像用Excel宏替換數據庫存儲過程一樣荒唐。

第二章 限制:沙盒的囚徒

今天,當人們批評JavaScript時,通常是由於其語言本身的侷限性:補補修修的面向對象功能,弱類型安全,笨拙的DOM模型,==與===的混淆等等。但JavaScript並非天生就是如此。畢竟,有許多醜陋的編程語言,也都是因為在正確的時間出現正確的領域而變得重要。(比如BASIC,COBOL,SQL和PHP)JavaScript是當時所有Web瀏覽器中唯一支持的語言,伴隨著Web正佔領世界的同時,它肯定在正確的時間出現在了正確的位置。

JavaScript的真正限制是沙盒,嚴格控制的環境,可將代碼固定在適當的位置。沙箱將JavaScript與桌面世界隔離開來。例如,JavaScript代碼無法直接訪問文件系統,顯示器或任何硬件。更嚴重的是,它切斷了JavaScript與Web服務器上所有內容的聯繫,例如存儲用戶列表和產品目錄的數據庫以及運行業務邏輯的服務器端代碼。JavaScript被迫獨自戰鬥的一線,但是也是整日忙忙碌碌而無所事事,只能旋轉Web頁面上的按鈕。

第三章 反叛:Ajax和XMLHttpRequest

然而幸運的是微軟並沒有對JavaScript產生多大的敵意,也在IE中保留了它。並打算以"擁抱,擴展和撲滅"的理念消耗競爭對手。

當時Microsoft的一個團隊正在研究一種使Outlook的Web前端響應速度更快的方法。他們正在構建一個名為Outlook Web Access的產品,看起來像這樣:

從腳本到主流,JavaScript的扶正之路


微軟團隊的目標是相對適度的。他們想開發一個在瀏覽器中運行的高效電子郵件閱讀器。最重要的是,他們不想每隔幾秒鐘刷新一次整個頁面。取而代之的是,他們採用的是一種允許網頁在後臺靜默檢查新郵件的技術。這個目標現在看來似乎並沒有啥大不了,但請記住那個年代Gmail還沒有出現呢,谷歌也才剛剛出現,沒有啥名氣。

微軟團隊使用一種被稱為XMLHttpRequest的ActiveX組件創建了一些管道。 XMLHttpRequest的基本思想很簡單:它為JavaScript代碼提供了一種進行Web請求的方法。就像瀏覽器可以聯繫網絡服務器併發出請求(例如,"嘿,請給我一個頁面!")一樣,JavaScript代碼也可以使用XMLHttpRequest對象發出自己的請求(例如,"嘿,請再給我發送一些郵件")。

從腳本到主流,JavaScript的扶正之路

突然之間,潘多拉魔盒被打開了,Web頁面開始可以調用Web服務器的所有資源:

需要數據庫中的一些數據嗎?調用服務器並查詢。

服務器需要執行計算,安全測試,超級機密驗證檢查嗎?也請調用服務器。、最重要的是,在後臺進行調用時,頁面顯示不會受到影響。

但是XMLHttpRequest也有很多問題。首先,它的名稱很奇怪,大小寫不一致,導致區分大小寫的語言(例如JavaScript)很頭痛。

其次,就像它名字表明的一樣請求發送和接收使用XML消息。現實情況是,消息幾乎可以是任何東西,普通文本,HTML塊或序列化為JSON的JavaScript對象。但是最大的問題當屬的XMLHttpRequest的的支持技術。它是用ActiveX構建的,這樣它只支持在Windows計算機上運行,​​只能在Internet Explorer中運行。

這些怪癖都沒有阻止它。在短短的幾年內,其他瀏覽器都提供了自己的XMLHttpRequest實現-代碼中的相同對象,但沒有ActiveX麻煩。

儘管微軟創建了XMLHttpRequest,但是並沒有在自己的Web開發得到充分利用它。甚至在,他們後續的公共Web的電子郵件系統Hotmail中也沒有使用。

相反,是谷歌首先利用XMLHttpRequest技術開發出了讓世界震驚的Web產品。谷歌首先在2004年使用開發了公共Web郵箱Gmail;

從腳本到主流,JavaScript的扶正之路

接著,次年又開發出了Google Maps。

從腳本到主流,JavaScript的扶正之路

這兩個偉大的產品開始讓XMLHttpRequest和Ajax技術大放異彩而流行於世。

第五章 扶正:通往現代的道路

XMLHttpRequest是改變JavaScript進程的關鍵要素。但是,此後還有很多拐點。

多年以來,JavaScript語言一直處於凍結狀態。市場領先的IE瀏覽器要伴隨著操作系統升級而升級,版本迭代非常緩慢。開發人員被迫要編寫大量的腳本檢查不同IE瀏覽器版本來進行適配。

從腳本到主流,JavaScript的扶正之路

在2006年,開發人員通過使用jQuery框架,獲得了形式上的統一解決方案。儘管jQuery在今天已經過時了,但是10年前,如果把真正的時間用在構建功能而非解決瀏覽器兼容性的問題上時,這是必不可少的工具。


從腳本到主流,JavaScript的扶正之路

谷歌在2008年發佈了一個名為V8的新JavaScript引擎。

從腳本到主流,JavaScript的扶正之路

如果說jQuery的出現為Web開發人員提供了廣泛的兼容性,而V8則為他們提供了出色的性能。而且由於V8引擎是一個單獨的開源組件,因此其他項目也可以使用它。後來,因此,而衍生了諸如Node.js和Electron之類偉大項目。


從腳本到主流,JavaScript的扶正之路

2008年下半年,W3C推出第一個HTML5的工作草案。HTML5本身並不是關於JavaScript的,而是與一波新的JavaScript API配對使用的。突然之間,開發人員有了用於存儲本地數據,管理瀏覽器歷史記錄,使用音頻和運行後臺任務的工具。網絡功能和桌面功能之間的差距再次縮小。

從腳本到主流,JavaScript的扶正之路

第六章 涅槃:現代的JavaScript

JavaScript的成功是否是其在瀏覽器中享有特權的必然結果?還是需要運氣和完美時機?

我覺得很多是為了兼顧和均衡。根據經濟學定理,為了防止一家獨大,各大公司之間互相讓利權衡後的結果。

結果是JavaScript被迫贏得了成功。在JavaScript的一生中,從來沒有很多人喜歡。剛開始大家支持Java applet,接著是Flash,還有微軟版的Silverlight。JavaScript面對了這些挑戰者,並(被)擊敗了所有他們。

JavaScript的未來是一條迅速分支的道路。現在JavaScript有在Web服務端運行的(Node.js),也有桌面應用程序(Node.js和Electron)。也有了諸如TypeScript的更高級先進方言,它們可以編譯為JavaScript,從而為開發人員提供了一種在不違反規範的前提下舒適開發的方法。將來藉助WebAssembly可能還會完全擺脫語言限制,為開發人員提供一種通過JavaScript引擎來使用他們想要的任何高級語言的方法。

JavaScript儘管有很多不是之處,但是他確實天(各大經濟巨頭)選之子。Brendan Eich將JavaScript放入Netscape Navigator中,而我們正想法設法整個世界裝入瀏覽器。這就是現代的Web,以及將來物聯網。


分享到:


相關文章: