Facebook 开源 Hermes JavaScript 引擎

Facebook 开源轻量级 JavaScript 引擎 爱马仕,针对运行基于该框架的应用程序进行了优化 反应本机 在Android平台上。 爱马仕支持 内置 从今天的 0.60.2 版本开始,在 React Native 中。 该项目旨在解决原生JavaScript应用启动时间长、资源消耗大的问题。 代码 写的 用 C++ 编写并根据 MIT 许可证分发。

使用 Hermes 的优点包括减少应用程序启动时间、减少内存消耗以及减小应用程序大小。 使用 V8 时,最耗时的阶段是解析源代码并动态编译的阶段。 Hermes 将这些步骤引入构建阶段,并允许以紧凑且高效的字节码形式交付应用程序。

为了直接执行应用程序,项目中开发的虚拟机与 SemiSpace 垃圾收集器一起使用,该收集器仅根据需要(按需)分配块,支持块的移动和碎片整理,将释放的内存返回给操作系统,而无需定期扫描整个堆的内容。

JavaScript 处理分为几个阶段。 首先,解析源文本并生成代码的中间表示(赫尔墨斯红外),基于表示 公共福利金 (静态单一分配)。 接下来,中间表示在优化器中进行处理,优化器应用前向静态优化技术将主要中间代码转换为更有效的中间表示,同时保留程序的原始语义。 在最后阶段,生成已注册虚拟机的字节码。

在发动机中 由...支持 ECMAScript 2015 JavaScript 标准的一部分(最终目标是完全支持它),并提供与大多数现有 React Native 应用程序的兼容性。 Hermes 决定不支持 eval()、语句、反射(Reflect 和 Proxy)、Intl API 和 RegExp 中的一些标志的本地执行。 要在 React Native 应用程序中启用 Hermes,只需将“enableHermes: true”选项添加到项目中即可。 还可以在 CLI 模式下构建 Hermes,允许您从命令行执行任意 JavaScript 文件。 延迟编译模式可用于调试,允许您在开发过程中不必每次都编译 JavaScript,而是动态生成设备上已有的字节码。

与此同时,Facebook 并不打算将 Hermes 应用于 Node.js 和其他解决方案,只专注于移动应用程序(在 RAM 有限且 Flash 速度较慢的移动系统环境中,AOT 编译而不是 JIT 是最佳选择)。 由微软员工进行的初步性能测试 透露使用 Hermes 时,Android 版 Microsoft Office 应用程序在 1.1 秒内即可使用。 启动后消耗21.5MB RAM,而使用V8引擎时启动时间为1.4秒,消耗内存30MB。

添加:脸书 发表 自己的测试结果。 当 Hermes 与 MatterMost 应用程序结合使用时,启动工作时间(TTI,交互时间)从 4.30 秒减少到 2.01 秒,APK 包大小从 41 MB 减少到 22 MB,内存消耗从 185 减少到 136 MB。

来源: opennet.ru

添加评论