尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

QuickJS完全入门:为什么这个“小而美“的嵌入式JavaScript引擎正悄悄征服IoT世界

QuickJS完全入门:为什么这个“小而美“的嵌入式JavaScript引擎正悄悄征服IoT世界 QuickJS完全入门为什么这个小而美的嵌入式JavaScript引擎正悄悄征服IoT世界【免费下载链接】QuickJSQuickJS is a small and embeddable Javascript engine. QuickJS sources are copyright Fabrice Bellard and Charlie Gordon.项目地址: https://gitcode.com/gh_mirrors/quick/QuickJSQuickJS 是由 Fabrice Bellard 和 Charlie Gordon 打造的小而美、可嵌入的 JavaScript 引擎small and embeddable Javascript engine。它用纯 C 语言编写核心代码紧凑、内存占用极低却完整支持 ES2020 语法——这正是它被越来越多的嵌入式开发者和 IoT 项目选中的原因。本文将带你快速认识 QuickJS 嵌入式 JavaScript 引擎它是什么、凭什么小而美、如何 5 分钟上手以及它在物联网世界中的典型玩法。什么是 QuickJS 嵌入式 JavaScript 引擎一句话概括QuickJS 是一个可以装进任何 C/C 程序的 JavaScript 引擎。它和你熟悉的浏览器 JS 环境V8、SpiderMonkey有本质区别维度浏览器 JS 引擎QuickJS定位跑在浏览器/Node 中嵌入到 C/C 应用、设备中体积数十 MB 起核心源码仅约 1 万行 C 代码内存较大极低适合微控制器级别设备标准支持完整 Web APIECMAScript 标准 可裁剪部署方式依赖运行时交叉编译到 ARM、MIPS 等各种架构核心源码结构非常清晰新人可以快速定位quickjs.c —— 引擎本体解析器、字节码编译器、虚拟机与垃圾回收器quickjs.h —— 嵌入 APIC 程序通过这些接口调用 JSquickjs-libc.c —— 可选的 C 标准库封装文件、网络、子进程等libregexp.c —— 正则表达式引擎同样是自研实现libbf.c —— 支持 BigInt / BigFloat / BigDecimal 的任意精度数学库Makefile —— 构建配置支持 Windows 交叉编译与 LTO 优化QuickJS 为什么小而美3 个核心优势1️⃣ 极小的体积与内存足迹QuickJS 的设计哲学就是少即是多。没有 DOM、没有完整的 Web API只保留 ECMAScript 标准核心。在 32 位平台上它用NaN boxing技术把 JS 值压缩进一个 64 位整数对象和字符串按需分配——这让它在资源紧张的 IoT 设备上也能跑起来。2️⃣ 现代 JavaScript 语法支持别看它小语法一点都不古董。根据 Changelog 记录QuickJS 已支持ES2020可选链?.、空值合并??逻辑赋值运算符/||/??BigInt、BigDecimal--bignum模式ES Moduleimport/exportPromise、AggregateError、Promise.any跨 Realm 支持、os.Worker多线程3️⃣ 可嵌入、可交叉编译QuickJS 本质是一组 C API。你的 C 程序可以直接执行 JS 字符串或文件把 C 函数暴露给 JS 调用在 JS 中定义 C 类参见 examples/test_point.js用qjsc把 JS 预编译成字节码再压缩打包交叉编译支持意味着在 PC 上编译产物跑在嵌入式 Linux 或智能设备上。QuickJS 快速上手5 分钟安装与运行指南第一步获取代码并编译git clone https://gitcode.com/gh_mirrors/quick/QuickJS cd QuickJS makeUbuntu 下如需安装到系统路径可执行sudo make install。编译完成后你会得到两个明星可执行文件工具作用一句话理解qjsJS 解释器像node一样直接跑 JS 文件qjscJS 字节码编译器把 JS 编译成二进制字节码程序第二步运行第一个脚本参考官方示例 examples/hello.js内容只有一行console.log(Hello World);运行./qjs examples/hello.js # 输出Hello World第三步体验 REPL 交互式控制台直接执行./qjs进入交互式 REPL支持std、os等内置模块内置的交互逻辑在 repl.js 中实现。第四步把 JS 编译成独立字节码程序QuickJS 有个独特玩法——把脚本编译成可直接运行的二进制字节码./qjsc -o hello_world1 ./hello_world1.js ./hello_world1支持模块语法的脚本需要加-m参数见 README.md 中的 Getting Started 章节。一个有趣的冷知识编译后的字节码程序速度并不比qjs解释执行快它的价值在于打包部署和代码保护。你还可以配合jscompress做代码压缩。深入一点QuickJS 的三大组成部分① 引擎核心quickjs.c quickjs.h这是嵌入部分。C 程序通过 quickjs.h 中的JSRuntime、JSContext、JSValue等类型创建运行时、执行脚本、与 JS 对象交互。值系统采用紧凑的标签编码JS_TAG_INT、JS_TAG_OBJECT等是它内存高效的关键。② 运行时支持库quickjs-libc.c提供std与os两个标准模块文件读写std.loadFile、环境变量、进程执行os.exec、多任务 Worker 等。这部分是可选的——纯嵌入式场景完全可以不带它体积更小。③ 开发与测试工具链qjs.c / qjsc.c —— 解释器与编译器主程序tests/ —— 单元测试集含 test_bignum.js、test_op.js 等run-test262.c —— Test262 官方标准测试套件运行器tests/microbench.js —— 微型性能基准测试值得一提的是标准合规度根据 TODO 文件记录Test262 测试仅有30/71748 个错误这个通过率在小体积引擎里相当能打。QuickJS 在 IoT 世界的典型应用场景这正是标题中悄悄征服的含义——在很多你看不见的地方QuickJS 已经在干活智能设备脚本层给硬件设备提供可热更新的 JS 配置脚本无需重新刷固件嵌入式应用热更新用qjsc预编译 压缩把几 KB 的 JS 逻辑下发到设备C 与 JS 混合开发性能关键路径用 C如 examples/fib.c业务逻辑用 JS通过 C 模块无缝桥接️轻量 CLI 工具与嵌入式 Web 后端比 Node.js 轻量几个数量级适合资源受限环境快速参考常用命令与文件路径操作说明./qjs script.js解释执行 JS 脚本./qjs --bignum script.js以 BigInt 模式执行./qjsc -o out script.js编译为字节码程序./qjsc -m -o out script.js编译支持 import 的 ES Module./qjsc -D out worker.js编译动态加载的模块或 Worker./qjs --unhandled-rejection s.js显示 Promise 未捕获异常已知限制来自 README.md暂不支持 Blob 与 Web WorkerPromise 异常默认静默。对于入门体验这些几乎无感。总结为什么新手值得学习 QuickJS代码可读性极高核心约 1 万行 C 代码是理解 JS 引擎内部原理解析、字节码、GC、值编码的最佳教材之一上手零门槛make一条命令5 分钟跑起第一个脚本实用价值大IoT 脚本层、嵌入式热更新、C/JS 桥接都是真实工业场景生态成熟MIT 许可、Test262 高通过率、持续维护最近变更见 Changelog如果你想深入 JS 引擎原理或者正在寻找一个能塞进智能设备的 JavaScript 运行时QuickJS 嵌入式 JavaScript 引擎就是那个小而美的答案。从 examples/ 目录的官方示例开始动手跑一遍hello.js→ 模块示例 → C 模块示例一个下午就能建立起完整的认知。【免费下载链接】QuickJSQuickJS is a small and embeddable Javascript engine. QuickJS sources are copyright Fabrice Bellard and Charlie Gordon.项目地址: https://gitcode.com/gh_mirrors/quick/QuickJS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表