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 章需要 |
相关资源