無伺服器 JavaScript 如何運作?| 服務 Workers 與 Cloudflare Workers

無伺服器 JavaScript 用於建置具有最低延遲的無伺服器 Web 應用程式。

學習目標

閱讀本文後,您將能夠:

  • 定義無伺服器 JavaScript
  • 瞭解如何使用無伺服器 JavaScript 來建置低延遲 Web 應用程式
  • 瞭解為什麼 JavaScript 比 VCL 更有效
  • 瞭解 HTTP 快取和 HTTP 請求
  • 瞭解 Service Workers、Cloudflare Workers 以及二者之間的差異

複製文章連結

什麼是無伺服器 JavaScript?

無伺服器 JavaScript 是包含全部或部分應用程式的 JavaScript 代碼,僅在請求時執行,不在專有伺服器上託管。它讓開發人員能夠構建在網路中執行的高效能、低延遲的無伺服器應用程式(如 JAMstack 應用程式),並避免了許多與其他無伺服器應用程式相關的問題,例如冷啟動。

無伺服器 JavaScript 託管在邊緣網路中或由 HTTP 快取服務代管,後者儲存內容以快速回應 HTTP 請求。開發人員可以編寫和部署處理 HTTP 請求的 JavaScript 功能,在處理後再將請求一直傳遞到來源伺服器

邊緣伺服器上的無伺服器 JavaScript

使用無伺服器 JavaScript,可以透過在邊緣執行代碼來擴展現有應用程式的功能並改善使用者體驗,或者建立一個快速且高度可擴展的、全新的、完全無伺服器的應用程式。Cloudflare Workers 就是一個無伺服器 JavaScript 平台。

什麼是 Varnish?

Varnish 是一個 Web 加速器,旨在加速 Web 應用程式並提高網站效能。它是一個快取 HTTP 反向代理,這意味著它位於任何 Web 伺服器的前端,並透過快取或儲存 Web 用戶端經常請求的任何內容來加速往返於該伺服器的 HTTP 流量。將 Varnish 設定語言(簡稱 VCL)與 Varnish 結合使用,開發人員就可以自訂 Varnish 管理 Web 請求的方式。

在無伺服器架構中使用 JavaScript 而不是 VCL 有什麼優勢?

VCL 是一種設定語言,旨在使 Varnish 快取易於設定;它不是一種成熟的程式設計語言。VCL 不夠靈活,無法建置或擴展強大的應用程式。與 JavaScript 相比,它的功能有限。此外,VCL 不在 Varnish 實作之外使用,因此大多數開發人員都不熟悉 VCL。而 JavaScript 則應用廣泛,並且已經廣泛用於建置應用程式。在無伺服器架構中使用 JavaScript 可使開發人員以他們熟悉的語言建置完整的應用程式。

無伺服器 JavaScript 使更廣泛的開發人員群體能夠利用邊緣上的無伺服器運算,並允許這些開發人員構建更多種類的應用程式。

為什麼使用無伺服器 JavaScript 構建應用程式可以減少延遲?

無伺服器 JavaScript 在 HTTP 快取網路中執行,該網路比來源伺服器上託管的代碼更接近終端使用者。因此,請求不必一路傳遞到來源伺服器再一路回傳,應用程式對使用者互動的回應速度更快。快取網路在地理上分佈的邊緣位置越多,延遲時間就越短。

無伺服器 JavaScript 何時執行?

在無伺服器模型中,應用程式被分解為函數,並且函數代碼在回應某些事件時運行,在其他情況下不會運行。觸發無伺服器 JavaScript 執行的事件是 HTTP 請求。開發人員可以自訂其 JavaScript 函數回應的 HTTP 請求的類型,以及更改或實現 HTTP 請求的方式。

什麼是 HTTP 請求?

這是透過 HTTP(超文字傳輸通訊協定)從用戶端傳送到伺服器的請求。瀏覽器將使用者動作(例如點擊超連結或提交表單)轉換為 HTTP 請求。然後,請求被傳送到伺服器,然後伺服器傳送 HTTP 回應來滿足請求。當應用程式進行 API 呼叫時,也會發生 HTTP 請求。

什麼是 HTTP 快取?

HTTP 快取是指伺服器或瀏覽器儲存對使用者 HTTP 請求的回應的複本,以便更快答覆以後的請求。CDN 伺服器就是 HTTP 快取的範例。一些 HTTP 快取服務使開發人員可以自訂 HTTP 快取為其應用程式運作的方式。

Cloudflare 是一個 HTTP 快取邊緣網路,其資料中心遍佈世界各地,它允許開發人員在網路邊緣編寫和部署自己的 JavaScript。在 Cloudflare 網路中,HTTP 快取不在任何特定伺服器中進行,而是在最接近 HTTP 請求來源的資料中心內進行。

什麼是 service workers?

Service workers 是瀏覽器下載並執行的指令碼,以便為使用者建立自訂體驗。Service workers 使在瀏覽器中實現推播通知、背景同步和離線運作等功能成為可能。它們使用 JavaScript 編寫,可以在 HTTP 請求到達網際網路之前攔截、修改和回應請求。

Service workers 可以透過兩種方式處理 HTTP 流量:

Service Worker 回應

Service workers 可以回應 HTTP 請求而無需聯絡 Web 伺服器

Service Worker 修改請求

Service workers 可以修改 HTTP 請求和回應

Cloudflare Workers 是什麼?

Cloudflare Workers 是一個平台,用於使無伺服器功能盡可能接近終端使用者執行。本質上,無伺服器代碼本身是「快取」在網路上的,並在收到正確類型的請求時執行。Cloudflare Workers 是根據 service workers API 用 JavaScript 編寫的,這意味著它們可以使用 service workers 提供的所有功能。它們利用 Chrome V8 引擎執行。Cloudflare Workers 代碼託管在 Cloudflare 遍佈全球的龐大資料中心網路中。

什麼是 Chrome V8?

Chrome V8,也稱為「V8」,是 Google 為編譯、最佳化和執行 JavaScript 而開發的 JavaScript 引擎。使用 V8 進行 JavaScript 代碼執行,可大大減少 JavaScript workers 的啟動時間,因此消除了大多數情況下的「冷啟動」問題。V8 還進行了詳細的安全性漏洞分析,因此是安全執行 JavaScript 代碼的理想選擇。

與 service workers 相比,Cloudflare Workers 有何獨特之處?

使用 Cloudflare Workers 和使用 service workers 的一個主要區別是,service workers 是在用戶端運行的,必須由使用者的瀏覽器下載,而 Cloudflare Workers 在 Cloudflare 網路的邊緣執行,介於使用者和網際網路的其餘部分之間,有效地在網路內部執行。

瞭解有關 Cloudflare Workers 更多資訊,以及建立 Cloudflare Workers 的原因