Facebook已开放了轻量级Hermes JavaScript引擎的源代码, 针对在Android平台上运行基于React Native框架的应用程序进行了优化。
Facebook软件工程师 Marc Horowitz在俄勒冈州波特兰举行的2019 Chain React会议上揭示了新的JavaScript引擎。 Hermes是一个新的开发人员工具,致力于以Facebook已经为其应用程序所做的相同方式来提高应用程序的启动性能,并使应用程序在入门级智能手机上更有效。
关于爱马仕
从今天的0.60.2版本开始,Hermes支持已内置在React Native中。 该项目因解决了本机JavaScript应用程序启动时间长和资源消耗大的问题而得到认可。 该代码是用C ++编写的,并根据MIT许可进行分发。
使用爱马仕的优点中,减少了应用程序的启动时间,减少了内存消耗,减小了应用程序的大小。
加速应用 发射 通过在字节码中使用预编译来实现 在编译阶段紧凑高效。
为了直接运行该应用程序,将虚拟机与作为项目一部分开发的SemiSpace垃圾收集器一起使用。 使用V8,最长的步骤是解析源代码并即时对其进行编译。
Hermes引擎将这些阶段带到了编译阶段,并可以以优化的字节码形式交付应用程序。
JavaScript处理分为几个阶段。 最初,将基于SSA表示(静态唯一分配)来解析源代码并生成中间代码表示(Hermes IR)。
此外,中间表示在优化器中进行处理,该优化器使用主动静态优化技术将主要中间代码转换为更有效的中间表示,同时保留原始程序的语义。
最终,在最后一个阶段中,将生成已注册虚拟机的字节码。
在演示中,马克·霍洛维茨(Marc Horowitz)展示了使用爱马仕(Hermes)的React Native应用程序 与未安装Hermes的相同应用程序相比,它的完全加载速度快约两秒钟。
马克·霍洛维茨(Marc Horowitz)确保爱马仕(Hermes)也减小了APK的大小 到React Native存储应用程序41MB的中间位置,并消除了该应用程序四分之一的内存使用量。
换句话说,借助爱马仕,开发人员可以使用户与障碍更少的应用程序更快地进行交互,例如下载速度慢以及由于多个应用程序共享有限的内存资源而造成的限制,例如:特别是在水平电话输入上。
该引擎支持ECMAScript 2015 JavaScript标准的一部分(最终目标是完全支持),并且与大多数现有的React Native应用程序兼容。 在Hermes中,决定不支持对eval(),“ with”表达式,反射(Reflect和Proxy),Intl API API和RegExp中的某些标志进行局部转换。
要在React Native应用程序中启用Hermes,只需将“ enableHermes:true”选项添加到项目中。 也可以在CLI界面模式下编译Hermes,这使您可以从命令行执行任意JavaScript文件。
与此同时, Facebook不打算将Hermes改用于Node.js和其他解决方案,而只专注于移动应用程序 (在基于React Native的移动应用程序的上下文中,编译AOT而不是JIT更为理想)。
微软进行了初步性能测试,结果表明,使用爱马仕(Hermes)时,Microsoft Office for Android应用程序可以在1.1秒内正常工作。
启动后,它将消耗21.5MB的RAM,而使用V8引擎时,启动将花费1.4秒,而内存消耗为30MB。