JavaScript 編年史:探索前端界巨變的幕后推手

JavaScript 簡史

今年,JavaScript 迎來了 30 歲生日。

image

在這三十年里,JavaScript 從一門僅用 10 天開發(fā)出來的“小眾腳本語言”,成長為全球最受歡迎的編程語言。讓我們通過歷史上的關鍵節(jié)點,回顧它的進化之路,展望它的未來方向。

1994 年 12 月

網(wǎng)景發(fā)布 Netscape Navigator 1.0

Netscape Navigator 1.0 堪稱網(wǎng)頁發(fā)展的里程碑https://www.naquan.com/。它迅速成為最受歡迎的瀏覽器——比 1993 年發(fā)布的 Mosaic 更快、更易用,擁有流暢的圖形界面(不同于早期的文本瀏覽器),還支持 HTML 2.0 等新興標準,最終為 JavaScript 的誕生埋下伏筆。

image

1995 年 5 月

Brendan Eich 創(chuàng)建 JavaScript 首個版本

當時的網(wǎng)頁主要由 HTML 編寫,網(wǎng)景希望為早期網(wǎng)頁增加交互能力。恰逢 Sun Microsystems 推出 Java,網(wǎng)景也獲得了 Java 在瀏覽器中的使用授權。但 Java 對網(wǎng)頁設計師而言過于復雜,于是網(wǎng)景讓 Brendan Eich 開發(fā)一門“看起來像 Java,但采用面向?qū)ο蠖穷惢O計”的腳本語言。短短 10 天,這門如今支撐互聯(lián)網(wǎng)大半江山的語言誕生了。出于營銷考慮,它被命名為“JavaScript”——當時 Java 正值熱潮,這個名字借勢提升了關注度。

1995 年 12 月

網(wǎng)景與 Sun 聯(lián)合宣布 JavaScript:面向企業(yè)網(wǎng)絡與互聯(lián)網(wǎng)的開放跨平臺面向?qū)ο竽_本語言

JavaScript 作為輕量易用的腳本語言被推出,用于為 HTML 添加交互能力。在此次宣布中,網(wǎng)景與 Sun 描繪了新網(wǎng)頁愿景:Java 對象傳輸?shù)娇蛻舳撕?,可通過 JavaScript 腳本修改。值得一提的是,當時有 28 家科技公司(從美國在線到東芝)表示支持。

1996 年 3 月

微軟在 IE 3 中推出 JScript 以競爭 Netscape Navigator

為避開“Java”的版權問題,微軟將其 JavaScript 實現(xiàn)命名為 JScript。與網(wǎng)景的 JavaScript 不同,JScript 可與 Windows 的 ActiveXObject 交互,例如開發(fā)者能通過 IE 連接 Excel 表格:

var ExcelSheet;

ExcelSheet = new ActiveXObject("Excel.Sheet");

// 通過Application對象讓Excel可見

ExcelSheet.Application.Visible = true;

// 在表格第一單元格插入文本

ExcelSheet.ActiveSheet.Cells(1,1).Value = "這是A列,第1行";

// 保存表格

ExcelSheet.SaveAs("C:TEST.XLS");

// 通過Application對象的Quit方法關閉Excel

ExcelSheet.Application.Quit();

// 釋放對象變量

ExcelSheet = "";

1996 年 3 月

Netscape Navigator 2.0 發(fā)布,內(nèi)置 JavaScript 1.0

這是 JavaScript 的正式亮相,隨 Netscape Navigator 2.0 進入數(shù)百萬用戶家中。JavaScript 1.0 帶來了另一項關鍵創(chuàng)新——文檔對象模型(DOM),它后來成為網(wǎng)頁的基礎模型。

image

1997 年 6 月

網(wǎng)景將 JavaScript 提交至 ECMA 國際

為避免 JavaScript 與微軟 JScript 導致瀏覽器生態(tài)分裂,網(wǎng)景將 JavaScript 提交給 ECMA 國際,旨在打造一種廠商中立的標準化語言。該標準規(guī)范名為 ECMA-262,語言被命名為“ECMAScript”(因商標問題未沿用 JavaScript),而 JavaScript 和 JScript 則成為其方言。此外,由網(wǎng)景、微軟、Sun Microsystems 等公司代表組成的技術委員會 TC39 成立,負責 ECMAScript 的演進管理。

1998 年 1 月

市場份額下滑之際,網(wǎng)景開源 Navigator,催生 Mozilla 項目

由于微軟將 IE 與 Windows 捆綁,Netscape Navigator 市場份額急劇下降。為挽救公司并與微軟競爭,網(wǎng)景大膽開源瀏覽器代碼“Mozilla”(內(nèi)部代號,由“Mosaic”和“killer”組合而成),讓社區(qū)參與開發(fā)更先進、更符合標準的瀏覽器。次日,網(wǎng)景的 Jamie Zawinksi 注冊了 mozilla.org。Mozilla 項目催生了多項影響深遠的技術和產(chǎn)品:Firefox、標簽頁瀏覽、瀏覽器擴展,以及編程語言 Rust。

image

1998 年 9 月

首個 ECMAScript 語言規(guī)范正式發(fā)布(ECMAScript 2)

盡管未添加新特性,但該版本確保規(guī)范簡潔、一致且標準化,為后續(xù)所有版本奠定了基礎。

image

1999 年 3 月

微軟發(fā)布 IE 5,采用了比以往更多的專有技術

更重要的是,微軟引入了XMLHttpRequest——這是首個通過 JavaScript 發(fā)送 HTTP 請求的實用方式:

// IE5中發(fā)送HTTP請求的方式

<script type="text/javascript">

? function makeRequest() {

? ? // 創(chuàng)建ActiveXObject(專為IE5/IE6設計)

? ? var xhr = new ActiveXObject("Microsoft.XMLHTTP");

? ? // 發(fā)起GET請求(異步=true)

? ? xhr.open("GET", "https://example.com/data.txt", true);

? ? // 定義響應就緒時的回調(diào)函數(shù)

? ? xhr.onreadystatechange = function() {

? ? ? if (xhr.readyState === 4 && xhr.status === 200) {

? ? ? ? alert("收到響應:" + xhr.responseText);

? ? ? }

? ? };

? ? // 發(fā)送請求

? ? xhr.send();

? }

</script>

<button onclick="makeRequest()">發(fā)送HTTP請求</button>

1999 年 4 月

JSDoc 問世

JSDoc 松散借鑒了 Java 的 Javadoc,為 JavaScript 引入了結構化文檔規(guī)范。它為語言注入了專業(yè)性,為 IDE 支持奠定基礎,還支持文檔生成(如今支撐deno doc及 jsr.io 上的模塊文檔生成)。

/**

* 將兩個數(shù)字相加并返回結果

* @param {number} value1 第一個數(shù)值

* @param {number} value2 第二個數(shù)值

*/

function addNumbers(value1, value2) {

? return value1 + value2;

}

1999 年 12 月

ECMAScript 3 發(fā)布,新增do-while、正則表達式、字符串新方法(concat、match、replace、slice、split)、異常處理等特性

ECMAScript 3 是 JavaScript 早期的重要里程碑,將其從“玩具腳本語言”轉(zhuǎn)變?yōu)閲烂C的編程工具。它成為未來十余年瀏覽器腳本的基準版本,被廣泛認為是定義網(wǎng)頁 JavaScript 的關鍵版本。

2001 年 4 月

首條 JSON 消息發(fā)送

消息格式大致如下:

<html><head><script>

? ? document.domain = 'fudco';

? ? parent.session.receive(

? ? ? ? { to: "session", do: "test",

? ? ? ? ? text: "Hello world" }

? ? )

</script></head></html>

2002 年 6 月

JSLint 問世,被譽為“所有 JavaScript 語法檢查工具的鼻祖”

由 Douglas Crockford 創(chuàng)建的 JSLint 是首個主流 JavaScript 靜態(tài)代碼分析工具。當時 JavaScript 雖被廣泛使用,但開發(fā)者對其理解不深,代碼編寫缺乏規(guī)范。JSLint 致力于提升代碼質(zhì)量,其強硬的規(guī)范主張也為 Crockford 的著作《JavaScript:好的部分》提供了靈感。

2002 年 9 月

Mozilla 發(fā)布 Phoenix 0.1,F(xiàn)irefox 的前身,旨在與 IE 競爭

因不滿 Mozilla 應用套件的臃腫緩慢,一小隊開發(fā)者打造了極簡瀏覽器 Phoenix(象征從網(wǎng)景和 Mozilla 套件的“灰燼”中重生)。當時 IE 占據(jù) 90%市場份額,創(chuàng)新停滯,而 Phoenix 帶來了速度、簡潔界面、標簽頁瀏覽和彈窗攔截等新體驗。這標志著以用戶為中心的開源瀏覽器重生,打破了微軟的瀏覽器壟斷,為 Firefox 奠定基礎。

image

2003 年 1 月

蘋果推出 Safari 與 WebKit

蘋果 CEO 史蒂夫·喬布斯宣布 Safari 為“Mac OS X 的極速瀏覽器”。最重要的是,它終結了蘋果對微軟的依賴——此前 Mac 用戶依賴 IE for Mac。此外,這為幾年后 iPhone 的 Mobile Safari 鋪平了道路。Safari 基于 WebKit,而 WebKit 源自 KHTML 瀏覽器引擎的內(nèi)部分支。

image

2004 年 4 月

Gmail beta 版發(fā)布,采用全新異步 JavaScript 協(xié)議“AJAX”

Gmail 的推出是網(wǎng)頁開發(fā)的轉(zhuǎn)折點。AJAX 讓 Gmail 實現(xiàn)了前所未有的響應式交互體驗,開啟了 Web 2.0 時代的網(wǎng)頁應用新篇章。

image

2005 年 2 月

Jesse James Garrett 在白皮書《Ajax:Web 應用新方法》中創(chuàng)造“AJAX”一詞

AJAX(異步 JavaScript 和 XML 的縮寫)是一套客戶端技術,能讓網(wǎng)頁應用在不刷新頁面的情況下異步與服務器交換數(shù)據(jù)。這催生了全新類別的網(wǎng)頁應用和框架,帶來豐富流暢的用戶體驗:

<script type="text/javascript">

? function createXHR() {

? ? if (window.XMLHttpRequest) {

? ? ? // 現(xiàn)代瀏覽器(Mozilla、Safari、IE7+)

? ? ? return new XMLHttpRequest();

? ? } else if (window.ActiveXObject) {

? ? ? // 舊版IE(IE5、IE6)

? ? ? try {

? ? ? ? return new ActiveXObject("Msxml2.XMLHTTP");

? ? ? } catch (e) {

? ? ? ? try {

? ? ? ? ? return new ActiveXObject("Microsoft.XMLHTTP");

? ? ? ? } catch (e) {

? ? ? ? ? alert("您的瀏覽器不支持AJAX。");

? ? ? ? ? return null;

? ? ? ? }

? ? ? }

? ? }

? ? return null;

? }

? function loadData() {

? ? var xhr = createXHR();

? ? if (!xhr) return;

? ? xhr.onreadystatechange = function() {

? ? ? if (xhr.readyState === 4) {

? ? ? ? if (xhr.status === 200) {

? ? ? ? ? document.getElementById("result").innerHTML = xhr.responseText;

? ? ? ? } else {

? ? ? ? ? alert("請求失敗:" + xhr.status);

? ? ? ? }

? ? ? }

? ? };

? ? xhr.open("GET", "/messages/latest", true); // 模擬Gmail風格的接口

? ? xhr.send(null);

? }

</script>

<button onclick="loadData()">加載最新消息</button>

<div id="result">等待響應...</div>

2005 年 3 月

Mozilla 公司推出 DevMo,后演變?yōu)?MDN

Mozilla 推出 DevMo(后更名為 Mozilla 開發(fā)者網(wǎng)絡 MDN),提供準確、中立、基于標準的文檔,成為學習網(wǎng)頁標準的核心平臺。當時瀏覽器兼容性是主要痛點,文檔分散、過時且不一致,MDN 迅速成為開發(fā)者首選資源,為開發(fā)者文檔樹立新標準。

image

2006 年 3 月

John Resig 向名為 jQuery 的項目提交首行代碼

jQuery 是簡化 HTML DOM 遍歷、事件處理、AJAX 等操作的 JavaScript 庫,旨在解決令人頭疼的跨瀏覽器兼容問題。它提供了文檔完善的簡潔 API,重新定義了開發(fā)者體驗,至今仍是頁面加載量最高的 JavaScript 庫:

<script src="https://code.jquery.com/jquery-1.0.0.min.js"></script>

<script type="text/javascript">

? function sendRequest() {

? ? $.ajax({

? ? ? ? url: "https://example.com/data",

? ? ? ? type: 'GET',

? ? ? ? success: function(res) {

? ? ? ? ? document.getElementById("result").innerHTML = res;

? ? ? ? },

? ? ? ? error: function(xhr, status, error) {

? ? ? ? ? alert("請求失敗:" + status);

? ? ? ? }

? ? });

? }

</script>

<button onclick="sendRequest()">獲取數(shù)據(jù)</button>

<div id="result">等待響應...</div>

2007 年 1 月

首款蘋果 iPhone 發(fā)布,其 Mobile Safari 不支持 Flash

不支持 Flash 的決定當時頗具爭議——那時 90%的交互式多媒體依賴 Flash。但史蒂夫·喬布斯反對 Flash,因其資源消耗高、易崩潰且具有專有性。開發(fā)者從中意識到,移動網(wǎng)頁內(nèi)容的未來不再依賴 Flash。

image

2008 年 2 月

Netscape Navigator 落幕,標志“第一次瀏覽器戰(zhàn)爭”結束

AOL 正式終止 Netscape Navigator,這款 90 年代曾占據(jù) 90%以上市場份額的瀏覽器退出舞臺。它被 IE 超越的部分原因是微軟將 IE 與 Windows 捆綁,這引發(fā)了針對微軟的里程碑式反壟斷訴訟,重塑了科技監(jiān)管格局。

image

2008 年 5 月

Douglas Crockford 出版《JavaScript:好的部分》

該書重新定義了 JavaScript 的形象——此前它因設計缺陷和混亂行為遭嘲諷,而本書挖掘了其卓越之處。

image

2008 年 9 月

谷歌發(fā)布 Chrome 瀏覽器(當時最快的網(wǎng)頁瀏覽器)及 V8 引擎

當時 IE、Firefox、Safari 等瀏覽器速度較慢,對 JavaScript 執(zhí)行效率關注不足。Chrome 以速度為核心設計,搭載全新 V8 JavaScript 引擎。V8 的創(chuàng)新在于:執(zhí)行前將 JavaScript 編譯為原生機器碼、實現(xiàn)即時編譯、通過垃圾回收更高效地管理內(nèi)存。谷歌隨后開源 V8,供開發(fā)者二次開發(fā),其中最著名的便是 Node.js 項目。

image

2009 年 1 月

CommonJS 規(guī)范誕生(最初名為 ServerJS),規(guī)范 JavaScript 代碼共享方式

此時 JavaScript 開始跳出瀏覽器,向服務器端拓展。大型項目涌現(xiàn),JavaScript 需要更好的方式管理大量源代碼,模塊化成為剛需。

2009 年 3 月

Ryan Dahl 啟動 Node.js 項目

Node.js 是跨平臺開源 JavaScript 運行時,讓 JavaScript 能在瀏覽器外執(zhí)行。它讓開發(fā)者能用 JavaScript 構建網(wǎng)頁服務器乃至全棧應用。如今,約 3.5%的已知服務器網(wǎng)站使用 Node.js,它仍是網(wǎng)頁開發(fā)的主流技術。

image

2009 年 4 月

甲骨文收購 Sun Microsystems,獲得 JavaScript 商標

甲骨文通過收購強化了企業(yè)技術市場地位,同時獲得 Java 所有權。作為交易一部分,甲骨文取得 JavaScript 商標,為該語言的未來埋下困惑伏筆。

image

2009 年 6 月

Express.js 首行代碼提交

Express.js 是輕量靈活的 Node.js Web 框架,以模塊化中間件架構和 RESTful API 構建能力著稱,是生態(tài)中使用最廣泛的框架之一。它啟發(fā)了 Koa、Nest、Fastify 等眾多框架。雖曾一度停滯更新,但如今已迭代至 5.x 版本,持續(xù)維護。

image

2009 年 12 月

ECMAScript 5 發(fā)布,新增strict mode、getter/setter、數(shù)組新方法、JSON 支持、string.trim()、對象字面量尾逗號等特性

這是語言 10 年來的首次重大更新,讓 JavaScript 更強大、安全且易維護。

2009 年 12 月

CoffeeScript 項目啟動

CoffeeScript 因簡潔語法(更少樣板代碼)、箭頭函數(shù)(早于 ES6)、解構賦值(早于 ES6)等特性迅速流行,提升了開發(fā)體驗。

image

2010 年 1 月

npm 1.0 發(fā)布

作為 Node 和 JavaScript 的包 registry,npm 徹底改變了 JavaScript 的共享方式。如今它是全球最大的開源 registry,擁有超 300 萬個包。

image

2010 年 5 月

JetBrains 發(fā)布 WebStorm 1.0,首款 JavaScript 專用 IDE

此前文本編輯器對 JavaScript 支持有限,而 WebStorm 是首個提供高級特性的專用 IDE:代碼分析、錯誤檢測、JS/HTML/CSS 代碼補全、JavaScript 專屬調(diào)試工具。

2010 年 10 月

AngularJS 與 Backbone.js 發(fā)布

隨著 JavaScript 不斷完善,開發(fā)者渴望更高效地構建復雜服務器和應用,兩款全棧框架應運而生并走紅:Angular 聲明式且 opinionated,Backbone 命令式且輕量。這也標志著現(xiàn)代單頁應用(SPA)和“框架更迭”時代的開端——此后大量 JavaScript 框架快速興起又淡出。

image

2011 年 6 月

微軟與 Joyent 將 Node.js 移植到 Windows

2011 年,Joyent 的 Ryan Dahl 與 Deno 聯(lián)合創(chuàng)始人/CTO Bert Belder 完成移植,突破 Unix 系統(tǒng)限制。此次工作催生了 libuv 庫,為 Linux、OSX、Windows 提供統(tǒng)一的異步網(wǎng)絡接口。這不僅加速了 Node.js 發(fā)展,還為微軟開源戰(zhàn)略鋪路,最終重塑其開發(fā)者生態(tài),為 TypeScript、VS Code、Azure 云集成等奠定基礎。

image

2012 年 3 月

Webpack 模塊打包工具問世

Webpack 讓開發(fā)者能將任何資源引入客戶端,最終成為 React、Angular、Vue 等框架的核心構建系統(tǒng),為 Rollup、Parcel、Vite、esbuild 等工具奠定基礎。

image

2012 年 10 月

微軟發(fā)布 TypeScript 0.8 公測版

2010 年,C#和 Turbo Pascal 之父 Anders Heljsberg 開始開發(fā) TypeScript——JavaScript 的靜態(tài)類型超集,旨在簡化大規(guī)模 JavaScript 的開發(fā)與維護。2012 年公開后,它為 JavaScript 生態(tài)帶來企業(yè)級開發(fā)能力,影響 ECMAScript 設計,改變大型應用的構建方式:

function add(x: number, y: number): number {

? return x + y;

}

2013 年 2 月

Mozilla 發(fā)布 asm.js

asm.js 是 JavaScript 的嚴格子集,旨在為網(wǎng)頁帶來接近原生的性能。此前 JavaScript 難以勝任 3D 游戲、視頻處理等 CPU 密集型應用,而開發(fā)者可將 C/C++代碼轉(zhuǎn)換為 asm.js,讓原生應用在瀏覽器運行。它為幾年后的 WebAssembly 鋪平了道路:

(function Module(stdlib, foreign, heap) {

? "use asm";

? function add(x, y) {

? ? x = x | 0;

? ? y = y | 0;

? ? return (x + y) | 0;

? }

? return { add: add };

})(this, {}, new ArrayBuffer(1024));

console.log(Module.add(10, 20)); // 輸出:30

2013 年 3 月

Atom Shell(后更名 Electron)首行代碼提交

Electron 降低了跨平臺桌面應用的開發(fā)門檻——基于 HTML、CSS、JavaScript 等網(wǎng)頁技術,結合 Node.js 和 Chromium,讓開發(fā)者能訪問文件系統(tǒng)、網(wǎng)絡和原生 OS API。它最初為 GitHub 的 Atom 編輯器開發(fā)(2014 年 4 月公開測試),早期知名用戶包括 Slack。Electron 驗證了網(wǎng)頁技術開發(fā)桌面應用的可行性,讓開發(fā)者將文本編輯器從工具重新定義為平臺,啟發(fā)了 VS Code 等現(xiàn)代可擴展網(wǎng)頁驅(qū)動工具。

image

2013 年 4 月

Valeri Karpov 提出“MEAN”棧概念

MEAN 棧代表全棧 JavaScript 框架,包含 MongoDB、Express.js、AngularJS 和 Node.js,深刻影響了現(xiàn)代 JavaScript 網(wǎng)頁開發(fā)。

image

2013 年 5 月

Facebook 發(fā)布 React

由 Meta(原 Facebook)工程師 Jordan Walke 創(chuàng)建的 React 是聲明式 UI 庫,2011 年首次用于 Facebook 新聞流,2013 年在 JSConf US 開源。其組件化開發(fā)模式鞏固了現(xiàn)代應用的聲明式 UI 范式。

image

2013 年 6 月

ESLint 啟動開發(fā)

知名 JavaScript 開發(fā)者、前雅虎 YUI 庫負責人 Nicholas C。 Zakas 開始開發(fā) ESLint——可插件化、可配置的代碼檢查工具,用于識別和修復 JavaScript 問題。ESLint 迅速成為開發(fā)者必備工具,彌補了現(xiàn)有 lint 工具的不足,樹立代碼質(zhì)量與一致性新標準。

image

2013 年 7 月

Gulp 發(fā)布

Eric Schoffstall 推出 Gulp.js,這是用于自動化網(wǎng)頁開發(fā)任務的流式構建系統(tǒng)。Gulp 通過簡潔的代碼驅(qū)動方式處理壓縮、編譯、 linting、測試等重復任務,迅速成為 Grunt(配置繁重)的有力替代者,影響了現(xiàn)代構建工具的演進。

image

2014 年 2 月

Vue.js 發(fā)布

前谷歌工程師尤雨溪推出 Vue.js,這是漸進式 UI 框架,以易上手、可增量采用、高性能著稱,成為現(xiàn)代 JavaScript 生態(tài)最受歡迎的框架之一。

image

2014 年 7 月

StrongLoop 收購開源框架 Express

專注企業(yè)級 Node.js 解決方案的 StrongLoop(Deno 聯(lián)合創(chuàng)始人 Bert Belder 聯(lián)合創(chuàng)立)收購 Express.js,旨在將其整合到 API 和微服務工具套件中。社區(qū)擔心 Express 獨立性受損,催生了 Koa 等框架。2015 年 IBM 收購 StrongLoop,2019 年 Express.js 加入 OpenJS 基金會,確保治理與長期可持續(xù)性。歷經(jīng) 10 年 4.x 版本后,Express 5 于 2024 年 10 月發(fā)布。

image

2014 年 9 月

Babel.js 首行代碼提交

原名 6to5 的 Babel.js 是 JavaScript 編譯器,讓開發(fā)者能編寫現(xiàn)代 JavaScript 并兼容舊瀏覽器/引擎。它迅速成為生態(tài)標準工具,集成到 React、Vue、Angular 等框架及 Webpack、Rollup、Parcel 等打包工具中。

image

2014 年 10 月

Meteor 1.0 發(fā)布

Meteor 以極簡方式構建實時全棧 JavaScript 應用而轟動開發(fā)社區(qū),深刻影響了開發(fā)者對現(xiàn)代響應式實時網(wǎng)頁應用的理解。盡管后期熱度下降,但其理念在 React、Redux、Firebase、GraphQL 等技術中可見一斑。

image

2014 年 11 月

Facebook 推出 Flow,JavaScript 靜態(tài)類型檢查器

Flow 幫助開發(fā)者在開發(fā)階段捕獲 bug 和類型錯誤,用于維護 Facebook 龐大代碼庫并提升效率。但 2010 年代后期 TypeScript 成為主流,F(xiàn)low 逐漸衰落。

image

2014 年 11 月

亞馬遜宣布 AWS Lambda,由 Node.js 驅(qū)動

作為云計算領導者的 AWS 推出無服務器范式 Lambda,開發(fā)者可上傳代碼并響應事件運行,無需管理基礎設施。Lambda 首發(fā)僅支持 Node.js,因其事件驅(qū)動、非阻塞模型適配無狀態(tài)短執(zhí)行場景。AWS Lambda 催生函數(shù)即服務(FaaS)概念,開啟無服務器計算浪潮,谷歌、微軟隨后跟進。

image

2015 年

Matt Biilmann(Netlify CEO)創(chuàng)造“Jamstack”一詞

Jamstack(JavaScript、API、Markup 的縮寫)是前端開發(fā)架構模式,提供更好的性能、可擴展性和開發(fā)者體驗,標志著網(wǎng)頁開發(fā)從 SPA 架構向 SSR/SSG 轉(zhuǎn)變的新時代。

image

2015 年 2 月

Node.js 基金會成立

在 Linux 基金會旗下,Node.js 基金會旨在通過解決項目碎片化問題,推動 Node.js 的開發(fā)與 adoption。當時知名分支 io.js(由前 Node.js 貢獻者主導,追求更快更新和更好治理)于 2015 年 6 月合并回 Node.js?;饡玫?IBM、微軟、PayPal、英特爾、Fidelity、Joyent、Linux 基金會等企業(yè)支持。

image

2015 年 6 月

GraphQL 發(fā)布

Facebook 2012 年開始開發(fā)的 GraphQL 是聲明式 API 查詢語言,實現(xiàn)更少請求獲取所需數(shù)據(jù),并支持強類型。

image

2015 年 6 月

Redux 發(fā)布

隨著 React 應用增多,狀態(tài)管理需求凸顯。Redux 作為可預測狀態(tài)容器應運而生,如今可適配多種 JavaScript 框架。

image

2015 年 6 月

WebAssembly 發(fā)布

WebAssembly 旨在解決瀏覽器中 JavaScript 的性能局限,支持游戲、視頻編輯等高性能應用,還為 C/C++等語言提供網(wǎng)頁運行的便攜安全方案。

image

2015 年 6 月

Atom“可編程”文本編輯器發(fā)布

Atom 是首批基于網(wǎng)頁技術的高可擴展桌面編輯器,強調(diào)深度定制——開發(fā)者可通過插件和主題調(diào)整從 UI 到核心行為的所有細節(jié)。它驗證了 Electron 作為跨平臺桌面應用框架的價值,將文本編輯器從工具重新定義為平臺,啟發(fā)了 VS Code 等工具。

image

image

2015 年 7 月

ECMAScript 6(ES2015)發(fā)布

ES6 帶來了開發(fā)者期待已久的特性:fetch API、import/export原生模塊系統(tǒng)等:

<script type="text/javascript">

? ? function getData() {

? ? ? fetch("https://api.example.com/data")

? ? ? ? .then(response => {

? ? ? ? ? if (!response.ok) {

? ? ? ? ? ? throw new Error("網(wǎng)絡響應異常:" + response.status);

? ? ? ? ? }

? ? ? ? ? return response.text(); // JSON API可用response.json()

? ? ? ? })

? ? ? ? .then(data => {

? ? ? ? ? document.getElementById("result").textContent = data;

? ? ? ? })

? ? ? ? .catch(error => {

? ? ? ? ? console.error("Fetch錯誤:", error);

? ? ? ? ? alert("數(shù)據(jù)獲取失敗。");

? ? ? ? });

? ? }

}

<button onclick="getData()">獲取數(shù)據(jù)</button>

2015 年 9 月

Node.js v4.0 發(fā)布,合并 Node.js v0.12 與 io.js

這是兩大項目的成果結晶,終結了社區(qū)分裂——此前大量 npm 模塊因兼容問題無法跨 runtime 使用。合并后確立長期支持計劃和語義化版本方案,彰顯開放治理與社區(qū)協(xié)作的力量。

2016 年 1 月

微軟開源 Edge 的 Chakra JavaScript 引擎

微軟希望吸引外部貢獻者并擴大 Edge 引擎應用范圍,甚至推出基于 Chakra 的 Node.js 版本。但 V8 憑借龐大社區(qū)和工具生態(tài)仍是主流,2021 年微軟宣布終止 Chakra 開發(fā),轉(zhuǎn)向基于 Chromium 的 Edge(搭載 V8)。

2016 年 3 月

Azer Koculu 從 npm 移除 Leftpad,引發(fā)影響數(shù)百萬用戶的供應鏈攻擊

因與 Kik Messenger 糾紛,Azer 移除left-pad包,導致數(shù)千依賴項目(包括 React、Babel)無法構建/安裝,影響 Meta、Netflix、Spotify 等企業(yè),暴露了 JavaScript 生態(tài)供應鏈脆弱性。此后 npm 調(diào)整政策,限制包移除權限。

2016 年 4 月

微軟發(fā)布 VS Code 1.0——輕量快速的跨平臺 IDE

它基于 Electron 和 TypeScript 構建,提供一流 JavaScript/TypeScript 支持,迅速顛覆 Sublime Text、Atom 等編輯器和傳統(tǒng) IDE。

image

2016 年 6 月

ECMAScript 2016 發(fā)布,新增指數(shù)運算符(**)和array.includes()方法。

2016 年 9 月

Angular(Angular2)發(fā)布

作為 AngularJS 的徹底重寫,它用組件樹替代 MVC,采用 TypeScript 提升工具支持,通過預編譯增強性能與安全性,成為大型企業(yè)應用的首選框架。

image

2016 年 10 月

Next.js 1.0 發(fā)布

Next.js 最初是基于 React、Webpack、Babel 的服務端渲染通用 JavaScript 框架,簡化了 React 服務端渲染,讓開發(fā)者能用 React 構建內(nèi)容密集、SEO 友好的網(wǎng)站。它最終成為生產(chǎn)級 React 應用的默認框架。

image

2017 年 3 月

Temporal 提案啟動

該提案旨在解決 JavaScript 內(nèi)置Date對象的長期問題:不可變性缺失、時區(qū)/夏令時支持不足、解析不一致等。2021 年 Temporal 提案獲準加入 ECMAScript 標準,但目前僅 Firefox Nightly 和 Deno 支持該 API。

2017 年 4 月

Prettier 1.0 發(fā)布

Prettier 是 opinionated 代碼格式化工具,通過解析代碼并按自身規(guī)則重印,消除代碼審查中的格式爭議。ESLint 等工具聚焦問題檢測,而 Prettier 自動修復格式,推廣“先寫后格式化”工作流,提升代碼質(zhì)量與協(xié)作效率。其影響遠超 JavaScript:Python 采用 Black,Rust 將格式化工具納入工具鏈,視格式化為必備構建步驟。

image

2017 年 6 月

ECMAScript 2017 發(fā)布,新增字符串填充、Object.entries()、Object.values()、異步函數(shù)等特性

2017 年,現(xiàn)代瀏覽器已廣泛支持fetch()(除 IE11),許多開發(fā)者開始使用async/await(無論是否通過 Babel):

<script>

? async function getData() {

? ? try {

? ? ? const response = await fetch("https://api.example.com/data");

? ? ? if (!response.ok) {

? ? ? ? throw new Error("HTTP錯誤 " + response.status);

? ? ? }

? ? ? const data = await response.text(); // JSON可用response.json()

? ? ? document.getElementById("result").textContent = data;

? ? } catch (error) {

? ? ? console.error("Fetch失?。?, error);

? ? ? alert("出錯了!");

? ? }

? }

</script>

<button onclick="getData()">加載數(shù)據(jù)</button>

<pre id="result">等待響應...</pre>

2017 年 9 月

Facebook 推出 Yarn 包管理器

Yarn 旨在解決當時 npm 的痛點:速度、可靠性和一致性,引入yarn.lock確定性依賴解析、自動緩存、并行安裝等特性。

在這里插入圖片描述

2017 年 9 月

Cloudflare 推出 Cloudflare Workers,讓開發(fā)者在邊緣節(jié)點運行 JavaScript

Cloudflare Workers 開啟現(xiàn)代無服務器邊緣計算時代,結合無服務器理念與邊緣分發(fā)(當時約 100 個數(shù)據(jù)中心,現(xiàn)超 300 個),實現(xiàn)低延遲與可擴展隔離。邊緣分發(fā)意味著無服務器代碼在用戶附近執(zhí)行,冷啟動時間極短(基于輕量 V8 隔離而非容器/微 VM)。它讓 Cloudflare 從 CDN 轉(zhuǎn)型為全棧網(wǎng)頁應用平臺,啟發(fā) Netlify、Vercel、Deno Deploy 等推出類似邊緣函數(shù)服務。

image

2018 年 1 月

谷歌發(fā)布 Puppeteer 1.0,瀏覽器自動化工具迎來里程碑

與支持多語言綁定的 Selenium 不同,Puppeteer 專為 Node.js 設計,提供現(xiàn)代 JavaScript 優(yōu)先的 API 控制無頭 Chrome。它確立了 Chromium 在自動化領域的地位,導致 PhantomJS 衰落,影響 Playwright、Cypress 等框架開發(fā)。

image

2018 年 3 月

TensorFlow.js 發(fā)布

2015 年谷歌推出的 TensorFlow 是開源機器學習框架,而 TensorFlow.js 讓網(wǎng)頁開發(fā)者無需 Python 即可實現(xiàn)機器學習,將模型嵌入網(wǎng)頁應用,解鎖實時預測與瀏覽器端 AI 應用。

image

2018 年 6 月

ECMA TC39 通過將flatten重命名為flat解決“Smooshgate”事件

2018 年 TC39 提議為數(shù)組新增flatten方法扁平化嵌套數(shù)組,但該名稱與流行庫 MooTools 的現(xiàn)有方法沖突(實現(xiàn)不兼容)。TC39 成員開玩笑建議 rename 為smoosh,雖非認真提議卻引發(fā)熱議和 memes,最終更名為flat。

image

2018 年 10 月

ECMAScript 2018 發(fā)布,新增剩余/擴展屬性、異步迭代、promise.finally()等特性。

2019 年 3 月

JavaScript 基金會與 Node.js 基金會合并為 OpenJS 基金會

當時 JavaScript 開源生態(tài)分散:Node.js 基金會聚焦服務端,JavaScript 基金會(前身為 jQuery 基金會)管理 jQuery、ESLint、Lodash 等客戶端庫。隨著 Node.js 成為后端事實標準、前端庫蓬勃發(fā)展,合并旨在統(tǒng)一治理,全面支持 JavaScript 生態(tài)。

image

2019 年 4 月

Node.js v12.0.0 實驗性支持 ECMAScript 模塊

隨著 JavaScript 采用 ES 模塊作為代碼模塊化與共享標準,Node.js 逐步跟進,引入.mjs擴展名、package.json的type字段及 CommonJS 互操作機制。

2019 年 7 月

ECMAScript 2019 發(fā)布,新增Object.fromEntries()、String.prototype.trimStart()等特性。

2019 年 11 月

Node.js v13.2.0 穩(wěn)定支持 ECMAScript 模塊

這是 Node.js 生態(tài)的重要里程碑,使其與現(xiàn)代 JavaScript 模塊系統(tǒng)對齊,開發(fā)者可原生使用標準化import/export語法。

2020 年 5 月

JavaScript 隨 SpaceX Dragon 進入太空

下圖的觸摸屏界面基于 Chromium 開發(fā),完全用 JavaScript 編寫。SpaceX 軟件工程師在 AMA 中表示,選擇 Chromium 是因為能招募大量熟悉該技術的程序員。

image

2020 年 5 月

Deno 1.0 發(fā)布

Ryan Dahl 宣布 Deno 首個 major 版本,這是“ batteries-included”的現(xiàn)代 JavaScript 全工具鏈,以單可執(zhí)行文件形式發(fā)布,原生支持 TypeScript、采用按需權限模型和 HTTP 導入。

在這里插入圖片描述

2020 年 12 月

Adobe 終止 Flash 支持,終結視頻與游戲的互聯(lián)網(wǎng)文化時代

為懷舊者,互聯(lián)網(wǎng)檔案館保存了 Flash 游戲和動畫。

image

2022 年 6 月

Deno 加入 TC39,彰顯其擁抱服務器端 JavaScript 標準的愿景。

2022 年 6 月

IE11 退役

IE11 的終結標志著長達 20 年的 IE 時代落幕——它曾是全球使用最廣的瀏覽器。因其眾多安全漏洞和標準缺失,退役成為推動網(wǎng)頁生態(tài)走向標準化、安全化、高性能的關鍵一步。

image

2022 年

ECMAScript 2022 發(fā)布,新增頂層await、類新元素、類內(nèi)靜態(tài)塊等特性。

2023 年 9 月

Bun 1.0 發(fā)布

另一款服務端 JavaScript 運行時(用 Zig 編寫)登場,號稱性能最佳的 Node.js 替代品。

image

2024 年 2 月

Node.js 通過設計競賽選定 Rocket Turtle 為吉祥物

Node.js 社區(qū)討論吉祥物多年,2023 年 Matteo Collina 在 GitHub 發(fā)起議題,最終通過 Twitter 設計競賽,2 月選定“火箭龜”為最終形象。

image

2024 年 3 月

JSR 發(fā)布,現(xiàn)代開源 JavaScript registry

Deno 團隊推出的 JSR 旨在優(yōu)化 JavaScript 安裝與發(fā)布體驗,僅支持 ECMAScript 模塊,原生理解 TypeScript,兼容 npm,支持 Deno、Bun、workerd 等多運行時。

image

2024 年 6 月

ECMAScript 2024 發(fā)布,新增toWellFormed()方法(返回合規(guī) Unicode 字符串)等特性。

2024 年 9 月

針對甲骨文的#FreeJavaScript 法律戰(zhàn)打響

Ryan Dahl 博客呼吁甲骨文釋放 JavaScript 商標未獲回應后,Deno 團隊致公開信,向 USPTO 提交商標撤銷申請,主張甲骨文已放棄該商標。公開信獲近 2 萬簽名,包括 Brendan Eich、Isaac Z。 Schlueter 等知名人士,案件目前仍在進行中。

image

2025 年 3 月

TypeScript 將移植到 Go

最初用 TypeScript/JavaScript 實現(xiàn)的 TypeScript,隨項目規(guī)模擴大面臨性能挑戰(zhàn)。Anders Hejlsberg 實驗性地將其移植到 Go,早期基準測試顯示速度提升約 10 倍,團隊計劃在功能與 JavaScript 版本對齊后,以 TypeScript 7.0 推出 Go 移植版“tsgo”。

image

2025 年 5 月

微軟宣布開源 VS Code 的 Copilot Chat 擴展

隨著 AI 輔助編程工具興起,微軟宣布以 MIT 許可證開源 GitHub Copilot Chat 擴展,目標是將 VS Code 打造成開源 AI 編輯器。此舉鼓勵社區(qū)優(yōu)化跨編輯器 AI 交互,提升全工具鏈的智能編程體驗。

JavaScript 的 30 年旅程波瀾壯闊:從簡陋的腳本語言成長為現(xiàn)代網(wǎng)頁開發(fā)的支柱,支撐動態(tài)前端、全棧應用、原生應用乃至 AI 工具。它的進化源于開源精神、熱情社區(qū)、蓬勃生態(tài)與持續(xù)創(chuàng)新。在慶祝三十周年之際,我們對未來同樣滿懷期待:更快的運行時、更智能的工具、更易用、強大、富有創(chuàng)造力的網(wǎng)頁世界。致敬下一個 30 年的邊界突破!

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 年代劃分:前半葉 0-49年,后半葉 50-99年;初葉 0-29,中葉 30-69,末葉 70-99;初 0-9...
    saoraozhe3hao閱讀 1,025評論 0 1
  • 1.前言 最近有很多朋友問我有沒有相關的書籍推薦,希望能夠自學一下前端。 正好最近在查閱文章的時候,發(fā)現(xiàn)有朋友已經(jīng)...
    MR_LIXP閱讀 116,834評論 223 4,482
  • 1.前言 最近有很多朋友問我有沒有相關的書籍推薦,希望能夠自學一下前端。 正好最近在查閱文章的時候,發(fā)現(xiàn)有朋友已經(jīng)...
    小裁縫sun閱讀 2,476評論 5 76
  • 1.前言最近有很多朋友問我有沒有相關的書籍推薦,希望能夠自學一下前端。正好最近在查閱文章的時候,發(fā)現(xiàn)有朋友已經(jīng)進行...
    AlbenXie閱讀 1,387評論 0 31
  • 目錄:1-------- 走進前端2-------- jQuery3-------- CSS4-------- A...
    山豆山豆閱讀 3,347評論 2 69

友情鏈接更多精彩內(nèi)容