全文共3989字,預計學習時長8分鐘前端
匹諾曹在等待生命的機會 圖片來源:Pixabay數據庫
假如在1999年預言,20年後JavaScript會成爲一種世界上最流行的語言,那不是在臆想就是要瘋了。編程
二十世紀初的JavaScript不只沒有專業語言的功能,設計者甚至沒有把它當成一個正經的編碼工具。畢竟,網絡應用研發者早已習慣使用一款成熟工具——基於applet嵌入式系統的Java。小程序
但在1995年,網頁瀏覽器公司Netscape高瞻遠矚,意識到他們須要爲全部人提供更爲簡單的選擇,然而此時處境艱難——與微軟的市場競爭激烈、即將結束與Sun Microsystems的特大戰略伙伴關係,並且時間至關緊迫。他們僱傭了Brendan Eich,在極度嚴格的時間線下建立一種新語言。他用10天完善了JavaScript的首個版本,及時加入了這個悅目的瀏覽器:瀏覽器
Eich真正想作的是建立一個像Scheme同樣的學術編程語言的瀏覽器託管版本,但Netscape的想法卻不一樣,即便功能不一樣,他們也想要一個相似於Java的語言。Java和JavaScript,名字如此類似,以至多年來都容易混淆。安全
我根據市場訂單,要把它作成一個低配版的Java,它不過就是這種愚蠢的低級語言,不是嗎?Java的輔助而已。服務器
Brendan Eich
滾動按鈕時代微信
最初五年,JavaScript只不過是爲那些不適合用Java編程的人開發的一種輔助工具,這類人包括外行人、愛好者以及沒有時間作複雜工做的人,也包括網頁設計員——一種新的技術工人階層,負責使網頁用戶界面看起來流暢,且支持圖形,他們想要的東西比<blink>標籤更精緻,比旋轉球的GIF圖更現代化。網絡
在專業領域,建立用戶界面的glue,從而將設計好的網頁放在一塊兒是JavaScript的主要工做,每次須要交互式按鈕、彈出式菜單還有飛越圖像效果時都要用到JavaScript。併發
誰想要一個翻轉按鈕?全部人都想。
翻轉按鈕circa 2000
不久前,JavaScript還被大量應用於世界上一些最不重要的工做——每次鼠標通過時交換一個圖像。
「開發者將經過代碼使glowy按鈕自動化,而後將代碼與網頁一塊兒分發」,儘管這種想法彷佛很瘋狂,但每一個人都一次次這樣作。(現在,CSS會提供這種技術,使用樣式設置和動畫而不是預生成的圖像文件,這種實現方式更易於維護。)不多有人能想到,JavaScript會發展到這種地步。許多編碼人員更喜歡使用服務器端編程語言,這種語言能夠根據命令生成正確的JavaScript。JavaScript能夠推進應用程序中的業務邏輯這種想法,就和想象用Excel宏替換數據庫存儲程序同樣荒謬。
沙箱囚徒
現在人們對JavaScript的消極評價,一般是因爲語言自身的侷限性——OOP修補特性、弱型安全、笨重的DOM模型、==相對於===的混淆等等,但這些不是JavaScript早年做爲編程工具不被看好的緣由。畢竟有大量「醜陋的」編程語言,不過是因爲天時地利才變得重要起來。(候選者包括BASIC、COBOL、SQL和PHP。)就像網站佔領世界同樣,做爲惟一一種在全部瀏覽器中都具備本機支持的語言,JavaScript毫無疑問佔據了天時與地利。
JavaScript真正的侷限是沙箱——將代碼固定到位的嚴格控制的環境。沙箱會從桌面世界中切斷JavaScript,舉例來講,JavaScript代碼沒法直接訪問文件系統、顯示器或者任何硬件。更嚴重的是,它切斷了服務器上全部的JavaScript,好比存儲客戶列表和產品目錄的數據庫,還有運行業務邏輯的服務器端代碼。迫於壓力獨自生存,很天然地,留給JavaScript作的也只有頁面上的旋轉按鈕了。
使用XMLHttpRequest對象打開管道
奇怪的是,微軟確實保存了JavaScript。當時的微軟不像今天這樣,每一個操做系統的開源開發都要慶祝。相反,它就像一個關節裸露的反開源戰士,以「擁抱、延伸和熄滅」的理念來消費競爭對手。
事情是這樣的。就在這個世界瘋狂使用翻滾按鈕的時候,微軟的一個團隊正在研究一種使Outlook的網絡前端更具響應性的方法,他們一直在構建一個名爲Outlook Web Access的產品,就像這樣:
微軟團隊的目標相對溫和,他們想製做一個比在瀏覽器中運行更高效的電子郵件閱讀器。最重要的是,他們不想每隔幾秒鐘就刷新整個頁面,相反,他們所採用的技術可讓網頁在後臺悄悄地檢查新郵件。這個目標可能看起來沒有那麼震撼,但可別忘了,當時Gmail可還沒發明出來。事實上,整個谷歌公司只有幾年的歷史。
微軟團隊用一個名爲XMLHttpRequest的ActiveX組件建立了一個小管道,XMLHttpRequest的基本構思很簡單——它爲JavaScript代碼提供了一種發出網絡請求的方法。就像是瀏覽器能夠聯繫服務器併發出請求同樣(好比說,「嘿,請把那頁給我!」),JavaScript代碼能夠用XMLHttpRequest對象發出本身的請求(例如,「嘿,請再給我發些郵件」)。
忽然之間,網頁就能夠利用服務器的全部資源。須要從數據庫中提取數據怎麼辦?調用服務器發出請求便可。須要服務器執行計算、安全測試、超級機密驗證檢查怎麼辦?一樣,調用服務器就好了。最重要的是,調用工做發生在後臺,頁面會保持不變。
XMLHttpRequest並不是沒有怪異之處。首先,它的名字很怪,大小寫不一致,在JavaScript這種區分大小寫的語言中會讓人頭痛。其次,該名稱表示,你的代碼將收發XML信息。而事實上,信息幾乎能夠是任何東西——普通文本、HTML塊或者序列化爲JSON的JavaScript對象。但也許最大的問題在於XMLHttpRequest是用ActiveX生成的,這意味着它只能在Windows系統上工做,並且只能是IE瀏覽器。
這些都沒能阻止它。短短几年內,其餘瀏覽器也提供了本身的XMLHttpRequest工具——代碼中的對象相同,但沒有任何ActiveX的問題。
儘管建立了XMLHttpRequest,但微軟並無很快在本身的網絡開發中利用它,他們不肯意在基於網絡的公共電子郵件系統Hotmail中使用它。相反,他們一直等到谷歌使用XMLHttpRequest震驚了網絡開發界,首先是2004年的Gmail,而後是2005年的谷歌地圖。這是對聖盃的真實一瞥:以桌面應用程序的響應性運行的基於網絡的程序。
通向現代化
XMLHttpRequest是改變JavaScript進程的關鍵因素,可是,以後還有幾個拐點。
多年來,JavaScript語言一直被凍結,問題就在於市場領先的IE瀏覽器在操做系統時間表上進行了升級——也就是說,用起來很是緩慢。開發人員被迫編寫代碼,檢查瀏覽器版本,並嘗試隨機應變。
2006年,開發人員以jQuery的形式找到了解決辦法。雖然jQuery在今天有點過期,可是在十年前,若是你想把時間花在構建功能而不是解決瀏覽器的兼容性問題上,那麼它是一個必不可少的工具。
2008年,谷歌發佈了全新的JavaScript引擎V8,儘管jQuery第一次爲開發人員提供了普遍的兼容性,但V8的性能着實使人吃驚。並且,因爲V8引擎是一個獨立的開源組件,所以其餘項目均可以使用它。好久之後,這爲Node.js和Electron等的創新打開了大門。
以後,在2008年,出現了HTML的第一份工做草案。它自己並不涉及JavaScript,但它與新一輪的JavaScript API結合在一塊兒。忽然之間,開發人員有了存儲本地數據、管理瀏覽器歷史記錄、使用音頻和運行後臺任務的工具,網絡功能和桌面功能之間的差距再一次縮小了。
現代的JavaScript
JavaScript的成功是其在瀏覽器中特權地位的必然結果嗎?仍是說只是僥倖,須要運氣和完美的時機?
有一件事是肯定的——JavaScript被迫開闢本身的道路。在其生命的大部分時間內,JavaScript都不是人們最喜歡的,其餘人支持Java小程序,而後是Flash,甚至Silverlight。JavaScript面對這些挑戰者,戰勝了它們。
也許最公平的評估是,JavaScript證實了一件每一個開發人員都知道的事情。也就是說,一項新技術最重要的因素是它的覆蓋範圍。若是你的技術有更高的覆蓋範圍,那它沒有必要在最開始的時候就是最好的。你所須要的已經足夠好了。
JavaScript的將來將沿着一條快速分支的道路前進。咱們如今能在服務器上運行JavaScript(多虧了Node.js)並驅動桌面應用程序(多虧了Node.js和Electron)。咱們有一種極其類似的語言,好比編譯成JavaScript的TypeScript,讓開發人員能夠在合乎道德的狀況下爲網絡頁面編寫代碼。而在將來,WebAssembly 可能會完全打破語言限制,讓開發人員能夠藉助JavaScript引擎來使用他們想要的任何高級語言。
賭在JavaScript上就對了。
Brendan Eich
留言 點贊 關注
咱們一塊兒分享AI學習與發展的乾貨
歡迎關注全平臺AI垂類自媒體 「讀芯術」
(添加小編微信:dxsxbb,加入讀者圈,一塊兒討論最新鮮的人工智能科技哦~)