Cloudflare
Workers
Pages
Serverless
Edge Computing

Cloudflare Workers 与 Pages:选择之前重要的区别

Workers 和 Pages 之间的决定是关于部署和计费模型,而不是运行时容量——它们都运行相同的 V8。

Cloudflare Workers 与 Pages:选择之前重要的区别

[Cloudflare Workers7] 和 Pages 上的大多数教程都进行了错误的比较。它将两者视为直接竞争对手,就好像您必须在一个框架和另一个框架之间进行选择一样。 Workers 和 Pages 在不同层解决不同的问题 - 如果不了解这种区别而进行选择,则会创建昂贵的架构或需要在六个月内重构。

每一个实际上是什么

Workers 是一个计算平台。您编写代码,使用 0 进行部署,然后该代码在分布在 Cloudflare 网络中的 V8 隔离上运行 — 目前分布在 300 多个存在点。执行模型是事件驱动的:每个 HTTP 请求、队列消息、cron 触发器或电子邮件处理程序都会生成一个调用。冷启动低于 1 毫秒,因为 V8 隔离共享相同的进程,这与从头开始的容器不同。

Pages 是一个托管平台。核心案例是:您有一个网站或 SPA,您构建了 1 份,Cloudflare 运行您的构建(2 份、Hugo、Astro 等),生成的静态资产分布在其全球 CDN 中。对这些资产(HTML、JS、CSS、图像)的请求直接从 CDN 提供,无需经过任何计算运行时。

Pages 还具有 Pages Functions,它们是通过目录约定部署的 Workers 脚本 (3)。混乱从这里开始:页面函数与 Workers 运行在相同的 V8 运行时上,具有相同的绑定(D1、KV、R2、持久对象)、相同的 CPU 和内存限制。 Pages Functions 和纯 Workers 之间的区别不是技术上的,而是操作上的。

改变一切的账户

在 Workers 付费计划(5 美元/月)中,您包含 1000 万个请求,并为超出的每百万个请求支付 0.30 美元。运行时处理的每个 HTTP 请求都会计数。

在 Pages 中,对静态资产的请求每个请求不产生任何费用 - 它们由 Cloudflare 的 CDN 提供服务,而不会触发 Workers 运行时。您需要为构建付费(专业计划每月 20 美元,每月最多 5,000 个构建和 5 个并发构建)。页面功能的请求与工作线程消耗相同的预算。

转化为真实案例:一个每月有 1 亿个请求的网站,其中 90% 用于静态资产(JS 包、图像、HTML 页面),10% 用于 API 路由。在 Pages 上,9000 万个静态请求的成本为 0 美元。 1000 万次函数调用是专业计划中免费函数的一部分。在纯 Workers 通过 4 与 R2 存储桶提供相同资产的等效架构中,您每月只需支付 27 美元的差价(包括 0.30 美元 × 9000 万个以上的 1000 万个请求)。

这种差异是结构性的,不会随着规模的扩大而消失,反而会变得更糟。

工人有真正优势的地方

某些原语仅存在于 Workers 中。 Pages 中不存在 Cron 触发器(即在预定时间执行代码的能力)。如果您需要一个每小时运行一次的作业来同步数据、处理队列或清理过期记录,这就是 Workers。它在 Pages 中没有等效项。

Workers 还支持队列消费者(异步处理来自 Cloudflare 队列的消息)、电子邮件 Workers(接收和处理电子邮件)和平台 Workers(调度用户部署的脚本,对于多租户 SaaS 很有用)。这些非HTTP触发器仅存在于Workers模型中。

持久对象在这两种情况下都可以工作,但多个实例之间的复杂协调(例如分布式有状态 WebSocket 服务器)在 Workers 中往往更加清晰,您可以在其中完全控制部署和路由。

实际覆盖

页面函数和工作线程共享完全相同的运行时。限制是相同的:128MB 内存(硬限制)、付费计划上的 10MB 压缩脚本、付费计划上每次调用 1,000 个子请求、每个请求 30 秒的 CPU。可用的绑定是相同的:D1、KV、R2、持久对象、AI、调用其他 Worker 的服务绑定。

这意味着中端 API 可以完全基于 Pages Functions 构建,而无需牺牲任何运行时功能。问题不是“哪一个具有更多的计算能力”,而是“哪种部署和计费模型对我的工作负载最有意义”。

决策标准

启发式的工作方式如下:如果您的项目具有通过构建生成的静态资产(任何前端框架、静态站点生成器、SPA),那么 Pages 就是自然的起点。您可以免费获得资产的全球 CDN、每个分支的自动预览部署以及集成的构建管道。 API 路由位于 5 中,并在相同的 Workers 运行时中运行。

如果项目是计算优先的——没有重要的静态资产,或者具有非 HTTP 触发器,如 cron、队列和电子邮件——Workers 是直接选择。通过 6 的部署模型更加明确,代码版本可控制,并且与定制的 CI/CD 工作流程更好地集成。

大多数项目并不只处于一种极端。典型的 SaaS 具有前端(Pages,带有免费 CDN)、API(Pages Functions、相同的代码库、相同的部署)和一组后台作业(单独的 Workers,带有 cron 触发器)。这些后台 Workers 通过服务绑定连接到 Pages 项目——Workers 之间直接调用,无需通过公共互联网。

文档没有解释的内容

Cloudflare 将 Workers 和 Pages 记录为具有单独页面的单独产品,这掩盖了一个重要细节:Pages 项目可以通过服务绑定调用外部 Workers,而外部 Workers 可以提供 Pages 项目中的资产。它们不是孤岛。它们是组合在一起的碎片。

最常见的错误是在 Workers 中重新实现 Pages 免费提供的功能——提供静态资产——因为有人首先阅读了 Workers 并认为它“更先进”。 Workers并不比Pages先进。它是针对不同层面问题的不同工具。

另请阅读

  • [从Pages迁移到Workers:何时有意义以及改变的实际成本88
  • [页面功能:何时使用而不是纯粹的 Workers9
  • [只有工人才能做的事情,只有页面才能做的事情以及两者相遇的地方1010
  • [Workers 和 Pages:部署、路由以及每个模型隐藏的内容11
  • [Cloudflare KV:当你需要写12时,全球分布式是什么意思?
  • [Cloudflare Durable Objects:边缘的一致状态 - 真正改变的是什么13