Apple的WebKit浏览器引擎JavaScript引擎JavaScriptCore已升级为新的字节码格式,从而提高了内存效率和类型安全性。
这种格式的目标在6月21日的公告中进行了详细介绍 ,目的是减少内存消耗并允许字节码缓存在磁盘上。 WebKit团队声称,新格式平均使用的内存减少了50%,这意味着Facebook或Reddit等JavaScript繁多的网站的内存使用量总体减少了10%。
新格式引用了两项重大更改:
- 不再有用于执行的单独的链接编码。 这意味着字节码不再是直接线程化的,因为指令的地址无法存储到磁盘,因为它随每次程序调用而改变。
- 为了使单一格式既适合存储又适合执行,可以将指令编码为窄或宽。 使用窄指令,操作码和操作数各自占用一个字节。 一条宽指令由一个特殊的单字节操作码
op_wide
,后跟一系列用于原始操作码及其参数的四个字节的插槽。
新的字节码还具有元数据表。 链接时,将使用与给定指令关联的所有可写数据初始化边表。 此外,通过改进与字节码相关的基础结构,提高了类型安全性。 WebKit存储库中正在开发用于新字节码的缓存API。 开发人员可以在bugs.webkit.org上做出贡献。
参与该项目的开发人员试图解决旧字节码格式的两个主要问题。 首先,它使用了太多的内存,其次,它包含了可写的指令流,从而阻止了内存映射字节码流。 旧的字节码格式还具有不再有用的优化,例如直接线程化 。
新的字节码格式在iOS 12.1和MacOS 10.14.4随附的Safari 12.1浏览器以及Safari技术预览版中可用。 您可以从webkit.org 下载Safari技术预览 版 。
From: https://www.infoworld.com/article/3405156/webkit-upgrade-improves-memory-usage.html