函数
几秒内部署Serverless 函数
在您自己的服务器上运行托管的 Deno 运行时。编写 TypeScript 函数,上传即可通过 HTTPS 调用。无构建步骤、无容器镜像、无供应商锁定。
编写函数,部署,调用
// handler.ts
export default async function(req: Request) {
const url = new URL(req.url);
const name = url.searchParams.get('name') ?? 'world';
return new Response(
JSON.stringify({ hello: name }),
{ headers: { 'Content-Type': 'application/json' } },
);
}
# Invoke your function
curl https://my-functions.sh0.app/?name=sh0
{"hello":"sh0"}
Serverless,零妥协
Serverless 函数的所有优势,加上自托管的完全掌控。
TypeScript 和 JavaScript
使用 TypeScript 或 JavaScript 编写函数。完整的 Deno 运行时,支持顶层 await、ES 模块以及标准 Web API(fetch、crypto、streams)。
即时部署
上传函数文件即可立即上线。无需构建步骤、无需容器镜像、无冷启动。Deno 在首次请求时编译并缓存。
自动 SSL 端点
每个函数实例通过 Caddy 获得独立的 HTTPS 端点。可从任何前端、Webhook 或定时任务通过安全连接调用。
轻量级运行时
每个 Deno 实例大约使用 256 MB 内存。启动快速,占用小,执行高效。
沙箱执行
Deno 默认在安全沙箱中运行。除非明确授权,否则无法访问文件系统和网络。设计上即是安全的。
HTTP 调用
函数通过标准 HTTP 请求调用。可返回任何内容类型——JSON、HTML、纯文本、二进制。可用作 API 端点、Webhook 或微服务。
工作原理
01
创建函数实例
在 sh0 仪表板中点击「创建函数服务器」。为您的 Serverless 运行时选择一个名称。
02
编写函数
编写一个处理 HTTP 请求的 TypeScript 或 JavaScript 函数。导出一个接收 Request 并返回 Response 的默认函数。
03
部署
通过仪表板或 API 上传函数文件。数秒内完成编译并准备就绪。
04
调用
通过 HTTPS 端点调用函数。可通过查询参数、请求头或请求体传递数据。
执行流程
HTTP 请求
Caddy (SSL)
Deno 运行时
您的函数
响应
直接执行。无容器冷启动,无编排开销。
云函数 (AWS/GCP/Azure)
- x 按调用计费,费用累积很快
- x 冷启动影响用户体验
- x 供应商专有的 API 和工具
- x 复杂的 IAM 和网络配置
- x 本地测试和调试困难
- x 服务之间的数据传输费用
sh0 + Deno Functions
- 统一定价,调用次数不限
- 无冷启动——Deno 编译并缓存
- 标准 Web API(Request/Response)
- 简单的 HTTPS 端点,无需配置
- 本地和生产环境使用相同的 Deno 运行时
- 直接访问数据库,无流量费
常见问题
支持哪些语言? +
通过 Deno 运行时支持 TypeScript 和 JavaScript。Deno 原生支持 TypeScript——无需编译步骤或 tsconfig。
有冷启动吗? +
Deno 在首次请求时编译并缓存函数。后续请求从缓存中提供服务,延迟几乎可以忽略。
函数可以访问我的数据库吗? +
可以。您的函数可以使用标准连接字符串连接到 sh0 管理的任何 PostgreSQL、MySQL 或 Redis 数据库服务器。
请求/响应格式是什么? +
函数接收标准的 Web API Request 对象,必须返回 Response 对象。这与 Deno Deploy、Cloudflare Workers 及其他边缘运行时使用的 API 相同。
可以使用 npm 包吗? +
可以。Deno 通过 npm: 说明符支持从 npm 导入(例如 import express from "npm:express")。您也可以从 URL 或 deno.land/x 导入。
这与 AWS Lambda 有什么不同? +
sh0 Functions 运行在您自己的服务器上——无供应商锁定、无按调用计费、无冷启动惩罚。您掌控基础设施。