无服务器 JavaScript 的工作原理| Service 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 请求到达 Internet 之前拦截、修改和响应请求。

Service worker 可以通过两种方式处理 HTTP 流量:

服务人员回应

Service workers 可以响应 HTTP 请求而无需联系 Web 服务器

服务人员修改请求

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 网络的边缘运行,介于用户和 Internet 的其余部分之间,有效地在网络内部运行。

了解有关 Cloudflare Workers 更多信息,以及创建 Cloudflare Workers 的原因