#扩展 #语法 #优化 #was #重写 #js #ayzim

nightly ayzim-macros

用于ayzim的语法扩展

1个不稳定版本

使用旧的Rust 2015

0.1.0 2016年10月13日

#61#扩展


被用于 ayzim

MIT/NCSA

4KB
60

Ayzim

阿耶,兹姆!

Ayzim是Emscripten asm.js优化器(在此称为'Emopt')的Rust重写(从C++)。它应该是一个即插即用的替代品,尽管您可能会观察到一些细微的差异 - Ayzim在选择浮点表示方面略胜一筹,而Emopt至少有一种几乎微不足道的模式比Ayzim优化得更好。重写过程中修复了Emopt的一些错误(大部分已回滚)并清理了一些事情。与任何非平凡的重写一样,它可能有点错误,但庞大的Emscripten测试套件报告没有重大问题,因此应该是相当正确的。

Ayzim的内存消耗比Emopt少得多 - 我看到在运行不同的传递时,内存消耗减少了2倍到6倍(当内存使用量较大时,观察到更大的乘数减少)。鉴于Emopt在尝试一次性优化单个大型.js文件时可能会达到> 7GB的内存,减少6倍是非常有用的(并且请注意,Windows用户应该看到更多的改进,因为Emopt由于MSVC编译器中的一些缺失功能而受到影响)。Ayzim也碰巧更快一些 - ~25%在-O2(当使用registerize时)和~50%在-O3(当使用registerizeHarder时)。通常asm.js优化器不是整体构建中的主要因素(它可能是链接阶段的25%),所以这通常不是很令人兴奋。

重写ayzim的原始动机是为了在尝试优化(可能是)有史以来最大的asm.js文件(约700MB)时保持我的机器可用。如果允许它并行运行所有操作(它默认这样做),内存消耗最终会导致我的桌面环境交换,这很烦人。显然,正确的解决方案是重写Emopt而不是仅仅购买一台新机器 :)。

在emscripten邮件列表上的发布公告线程(其中我在回复中包含了一些技术细节):https://groups.google.com/d/msg/emscripten-discuss/pFTcf3lsL3M/W_pucD8MAwAJ

构建

目前主分支需要:rustup default nightly-2017-03-03

未来

  • 使其作为一个库更有用
  • WASM

无运行时依赖