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

标签 javascript c++ c emscripten asm.js

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

我读了 Emscripten 常见问题解答,它说“一定要编写新的 JavaScript 代码。”,这是为什么呢?

最佳答案

asm.js 并不是执行 Javascript 类代码的更快方法。这是一种运行代码的更快方法,该代码已经被简化为机器代码的抽象级别。您似乎大大高估了 yield :

  • 如果您让 JS 开发人员将 C++ 当作 JS 来编写,您最终会得到错误代码,其速度远不如 C++ 快,并且在其他方​​面也存在缺陷。
  • 许多潜在的瓶颈,例如 DOM 操作和网络延迟,完全不受代码运行速度的影响。
  • 对于许多程序来说,更快的语言实现所带来的速度与高级优化所带来的速度相比相形见绌。换句话说,工作做得快一点很好,但根本不做会更快。

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

  • 您必须丢弃您的工作代码,并使用您团队中的大多数人几乎不了解的语言重新编写代码(包括错误)。
  • 截至目前,该技术仍处于起步阶段。你不会把你的公司,甚至是一个重要的产品押在上面。即使它成功了,与 JavaScript 相比,它也永远是一个小众技术。这不会取消它从事专业工作的资格,但会让很多事情变得更难。
  • IIUC,除了计算数字之外,你不能直接做大多数 JS 能做的事情,你只能调用显式提供给 asm.js 模块的 JS 函数。也就是说,您将始终至少需要一堆 Javascript 胶水代码,并且(如上所述)如果这包括您的瓶颈,那么您实际上并没有得到任何东西。

我希望从 asm.js 中获得足够使用的代码类型是:

  • 现有 尚未用 JavaScript 编写的代码。唯一的原因是为您省去大部分移植麻烦。
  • 不与浏览器交互的大量数字运算。 (想一想:你多久做一次?你真的想经历用 C/C++ 编写它并用 JS 连接它的努力吗?)
  • 本质上,asm.js 支持的抽象级别的东西,例如编译器发出机器代码式指令。

关于javascript - 当 asm.js 比普通 JS 代码更快时,我为什么要在 JS 中编写新代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16527195/

相关文章:

javascript - 调用成功处理程序后出现 AJAX 解析错误

javascript - backbone.js:从集合中删除后保留元素

c++ - 共享库 C++ Makefile

c++ - 返回不可变的新实例的正确方法是什么?

c - 段错误如何在内部(内核/硬件)工作?

javascript - 无法显示自定义对话框

javascript - 保存 Mongoose 数据时出错

c++ - system() 调用...打开 mybatchfiles.bat

c - 功能类似于宏花括号或 do..while

c - 传递 char* 作为参数会破坏程序,而 char[] 不会