繁体   English   中英

当asm.js比普通JS代码更快时,我为什么要在JS中编写新代码?

[英]When asm.js is faster than normal JS code, why should I write new code in JS?

Emscripten可以从C / C ++生成比用手写的JS代码更快的代码,这是否意味着我们应该用C / C ++编写新代码并编译它们以在Web上运行?

我阅读了Emscripten FAQ,它说“通过各种方式编写新的JavaScript代码。”,为什么会这样?

asm.js不是执行Javascript-esque代码的更快的方法。 这是一种更快的运行代码的方法,已经降低到机器代码的抽象级别。 你似乎大大高估了收益:

  • 如果你让JS开发人员编写C ++就好像它是JS一样,你最终会得到一些不像C ++那么快的代码,并且在其他方​​面也存在缺陷。
  • 许多潜在的瓶颈,例如DOM操作和网络延迟,完全不受代码运行速度的影响。
  • 对于许多程序而言,从更快的语言实现加速相比,高级优化的速度相形见绌。 换句话说,更快地完成工作很不错,但是根本不这样做会更快。

走这条路也有很大的缺点:

  • 你必须抛弃你的工作代码,然后用你所支持的大多数人都不会知道的语言重写它(包括错误),如果有的话。
  • 截至目前,该技术仍处于起步阶段。 你不会打赌你的公司,甚至是重要的产品。 即使它成功了,与JavaScript相比,它也将永远是一种利基技术。 这不会是资格的专业工作,但它会使很多事情更难。
  • IIUC,你不能直接做大多数事情JS可以做的超越数字,你只能调用JS函数显式提供给asm.js模块。 也就是说,你总是需要在Javascript中至少有一堆粘合代码,并且(如上所述)如果这包括你的瓶颈,你实际上并没有获得任何东西。

我期望从asm.js中获得足够多的代码是:

  • 现有代码尚未用JavaScript编写。 唯一的原因是为您节省了大部分移植麻烦。
  • 重数字运算没有与浏览器交互。 (想一想:你经常这样做吗?你真的想要用C / C ++编写它并用JS连接吗?)
  • 就其本质而言,在asm.js的抽象层面上支持的东西,例如发出机器代码 - esque指令的编译器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM