语言运行时编译器移动开发【免费下载链接】hermesA JavaScript engine optimized for running React Native.项目地址https://gitcode.com/gh_mirrors/hermes/hermes点击查看免费下载本文基于 Hermes 官方博客 2024 年 11 月 9 日的技术报告doc/blog/2024-11-09-octane-benchmark-jit-progress.md完整解读 Hermes 团队对非类型化untyped / legacyJavaScript的性能优化进展。文章以 Octane 基准测试为主线对比原版 Hermes、static_h 分支、static_h JIT 与参考引擎 QuickJS 在树莓派平台上的实测表现并结合当前仓库的 JIT 源码与后续博客数据帮助读者理解 Hermes JIT 的当前能力、测量方法与底层实现脉络。背景typed JS 之外的另一条战线Static Hermesstatic_h 分支的核心目标是让类型化 JavaScript达到接近原生的性能。但现实世界的 JavaScript 代码大量是非类型化的——未标注类型、未经过 Flow/TypeScript 注解的 legacy 代码在 React Native 生态中依然广泛存在。Hermes 团队在推进 typed JS 的同时并行投入了大量精力提升 untyped JS 的性能这篇 Octane 报告正是这条战线的进度快照。正如后续博客 Static Hermes Update, December 2024 所总结的尽管 Static Hermes 的首要目标是 typed JavaScript 的原生级性能但团队认识到大量 untyped 代码也必须被正确且高效地执行。而 Hermes Compilation and Runtime Modes 进一步说明Hermes 的编译/运行模式可以混合共存于同一运行时AOT 编译为字节码、AOT 编译为原生代码、字节码解释器、首次调用时的懒编译源码到字节码以及对高频执行函数做 Baseline JIT字节码到原生——本篇报告的 JIT 正是其中的 Baseline JIT。测试设计四种引擎配置、两个硬件平台本次基准测试的方法学设计如下维度配置被测引擎原版 Hermesmain 分支、static_h 分支解释器、static_h JIT、static_h 强制 JIT图例中标注为SH -Xforce-jit参考引擎QuickJS作为性能参考基线硬件平台Raspberry Pi 3 与 Raspberry Pi 5覆盖较大跨度的性能区间代码形态全部为 untyped、unannotated JS不使用 native backend即不走类型化 AOT 原生代码路径基准套件Octane分数越高越好一个重要的测试口径调整是TypeScript 基准被移除了原因是其分数过高会压扁图表中其他基准的对比效果。同时Octane 基准套件在仓库中的组织方式见 benchmarks/octane/README.md每个基准文件都被整理为单个完整可执行的文件并在文件末尾调用BenchmarkSuite.RunSuites触发运行其中gbemu.js合并了 part1/part2typescript.js合并了编译器与输入zlib.js则把原本通过eval()包裹的字符串体改写为print()直出后经 prettier 格式化。结果解读Raspberry Pi 3 与 Pi 5原报告提供了两张实测图表分别对应 Raspberry Pi 3 与 Pi 5。两张图横轴均为 Octane 的各单项基准Mandelbrot、Richards、DeltaBlue、Crypto、RayTrace、EarleyBoyer、Splay、NavierStokes、PdfJS、Mandreel、Gameboy、Box2D、zlib 等纵轴为 Octane 分数图例以不同颜色区分 QuickJS、Hermes、SH branch、SH -Xforce-jit 四种配置。从两张图表可以观察到横向对比在多数单项基准中开启 JIT 的 static_h 配置相对于原版 Hermes 均有明显提升部分高负载场景如 Gameboy、Box2D、Mandreel提升幅度尤为突出硬件差异Raspberry Pi 5 的整体分数显著高于 Pi 3可达数倍至十倍以上说明引擎优化与硬件算力在此类纯计算负载上是叠加生效的参考基线QuickJS 作为高质量、小体积且规范合规的参考实现见 2025-07-15-static-h-performance-june-2025.md 对 QuickJS 定位的说明在部分场景中仍保持领先这为 Hermes 的后续优化提供了明确的追赶目标。需要强调的是原文档明确指出Octane 在现代已不具备代表性但如果我们在更重要的场景上表现优秀而在 Octane 上表现糟糕那也是不可接受的——Octane 被当作性能下限的守门基准而非终极目标。纵深数据static_h 相对主分支的逐项提升倍数在同一主题的后续报告中Static Hermes Update, December 2024团队给出了 static_h 分支相对主 Hermes 分支的 Octane 提升倍数times x1 表示更快。Normal 列为解释器模式JIT 列为开启 JIT 后的结果最后三个基准是团队自加的定制项用于突出展示 JIT 在类型信息可用时的爆发力BenchmarkNormalJITRichards1.241.78DeltaBlue1.291.86Crypto1.341.91RayTrace1.722.07EarleyBoyer1.491.71RegExp1.201.20Splay1.221.33SplayLatency1.091.15NavierStokes1.501.87PdfJS1.681.78Mandreel1.381.69MandreelLatency1.361.42Gameboy1.361.68Box2D1.411.93zlib1.652.04Typescript1.281.46InterpDispatch1.662.97InterpDispatch21.587.90Mandelbrot1.253.29这份表格揭示了两个关键信息解释器本身也在进步绝大多数基准在纯解释器模式下就有 1.2x~1.7x 的提升这来自 static_h 分支对 untyped JS 的解释执行优化JIT 的放大效应取决于类型信息在 InterpDispatch27.90x与 Mandelbrot3.29x中编译器能够静态推断出大量类型JIT 因此获得数量级的加速。报告明确指出配合 typed JavaScript 时这些数字预计还会进一步攀升——这印证了 typed JS 与 untyped 优化是相辅相成的两条主线。源码侧支撑当前仓库中的 JIT 实现脉络报告中的 JIT 能力在当前仓库中可以看到完整的实现痕迹。JIT 的核心代码位于 lib/VM/JIT/顶层基础设施DiscoverBB.cpp基本块发现用于识别可 JIT 的函数控制流、RuntimeOffsets.h运行时对象字段偏移表、PerfJitDump.cpp配合 perf 的 JIT 符号转储用于性能分析arm64 后端lib/VM/JIT/arm64/ 是目前仓库中唯一的指令集后端包含JIT.cpp主控文件与一组按指令类别划分的发射器JitEmitter-alloc.cpp寄存器分配、JitEmitter-arith.cpp算术、JitEmitter-array.cpp数组、JitEmitter-call.cpp调用、JitEmitter-const.cpp常量、JitEmitter-control.cpp控制流、JitEmitter-env.cpp环境/闭包、JitEmitter-object.cpp对象、JitEmitter-property.cpp属性访问、JitEmitter-regalloc.cpp寄存器分配等以及JitHandlers.cpp/hJIT 处理函数入口。从源码结构可以推断这是一套面向 arm64 的字节码到原生代码的 Baseline JIT通过把解释器的热点函数按基本块切分DiscoverBB并逐类发射原生指令配合显式的寄存器分配regalloc与运行时字段偏移RuntimeOffsets来保证生成代码与 GC/解释器布局一致。这与 Hermes Compilation and Runtime Modes 描述的 Baseline JITbytecode to nativeof frequently executed functions 完全对应——即 JIT 只针对被频繁执行的函数触发与字节码解释器共存于同一运行时。此外仓库的 test/jit/ 目录下有 46 个 JS 测试文件用于验证 JIT 路径的行为正确性由于 JIT 是运行时后端的组成部分其测试同样依赖test/lit.cfg定义的标准测试运行框架。在仓库中复现与深入若想亲身体验 Octane 基准测试仓库已在 benchmarks/octane/ 内置了整套可独立执行的基准文件box2d.js、crypto.js、deltablue.js、earley-boyer.js、gbemu.js、mandreel.js、navier-stokes.js、pdfjs.js、raytrace.js、regexp.js、richards.js、splay.js、typescript.js、zlib.js 等并在 benchmarks/octane/README.md 中说明了这些文件的整理方式——它们来自 Octane 的 fork被修改为单文件可执行形态便于直接灌入 Hermes 的编译器/运行时进行测试。Octane 之外仓库还提供了更贴近现代工作负载的基准体系宏基准与微基准位于 agent-perf/benchmarks/配套的自动化测试位于 agent-perf/tests/关于 static_h 分支在 2025 年 6 月底相对 QuickJS 的最新性能形态hv32jit 与 hv32interpreter 两种配置可参阅 Static_h Branch Performance: June 2025 Update其中 hv32 表示运行时采用压缩指针并对超出 32 位标签的数值做堆内 boxed double详见 Hermes Memory Modes。结论与局限这篇 2024 年 11 月的报告是 Hermes JIT 路线图中的一个里程碑快照在纯 untyped、无注解的 JavaScript 上static_h JIT 相对原版 Hermes 在 Octane 全量基准上取得了普遍且显著的提升且提升幅度随可静态推断的类型信息增多而放大QuickJS 则提供了持续可比的参考基线。同时必须清醒认识其局限Octane 并非现代代表性负载报告中亦直言 Octane is not representative these days它衡量的是引擎性能的地板而非天花板。对 Hermes 而言JIT 的真正价值在于与 typed JS 协同——当类型信息充足时如 InterpDispatch2 的 7.90x 所示JIT 才能发挥最大威力。从该报告到 2025 年 6 月的 hv32jit 数据doc/blog/2025-07-15-static-h-performance-june-2025.md可以看到这条主线仍在持续推进。赞分享语言运行时编译器移动开发【免费下载链接】hermesA JavaScript engine optimized for running React Native.项目地址https://gitcode.com/gh_mirrors/hermes/hermes点击查看免费下载相关推荐从零到精通Hugging Face深度强化学习实战全攻略从零到精通Hugging Face深度强化学习实战全攻略 你是否曾经看着那些炫酷的AI游戏玩家想象着自己也能训练出如此智能的代理或者你是否在复杂的强化学习强化学习深度学习教程基于图像识别技术的鸣潮自动化工具完整配置指南基于图像识别技术的鸣潮自动化工具完整配置指南 鸣潮自动化工具ok ww是一款基于Python开发的游戏辅助工具采用图像识别技术实现后台自动化操作。该项目通GUI 自动化计算机视觉RPA人工智能终极性能对比RPiPlay在树莓派Zero到4B上的全面基准测试指南终极性能对比RPiPlay在树莓派Zero到4B上的全面基准测试指南 RPiPlay是一款开源的AirPlay镜像服务器专为树莓派设计支持iOS 9及以上音视频后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Flask绩效管理系统源码解析:40文件分层架构与二次开发实战 简介:这是一套基于Python与Flask框架开发的绩效管理系统设计源码,面向希望学习企业级Web开发实践的学生、开发者,以及需要快速搭建绩效管理平台的中小团队。系统围绕员工绩效考核、项目测试与月度报表等业务场景,将数据访问、业务… · 2026/9/23 22:48:41
nuqs 工程质量与调试指南:性能、可靠性、安全性与反模式治理的完整规范 前端状态管理 【免费下载链接】next-usequerystate Type-safe search params state manager for React frameworks - Like useState, but stored in the URL query string. 项目地址: https://gitcode.com/gh_mirrors/ne/next-usequerystate 点击查看 免费下载 本文… · 2026/9/23 22:48:41
中文法律大模型微调实战:从词表扩展到LoRA训练全流程 简介:这份资源面向希望将大语言模型落地到中文法律场景的开发者与算法学习者,围绕法律问答、法条理解与指令微调等任务,提供了一套可复现的工程实践材料。包内共42个文件,以Python脚本、JSON配置与数据、Shell运行脚本为主&#x… · 2026/9/23 23:24:05
wired-elements 版本演进全解:从 1.0 到 3.0 的手绘风 Web Components 技术脉络 UI组件前端 【免费下载链接】wired-elements Collection of custom elements that appear hand drawn. Great for wireframes or a fun look. 项目地址: https://gitcode.com/gh_mirrors/wi/wired-elements 点击查看 免费下载 导读
wired-elements 是一个以"… · 2026/9/23 23:24:05
纺锤线与风高浪大线:从形态到实战的K线分歧信号识别 做股票交易的人,几乎都会在某一刻盯着一根K线发呆——实体小到几乎看不见,上下影线却长得像天线,多空双方激烈交手一整天,收盘价却回到开盘价附近。这根线,老交易员叫它纺锤线;如果当天振幅再大一些&#x… · 2026/9/23 23:24:05
AWS SaaS 架构实战:多租户模型选型与租户隔离落地指南 简介:这份PPT资料面向正在或计划将传统软件转型为SaaS模式的独立软件供应商架构师、技术负责人与云计算从业者,系统梳理了基于AWS构建SaaS平台的整体架构思路与关键技术选型。内容围绕身份管理、多租户隔离、应用分层隔离、管理监控、测量计费、业务敏捷… · 2026/9/23 23:23:59
SAP TM运输模块详解:从架构配置到费用结算的实践指南 简介:SAP-TM运输模块详解是一份面向SAP实施顾问、SD/物流模块顾问及后勤执行环节业务人员的PDF手册。文档围绕TM作为SD子模块的定位,系统拆解了自动计算交货成本的两大核心任务:创建运输单与计算交货成本,并覆盖从后台配置到前台操… · 2026/9/23 23:23:59
mRemoteNG 端口扫描(Port Scan)完全指南:网段探测、协议识别与批量导入连接 桌面应用网络 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_mirrors/mr/mRemoteNG 点击查看 免费下载 mRemoteNG 内置的 Port S… · 2026/9/23 23:23:52
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29