Skip to content

bibibala/WebAssembly-sample

Repository files navigation

Cheerp 和 Emscripten(EMSDK 是 Emscripten 开发工具包)都是将 C/C++ 代码编译为 WebAssembly(WASM)的工具链,但它们的功能、设计哲学和适用场景有一些显著的区别。以下是它们的主要区别:


1. 基本定位

特性 Cheerp Emscripten (EMSDK)
目标 专注于将 C++ 编译为适合 Web 使用的高性能代码 更通用,支持生成 WebAssembly 和 asm.js 代码
生成目标 可生成纯 .wasm 文件,也支持带有桥接 .js 的输出 通常生成 .js(作为桥)和 .wasm 文件
设计哲学 轻量化、易集成 功能丰富,但文件较大,生成复杂

2. 输出文件差异

特性 Cheerp Emscripten
生成的 JavaScript 文件 轻量化,基本上只提供 WebAssembly 桥接 较重,包含大量 runtime 和 Polyfill
文件依赖性 更倾向直接使用 WebAssembly 提供完整的 JS runtime,与 WASM 配合使用
运行时开销 更小(代码更简洁) 更大(功能更全面,支持更复杂的场景)

3. 支持的功能

功能 Cheerp Emscripten
WebAssembly 导出 支持,较轻量,但需要显式定义导出 完全支持,可通过 EXPORTED_FUNCTIONS 配置
多线程支持 部分支持 强大支持,内置对 WebWorker 的封装
文件系统模拟 (FS) 无内置文件系统模拟 提供 MEMFSNODEFS 等文件系统模拟
标准库支持 支持常用 C++ 标准库 支持完整的 C/C++ 标准库(较大开销)
异步 API 支持 部分支持,需手动实现 强大支持,提供 Asyncify 等工具

4. 适用场景

场景 Cheerp Emscripten
轻量化应用 非常适合,生成代码更小,尤其适合小型 WASM 应用 较不适合,runtime 开销较大
复杂游戏/引擎移植 不太适合,缺少对复杂场景的直接支持 非常适合,广泛用于 Unity、Unreal 等引擎的移植
多线程/复杂 I/O 不太适合,需手动实现多线程支持和文件系统 非常适合,内置支持多线程和模拟文件系统
跨平台支持 针对 Web 优化,更适合直接在浏览器中运行 更通用,支持 Node.js 和多种平台

5. 性能和优化

特性 Cheerp Emscripten
性能优化 更注重生成小文件和直接调用 WASM 函数 注重兼容性,但生成代码更复杂,运行时较大
支持 asm.js 不支持 支持,可用于不支持 WASM 的浏览器

6. 使用方式

  • Cheerp:更简单,通常通过 clang 编译:

    clang++ -target cheerp -o output.js your_code.cpp

    或直接生成 .wasm 文件:

    clang++ -target cheerp -cheerp-mode=wasm -o output.wasm your_code.cpp
  • Emscripten:配置稍复杂,使用 emcc 编译:

    emcc your_code.cpp -o output.js -s EXPORTED_FUNCTIONS=['_main']

7. 文件体积对比

工具 简单 C++ 程序生成的文件大小 完整 WebAssembly 项目
Cheerp 更小,通常只有几 KB 文件较小,运行时轻量
Emscripten 较大,通常包含 100KB+ 的 runtime 文件较大,功能更全面

8. 总结

  • 选择 Cheerp 的场景:

    • 希望生成小体积的 WebAssembly 文件。
    • 不需要复杂的功能,例如文件系统模拟、多线程支持。
    • 适合轻量化 Web 应用或工具。
  • 选择 Emscripten 的场景:

    • 需要完整的 C++ 标准库支持。
    • 希望移植复杂应用,如游戏引擎或多线程程序。
    • 对文件体积要求不严格,但需要功能全面。

如果你的目标是浏览器端的轻量化 WASM 应用程序,Cheerp 更适合;如果你需要移植大型项目并希望获得更高的功能兼容性,Emscripten 更强大

About

Use Cheerp or emsdk, from compiling to wasm to using cases.知乎详细介绍:https://www.zhihu.com/question/41432444/answer/3521685963

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published