mcpField
W
workers-multi-lang

workers-multi-lang

github.com/secondsky开发24076 次安装5 周前更新
代码仓库

关于 workers-multi-lang

面向希望用 Rust、Python 或 WebAssembly 构建 Cloudflare Workers 的开发者,提供语言选择、集成和性能建议。内容覆盖常见错误及相应参考指南。

主要功能

  1. 01Rust、Python 与 WASM 方案
  2. 02语言选择建议
  3. 03WASM 模块集成示例
  4. 04多语言错误排查
  5. 05性能优化建议

适用场景

  1. 01为计算密集任务选择语言
  2. 02在 Worker 中集成 WASM 模块
  3. 03使用 Python 处理数据或 ML 推理
  4. 04排查多语言构建与运行错误

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/secondsky/claude-skills --skill workers-multi-lang

安装后在 Claude Code 中输入/workers-multi-lang确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
python-workers.md
rust-workers.md
wasm-integration.md
scripts/
build-rust.sh
build-wasm.sh
test-wasm.sh
templates/
python-worker.py
rust-worker.rs
wasm-integration.ts
wasm-worker.ts

详细介绍

多语言 Worker 开发

使用 Rust、Python 或 WebAssembly 构建 Cloudflare Worker,以执行对性能要求较高的操作。

语言对比

特性JavaScript/TSRustPython
启动速度快最快(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() failedRustWASM 无效检查 wasm-pack 构建输出
Module parse failed: Unexpected tokenRustESM/CJS 不匹配使用 --target bundler
Cannot find modulePython缺少依赖添加到 pyproject.toml
Out of memory所有WASM 体积过大启用流式实例化
Exceeded CPU time limit所有计算耗时过长分块处理
wasm-bindgen version mismatchRust依赖冲突在 Cargo.toml 中统一版本
RuntimeError: unreachableRustWASM 中发生 panic添加适当的错误处理
TypeError: not a functionRust缺少导出添加 #[wasm_bindgen] 属性
Python worker startup timeoutPython初始化缓慢尽量减少导入
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 模块时

性能提示

  1. WASM 初始化:缓存实例,使用流式实例化
  2. 内存:使用类型化数组传输数据
  3. 包体积:启用 LTO,剥离调试信息
  4. 冷启动:保持 WASM 模块精简
  5. 数据传输:尽量减少 JS/WASM 边界调用

另请参阅

  • workers-performance - 通用优化技巧
  • workers-testing - 测试多语言 Worker
  • cloudflare-worker-base - Worker 基础设置

评论

支持 Markdown