Puerts项目中QuickJS后端模块实现的重构与优化
背景介绍
Puerts是一个将TypeScript/JavaScript与Unity/C++等原生环境桥接的技术框架,它支持多种JavaScript引擎后端。其中QuickJS作为一个轻量级的JavaScript引擎,在Puerts中有着重要应用。近期,Puerts项目团队对QuickJS后端的模块实现进行了重要重构,解决了原有实现中的一些关键问题。
原有实现的问题
在重构前的实现中,QuickJS后端的模块系统存在几个显著问题:
-
API混用问题:代码中同时混用了模拟V8 API和原生QuickJS API,这种混合使用方式不仅增加了代码复杂度,也使得维护变得困难。更严重的是,部分QuickJS API的使用方式存在理解偏差,可能导致潜在问题。
-
异常处理缺陷:直接调用QuickJS API产生的异常无法满足backend_quickjs的模拟需求。开发者不得不通过一些特殊逻辑来强行耦合backend_quickjs的异常实现,这种临时解决方案虽然能让单元测试通过,但却带来了严重的耦合问题——当backend_quickjs发生变动时,这部分代码就会失效。
重构方案
针对上述问题,开发团队提出了清晰的重构思路:
-
分离API实现:将原生的ExecuteModule实现完全分离,不再混用V8 API和QuickJS API。而是按照各自的回调形式分别实现两个版本,并注册到全局变量中。
-
统一调用接口:GetModuleExecutor从全局变量获取执行器,无论ExecuteModule是用哪种API实现,对其调用都相当于调用一个JavaScript函数,实现了接口的统一。
-
纯QuickJS实现:QuickJS后端的ExecuteModule完全采用QuickJS原生API的写法,消除了API混用带来的问题。
技术细节优化
在重构过程中,团队还纠正了对QuickJS API的一些误解,并进行了重要优化:
-
模块加载器初始化:明确了JS_SetModuleLoaderFunc只需要调用一次即可,避免了不必要的重复初始化。
-
模块规范化处理:认识到module_normalize参数不允许抛出JS异常这一重要限制。这意味着在module_normalize中产生的错误信息无法直接传递到module_loader。
-
异常处理改进:通过在LoadModule中使用JS_GetException判断是否在module_normalize中抛出了异常,实现了异常的重抛机制,从而在module_normalize中支持了异常处理。
重构效果
这次重构带来了多方面的改进:
-
代码清晰度提升:消除了API混用现象,代码结构更加清晰,维护成本显著降低。
-
稳定性增强:正确处理了QuickJS的异常机制,避免了之前因异常处理不当导致的潜在问题。
-
兼容性改善:解除了与backend_quickjs的强耦合,使得后端变动时模块系统仍能正常工作。
-
性能优化:通过正确的API使用方式和避免重复初始化,提升了模块加载的效率。
总结
Puerts项目对QuickJS后端模块系统的重构是一个典型的工程优化案例,它展示了如何通过深入理解底层API的特性和限制,来解决复杂的工程问题。这次重构不仅解决了眼前的技术债务,也为未来的功能扩展和维护奠定了更好的基础。对于使用Puerts框架的开发者来说,这意味着更稳定、更高效的模块系统体验。
- DDeepSeek-V3.1-BaseDeepSeek-V3.1 是一款支持思考模式与非思考模式的混合模型Python00
- QQwen-Image-Edit基于200亿参数Qwen-Image构建,Qwen-Image-Edit实现精准文本渲染与图像编辑,融合语义与外观控制能力Jinja00
GitCode-文心大模型-智源研究院AI应用开发大赛
GitCode&文心大模型&智源研究院强强联合,发起的AI应用开发大赛;总奖池8W,单人最高可得价值3W奖励。快来参加吧~042CommonUtilLibrary
快速开发工具类收集,史上最全的开发工具类,欢迎Follow、Fork、StarJava04GitCode百大开源项目
GitCode百大计划旨在表彰GitCode平台上积极推动项目社区化,拥有广泛影响力的G-Star项目,入选项目不仅代表了GitCode开源生态的蓬勃发展,也反映了当下开源行业的发展趋势。06GOT-OCR-2.0-hf
阶跃星辰StepFun推出的GOT-OCR-2.0-hf是一款强大的多语言OCR开源模型,支持从普通文档到复杂场景的文字识别。它能精准处理表格、图表、数学公式、几何图形甚至乐谱等特殊内容,输出结果可通过第三方工具渲染成多种格式。模型支持1024×1024高分辨率输入,具备多页批量处理、动态分块识别和交互式区域选择等创新功能,用户可通过坐标或颜色指定识别区域。基于Apache 2.0协议开源,提供Hugging Face演示和完整代码,适用于学术研究到工业应用的广泛场景,为OCR领域带来突破性解决方案。00openHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!C0299- WWan2.2-S2V-14B【Wan2.2 全新发布|更强画质,更快生成】新一代视频生成模型 Wan2.2,创新采用MoE架构,实现电影级美学与复杂运动控制,支持720P高清文本/图像生成视频,消费级显卡即可流畅运行,性能达业界领先水平Python00
- GGLM-4.5-AirGLM-4.5 系列模型是专为智能体设计的基础模型。GLM-4.5拥有 3550 亿总参数量,其中 320 亿活跃参数;GLM-4.5-Air采用更紧凑的设计,拥有 1060 亿总参数量,其中 120 亿活跃参数。GLM-4.5模型统一了推理、编码和智能体能力,以满足智能体应用的复杂需求Jinja00
Yi-Coder
Yi Coder 编程模型,小而强大的编程助手HTML013
热门内容推荐
最新内容推荐
项目优选









