偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Nginx 正式擁抱現(xiàn)代 JavaScript!

開發(fā) 前端
JavaScript 一開始只是寫網(wǎng)頁的;后來寫應用、寫服務端、寫桌面;現(xiàn)在連 Web Server 配置都能寫了。從 Node 到 Deno 到 Bun,再到 njs + QuickJS,JS 正在成為“寫啥都行”的萬能膠水語言。

說起 Nginx,大多數(shù)人的印象的可能是:高性能、穩(wěn)定、省資源、配置簡單。確實,這個用 C 語言寫出來的服務器工具,十幾年來一直在互聯(lián)網(wǎng)基礎設施中扮演著“守門員”的角色。

但話說回來,Nginx 雖然快,但“太靜態(tài)”也是它的一個老問題。

隨著前后端分離、邊緣計算、接口鑒權、灰度路由等需求變多,越來越多開發(fā)者發(fā)現(xiàn),僅靠傳統(tǒng)的配置語法已經(jīng)不夠用了。我們需要在轉發(fā)請求前“想一想”、攔截一下、判斷一下,有時候還得去后端接口問一嘴。

于是,njs 出現(xiàn)了 —— Nginx 官方推出的 JavaScript 模塊,終于讓你可以在配置里寫點“邏輯”。

njs:靈活但不夠現(xiàn)代

一開始,njs 確實解決了不少痛點。但遺憾的是,它早期的語法支持非常有限,大致相當于 ES5 + 一丟丟 ES6。這對于寫點簡單邏輯還夠用,但對于習慣了 import/export、async/await 的現(xiàn)代 JavaScript 開發(fā)者來說,簡直像突然穿越回了 2012 年。

模塊不能用,異步?jīng)]法寫,語法老舊,開發(fā)體驗也跟不上。用 JavaScript 寫配置這件事,聽上去是件美事,但真寫起來經(jīng)常讓人感到“綁著手腳跳舞”。

新引擎來了,JS 真正落地 Nginx

就在最近,Nginx 官方悄悄宣布:njs 引入對 QuickJS 的支持。

這個變化乍一看不大,但對 JavaScript 開發(fā)者來說,影響是質的飛躍。

QuickJS 是一個超輕量 JavaScript 引擎,體積只有 367 KiB,卻支持完整的 ES2023 標準。這意味著你可以在 Nginx 腳本中使用:

  • import/export 模塊系統(tǒng)
  • async/await 異步語法
  • 異步生成器、Proxy、BigInt 等現(xiàn)代能力

這不是“小打小鬧”的擴展,而是真正意義上的“現(xiàn)代 JavaScript 編程”跑在 Nginx 里了。

JS 能在 Nginx 里干啥?

以前你可能只能在配置里寫點 if 判斷、拼個 URI 之類的小邏輯,現(xiàn)在則可以做更“工程化”的事:

  • 根據(jù)請求內(nèi)容動態(tài)分發(fā)路由,像寫 Express 一樣
  • 做一個輕量級的接口驗證邏輯,不用走后端
  • 異步生成日志數(shù)據(jù),根據(jù)條件寫不同格式
  • 自定義 header、body 處理邏輯,更靈活地轉發(fā)請求

比如下面這個“接口認證”代碼:

async function auth(r) {
  const resp = await ngx.fetch("http://auth-service/validate", {
    method: "POST",
    body: JSON.stringify({ token: r.headersIn['Authorization'] })
  });

  if (resp.status !== 200) {
    r.return(401, "Unauthorized");
  }
}

很 Node.js,對吧?但它運行在 Nginx 里,零依賴,零服務擴展。

為什么 JS 會在這兒火起來?

我們不妨換個角度看這個問題:Nginx 為啥愿意引入 JS?

答案其實不復雜:

  • JS 開發(fā)者太多了,門檻低、學習成本小
  • 寫配置邏輯比 DSL 清晰太多,容易調(diào)試
  • 同樣的邏輯,寫 JS 更靈活、可讀性強
  • 工具鏈一體化,前后端協(xié)同更自然

以前大家愛用 Lua,但 Lua 太冷門,生態(tài)小,現(xiàn)代語法也不行。Node.js 太重,把整個引擎塞進去不現(xiàn)實。而 QuickJS 折中得剛剛好:夠現(xiàn)代、夠小、夠快,完美貼合 Nginx 的設計哲學。

不是突然闖進來,而是悄悄深入

其實 JavaScript “進入” Nginx,不是一夜之間發(fā)生的。

  • 一開始,只是能在配置里塞點小腳本
  • 后來有了 njs,可以寫邏輯函數(shù)
  • 現(xiàn)在有了 QuickJS,能跑完整的現(xiàn)代 JS

一步步來,幾乎沒怎么驚動圈子,但回過頭看,它已經(jīng)成為 Nginx 腳本化能力的核心語言

這不像 Node.js 那樣大張旗鼓搞服務端開發(fā),更像是 JavaScript 在基礎設施領域的一次“迂回作戰(zhàn)”。

能用在什么地方?

如果你想知道具體能在哪用到,現(xiàn)在已經(jīng)有不少落地場景:

  • 動態(tài)路由:按地域、時間、設備類型轉發(fā)到不同服務
  • 自定義日志:記錄用戶行為、請求詳情、命中規(guī)則等
  • 邊緣攔截策略:做風控前置、做 IP 黑名單、做認證緩存
  • 前端工具聯(lián)動:配合 Vite、Bun 做部署邏輯控制等

總之,原來只能在后端服務里搞的邏輯,現(xiàn)在可以在 Nginx 層就“截胡”了。

寫在最后

JavaScript 一開始只是寫網(wǎng)頁的;后來寫應用、寫服務端、寫桌面;現(xiàn)在連 Web Server 配置都能寫了。

從 Node 到 Deno 到 Bun,再到 njs + QuickJS,JS 正在成為“寫啥都行”的萬能膠水語言

這一次,它沒試圖取代什么,只是在最不起眼的角落,把事情做得更順、更靈活、更現(xiàn)代。

Nginx 還是那個 Nginx,但現(xiàn)在,它腦子里裝了一塊 JavaScript 的芯。


責任編輯:武曉燕 來源: 前端充電寶
相關推薦

2014-11-20 13:07:18

OracleSaaS

2023-01-03 09:33:02

JavaScript打包

2023-05-12 14:52:30

2020-07-10 10:48:01

基礎架構

2010-10-22 14:43:09

移動開發(fā)

2024-05-30 08:01:52

2019-11-05 16:51:41

JavaScript數(shù)據(jù)es8

2022-07-03 08:06:40

JavaScript語言代碼

2023-10-07 10:42:44

微軟微軟商店應用

2023-09-17 12:21:21

RemixNext.js

2023-05-08 09:00:46

JSON深拷貝對象

2023-06-15 13:01:07

JavaPythonJavaScript

2023-12-07 11:38:25

2023-10-09 07:01:06

Nginx反向代理Envoy

2023-01-26 10:55:55

生成器Astro靜態(tài)站點

2023-08-31 10:04:02

Astro 3.0前端

2021-03-30 12:48:29

存儲

2015-05-27 14:26:05

2022-02-22 23:39:15

JavaScript編程語言Web

2023-01-18 10:41:43

JavaScrip獲取網(wǎng)絡數(shù)據(jù)
點贊
收藏

51CTO技術棧公眾號