关于 workers-multi-lang
面向希望用 Rust、Python 或 WebAssembly 构建 Cloudflare Workers 的开发者,提供语言选择、集成和性能建议。内容覆盖常见错误及相应参考指南。
主要功能
- 01Rust、Python 与 WASM 方案
- 02语言选择建议
- 03WASM 模块集成示例
- 04多语言错误排查
- 05性能优化建议
适用场景
- 01为计算密集任务选择语言
- 02在 Worker 中集成 WASM 模块
- 03使用 Python 处理数据或 ML 推理
- 04排查多语言构建与运行错误
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ secondsky/ claude-skills --skill workers-multi-lang安装后在 Claude Code 中输入/workers-multi-lang确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/python-workers.mdrust-workers.mdwasm-integration.mdscripts/build-rust.shbuild-wasm.shtest-wasm.shtemplates/python-worker.pyrust-worker.rswasm-integration.tswasm-worker.ts详细介绍
多语言 Worker 开发
使用 Rust、Python 或 WebAssembly 构建 Cloudflare Worker,以执行对性能要求较高的操作。
语言对比
| 特性 | JavaScript/TS | Rust | Python |
|---|---|---|---|
| 启动速度 | 快 | 最快(WASM) | 中等 |
| CPU 性能 | 良好 | 出色 | 良好 |
| 内存占用 | 较高 | 较低 | 较高 |
| 包体积 | 较小 | 中等 | 较大 |
| 类型安全 | 可选(TS) | 严格 | 可选 |
| 最适合 | 通用应用 | CPU 密集型任务 | 数据/机器学习 |
快速决策
Need maximum performance? → Rust/WASM
Heavy computation (crypto, image processing)? → Rust/WASM
Data processing, ML inference? → Python
General web apps? → JavaScript/TypeScript
多语言开发的十大常见错误
| 错误 | 语言 | 原因 | 解决方案 |
|---|---|---|---|
WebAssembly.instantiate() failed | Rust | WASM 无效 | 检查 wasm-pack 构建输出 |
Module parse failed: Unexpected token | Rust | ESM/CJS 不匹配 | 使用 --target bundler |
Cannot find module | Python | 缺少依赖 | 添加到 pyproject.toml |
Out of memory | 所有 | WASM 体积过大 | 启用流式实例化 |
Exceeded CPU time limit | 所有 | 计算耗时过长 | 分块处理 |
wasm-bindgen version mismatch | Rust | 依赖冲突 | 在 Cargo.toml 中统一版本 |
RuntimeError: unreachable | Rust | WASM 中发生 panic | 添加适当的错误处理 |
TypeError: not a function | Rust | 缺少导出 | 添加 #[wasm_bindgen] 属性 |
Python worker startup timeout | Python | 初始化缓慢 | 尽量减少导入 |
SharedArrayBuffer not supported | 所有 | 安全限制 | 添加 COOP/COEP 标头 |
Rust 快速入门
# Install tools
cargo install wasm-pack
# Create project
cargo new --lib my-worker
cd my-worker
# Add to Cargo.toml
cat >> Cargo.toml << 'EOF'
[lib]
crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "0.2"
worker = "0.3"
console_error_panic_hook = "0.1"
[profile.release]
opt-level = "s"
lto = true
EOF
// src/lib.rs
use worker::*;
#[event(fetch)]
async fn fetch(req: Request, env: Env, _ctx: Context) -> Result<Response> {
console_error_panic_hook::set_once();
Router::new()
.get("/", |_, _| Response::ok("Hello from Rust!"))
.get("/compute", |_, _| {
// CPU-intensive computation
let result = heavy_computation();
Response::ok(format!("Result: {}", result))
})
.run(req, env)
.await
}
fn heavy_computation() -> u64 {
(1..1_000_000).filter(|n| is_prime(*n)).count() as u64
}
fn is_prime(n: u64) -> bool {
if n < 2 { return false; }
(2..=(n as f64).sqrt() as u64).all(|i| n % i != 0)
}
Python 快速入门(Workers for Platforms)
# pyproject.toml
[project]
name = "my-worker"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = []
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
# src/entry.py
from js import Response, Headers
async def on_fetch(request, env):
url = request.url
if "/compute" in url:
result = heavy_computation()
return Response.new(f"Result: {result}")
return Response.new("Hello from Python!")
def heavy_computation():
"""CPU-intensive computation"""
return sum(1 for n in range(2, 100000) if is_prime(n))
def is_prime(n):
if n < 2:
return False
return all(n % i != 0 for i in range(2, int(n**0.5) + 1))
WASM 模块集成
// Load and use WASM module in TypeScript Worker
import wasmModule from './pkg/my_lib_bg.wasm';
import { init, process_data } from './pkg/my_lib';
let wasmInstance: WebAssembly.Instance;
export default {
async fetch(request: Request, env: Env): Promise<Response> {
// Initialize WASM once
if (!wasmInstance) {
wasmInstance = await WebAssembly.instantiate(wasmModule);
init();
}
// Use WASM function
const result = process_data(inputData);
return Response.json({ result });
},
};
何时加载参考资料
| 参考资料 | 加载时机 |
|---|---|
references/rust-workers.md | 使用 Rust/WASM 构建 Worker 时 |
references/python-workers.md | 在 Workers for Platforms 上使用 Python 时 |
references/wasm-integration.md | 在任何 Worker 中集成 WASM 模块时 |
性能提示
- WASM 初始化:缓存实例,使用流式实例化
- 内存:使用类型化数组传输数据
- 包体积:启用 LTO,剥离调试信息
- 冷启动:保持 WASM 模块精简
- 数据传输:尽量减少 JS/WASM 边界调用
另请参阅
workers-performance- 通用优化技巧workers-testing- 测试多语言 Workercloudflare-worker-base- Worker 基础设置
评论
支持 Markdown