一篇講述 JavaScript 歷史的文章,值得一讀。javascript
若是你在 1999 年預測 20 年後, Javascript 會成爲世界上最流行的語言之一。要麼是一種幻覺,要麼是瘋了。前端
在上世紀之初,Javascript 不只不能作一些專業語言作的事,它也不能設計一些很酷的工具。畢竟,須要建立 web 應用的開發者們已經擁有了他們更喜歡用的成熟的工具。好比說 Java 就有 applet 內嵌在系統之中。java
可是在 1995 年,web 瀏覽器的先驅公司——網景意識到他們須要給人們提供一種簡單的選擇。當時該公司處在與微軟市場大戰的不利位置中,處於在與太陽計算機系統公司結束合做關係的邊緣,以及時間帶來的壓力等。網景公司僱了 Brendan Eich 去在不可能的時間中創造了一種新的語言。他在 10 天后發佈的該語言的初版,以下圖所示的瀏覽器中包含了該語言:程序員
Eich 真正想要作的是構建一個像 Scheme 這樣的學術編程語言的瀏覽器託管版本。但網景公司有不一樣的願景。他們想要一種看起來像Java的語言,即便它的表現不一樣。相似的只有名稱--Java和JavaScript,這致使多年的混亂。web
「I was under marketing orders to make it look like Java but not make it too big for its britches. It’s just this sort of silly little brother language, right? The sidekick to Java.」 — Brendan Eich數據庫
「我在遵循市場的狀況下去讓它看起來像 Java 可是沒有把它作得很大。只是像某種兄弟語言,對吧?像是 Java 的副手。」編程
在其生命的前五年中,JavaScript 對於那些沒有接受 Java 編程的人來講是一個填補空白的工具。這些人包括業餘愛好者,自學成才的以及簡單快速瞭解一下的人。還包括網頁設計師一類的技術工做者,他們的工做是使網頁用戶界面看起來更加時尚和圖形化。 他們想要比 瀏覽器
在專業領域,這是JavaScript的主要工做 - UI膠水,將設計過的網頁組合在一塊兒。每當須要交互式按鈕,彈出菜單,飛越圖像效果時,都須要JavaScript。安全
不久以後,JavaScript 在至少是世界上最重要的工做中被大量使用,這就是:每次鼠標到來時,都會將一個圖像換成另外一個圖像。服務器
雖然認爲開發人員會使用代碼自動化發光按鈕,而後用他們的網頁分發代碼彷佛是瘋狂的,這就是每一個人都作的 - 一遍又一遍。(今天,CSS提供了這種褶邊,它以更加可維護的方式實現,使用樣式設置和動畫而不是預先生成的圖像文件。)不多有人指望JavaScript會更進一步。 許多程序員更樂意使用服務器端編程語言,這種語言能夠生成正確的JavaScript 命令。JavaScript能夠爲應用程序中的業務邏輯提供力量的想法與想象用Excel宏替換數據庫存儲過程同樣荒謬好笑。
當人們今天批評JavaScript時,一般是由於語言自己的限制 - 補丁般的OOP功能,弱類型安全問題,笨重的DOM模型,==與===的混淆等等。但這些並非JavaScript在早年看起來像是一個糟糕的編程工具的緣由。畢竟,有許多醜陋的編程語言經過在正確的時間出如今正確的位置而變得相當重要。(包括BASIC,COBOL,SQL和PHP。)JavaScript 是每一個網絡瀏覽器自己支持的惟一語言,就像網站正在接管世界同樣,確定是在正確的時間和正確的地方。 JavaScript 的真正限制是沙箱 - 嚴格控制環境,將代碼固定在某處。沙箱將 JavaScript 從桌面世界中刪除。例如,JavaScript 代碼沒法直接訪問文件系統,顯示器或任何硬件。更嚴重的是,它將 JavaScript 從Web服務器上的全部內容中刪除,例如存儲客戶列表和產品目錄的數據庫,以及運行業務邏輯的服務器端代碼。被迫生活在本身的侷限中,絕不奇怪 JavaScript 只是在頁面上沒有什麼可作, 除了只是旋轉按鈕。
奇怪的是,微軟保存了 JavaScript 的有用案例。並非今天的微軟,它是在每一個操做系統上慶祝開源開發的公司。相反,那個微軟是一個赤裸裸的,反開源的戰士,以 「擁抱,延伸和熄滅」 的理念消耗競爭對手。 這是它發生的緣由。 大約在翻轉按鈕的世界變得瘋狂的同時,微軟的一個團隊正在研究如何爲 Outlook 製做響應更快的 Web 前端。他們正在構建一個名爲Outlook Web Access 的產品,以下所示:
微軟團隊的目標相對保守。他們但願製做一個高效的電子郵件閱讀器而不是在瀏覽器中運行。最重要的是,他們不想每隔幾秒刷新整個頁面。相反,他們採用的技術可讓網頁在後檯安靜地檢查新郵件。這個目標可能看起來不是驚天動地,可是,請記住--Gmail還沒有發明。事實上,整個谷歌公司只有幾年的歷史。 Microsoft團隊用一個名爲XMLHttpRequest的 ActiveX 組件建立了一小部分通道。XMLHttpRequest 的基本思想很簡單 - 它爲JavaScript代碼提供了一種發出Web請求的方法。就像 Web 瀏覽器能夠聯繫 Web 服務器併發出請求(例如,「嘿,請給我那個頁面!」),JavaScript 代碼可使用 XMLHttpRequest 對象來發出本身的請求(例如,「嘿,請給我發一些郵件「)。 忽然之間,網頁能夠利用Web服務器的全部資源。須要數據庫中的一些數據?打電話給服務器並要求它。須要服務器執行計算,安全測試,超級機密驗證檢查嗎?也爲此調用服務器。最重要的是,當呼叫在後臺進行時,頁面保持不受干擾。 XMLHttpRequest並不是沒有一些奇怪之處。首先,它被奇怪地命名,具備不一致的大寫,致使像JavaScript這樣的區分大小寫的語言中的頭痛。其次,該名稱代表您的代碼將發送和接收XML消息。事實上,消息幾乎能夠是任何東西 - 普通文本,HTML塊或序列化爲JSON的JavaScript對象。但也許最大的問題是 XMLHttpRequest 是使用 ActiveX 構建的,這意味着它只能在Windows計算機上運行,並且只能在 Internet Explorer 中運行。 這些怪癖都沒有阻止它。在短短几年內,其餘瀏覽器提供了本身的 XMLHttpRequest 實現 - 代碼中的相同對象,但沒有任何 ActiveX 頭痛。 儘管建立了 XMLHttpRequest,但微軟在本身的Web開發中利用它的速度很慢。他們在基於Web的公共電子郵件系統 Hotmail 中猶豫不決。相反,他們一直等到谷歌使用XMLHttpRequest來震驚開發的世界,首先是2004年的Gmail,而後是2005年的谷歌地圖。這是如同見證了奇蹟同樣:基於網絡的程序與桌面的響應性同樣的應用。
XMLHttpRequest 是改變 JavaScript 過程的關鍵因素。然而,此後還有幾個關鍵拐點。
多年來,JavaScript 語言被在一個時間段上被凍結。問題在於,市場領先的 Web 瀏覽器 Internet Explorer 在操做系統時間尺度上進行了升級 - 也就是說,速度很是慢。開發人員被迫編寫檢查瀏覽器版本的代碼,並試圖在運行中進行調整。
2006年,開發人員以jQuery的形式得到了解決方案。 雖然jQuery今天有點過期了,可是10年前它是一個必不可少的工具,若是你想花時間構建功能而不是解決瀏覽器兼容性問題。
2008年,谷歌發佈了一款名爲 V8 的新 JavaScript 引擎。就像jQuery第一次爲開發人員提供普遍的兼容性同樣,V8給了他們極高的性能。並且因爲V8引擎是一個獨立的開源組件,其餘項目可使用它。好久之後,這將爲 Node.js 和 Electron 等創新打開大門。
2008年晚些時候,HTML5的第一份工做草案出現了。HTML5自己不是關於JavaScript,而是與新的 JavaScript API 趨勢配對。忽然之間,開發人員擁有了存儲本地數據,管理瀏覽器歷史記錄,使用音頻和運行後臺任務的工具。再一次,Web功能和桌面功能之間的差距縮小了。
JavaScript的成功是不是瀏覽器中特權地位的必然結果?仍是須要運氣和完美時機的僥倖? 有一件事是確定的 - JavaScript 被迫這樣作。在其生命的大部分時間裏,JavaScript都不是人們的最愛。人們支持 Java applet,而後是 Flash,甚至是Silverlight。JavaScript面對這些挑戰者,並將他們所有徵服了。
也許最公平的評估是JavaScript證實了心裏深處每一個開發人員都知道的事情。就是說,新技術最重要的因素是它的影響力。若是技術具備卓越的覆蓋範圍,則無需開始作到最好。你須要的只是足夠好。
JavaScript的將來延續了快速發展的道路。咱們如今在Web服務器上運行JavaScript(歸功於 Node.js)併爲桌面應用程序效力(感謝 Node.js 和 Electron)。咱們有一步一步的語言,如TypeScript,可編譯成JavaScript,爲開發人員提供了一種在不損害其道德的狀況下編寫網頁的方法。並且在將來,WebAssembly 可能會完全打破語言限制,讓開發人員能夠經過搭載JavaScript引擎來使用他們想要的任何更高級別的語言。
是時候認可了。JavaScript,其全部的侵入和變化,是偉大的做品之一。 Brendan Eich 將 JavaScript 放入 Netscape Navigator 中。咱們把整個世界塞進了瀏覽器。結果是就是現代網絡。