QuickJS 嵌入式 JavaScript 引擎完全教程
QuickJS 嵌入式 JavaScript 引擎完全教程
概述
QuickJS 是由 Fabrice Bellard(FFmpeg、QEMU、TinyCC 作者)开发的一款小型、可嵌入的 JavaScript 引擎。它完整支持 ES2023 规范,以极小的二进制体积(约 210KB)和零外部依赖著称,非常适合嵌入式系统、游戏脚本引擎、IoT 设备以及需要安全沙箱执行用户代码的场景。
为什么选择 QuickJS?
| 特性 | QuickJS | V8 | Duktape | JerryScript |
|---|
| ES2023 支持 | ✅ 完整 | ✅ 完整 | ❌ ES5.1 | ❌ ES5.1 子集 |
| 二进制体积 | ~210KB | ~10MB+ | ~300KB | ~200KB |
| 内存占用 | 极低 | 高 | 低 | 极低 |
| JIT 编译 | ❌ | ✅ | ❌ | ❌ |
| 字节码编译 | ✅ | ✅ | ✅ | ✅ |
| 异步/生成器 | ✅ | ✅ | ❌ | ❌ |
| 依赖项 | 无 | 多 | 无 | 无 |
| 许可证 | MIT | BSD | MIT | Apache 2.0 |
| 积极维护 | ✅ | ✅ | ⚠️ 低活跃 | ✅ |
适用场景
- 嵌入式设备:在资源受限的 MCU/SoC 上运行 JavaScript 脚本
- 游戏引擎脚本:作为游戏逻辑层的脚本语言
- 安全沙箱:执行不受信任的用户代码
- 配置与自动化:用 JavaScript 替代 Lua/JSON 作为配置语言
- IoT 网关:在网关设备上运行数据处理脚本
- 桌面应用扩展:为 C/C++ 应用添加脚本能力
教程目录
本教程共 10 章,由浅入深覆盖 QuickJS 的方方面面。
| 章节 | 标题 | 内容概要 |
|---|
| 01 | QuickJS 概述 | QuickJS 简介、ES2023 支持、与 V8/Duktape 对比、适用场景 |
| 02 | 安装与编译 | 源码获取、编译构建、qjs 解释器、qjsc 编译器、语言绑定、FFI、WebAssembly |
| 03 | 基本使用 | REPL 交互、脚本执行、模块系统、字节码编译与执行 |
| 04 | C API 详解 | JSContext、JSValue、运行时管理、C 回调、自定义对象、内存管理 |
| 05 | 模块系统 | ES Module 导入导出、字节码模块、自定义模块加载器、动态导入 |
| 06 | 原生扩展 | C 模块编写、原生函数注册、自定义类定义、属性与方法、继承体系 |
| 07 | 嵌入与安全 | 嵌入应用、沙箱隔离、执行超时、内存限制、中断机制、递归限制 |
| 08 | 性能优化 | 字节码优化、内存管理、启动时间、与 V8 对比、基准测试 |
| 09 | Docker 使用 | Docker 环境、嵌入式开发工作流、交叉编译、自动化测试、脚本运行 |
| 10 | 最佳实践 | 沙箱安全、嵌入式应用、脚本化架构、游戏脚本、IoT 应用 |
学习路线建议
快速入门(1-2 天)
- 阅读第 01 章了解 QuickJS 的定位和能力
- 按第 02 章完成编译安装
- 跟着第 03 章跑通基本用法
C/C++ 开发者(3-5 天)
- 深入第 04 章掌握 C API
- 学习第 05 章的模块系统
- 通过第 06 章实现原生扩展
生产环境部署(1-2 天)
- 第 07 章学习嵌入与安全最佳实践
- 第 08 章进行性能调优
- 第 09 章搭建 CI/CD 环境
- 第 10 章参考最佳实践落地
环境要求
| 工具 | 最低版本 | 说明 |
|---|
| GCC | 4.8+ | 或 Clang 3.4+ |
| Make | 3.81+ | 构建工具 |
| Git | 2.0+ | 获取源码 |
| Docker | 20.10+ | 第 09 章需要 |
相关资源