当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风格代码的更快方式。它是运行代码的一种更快的方式,这些代码已经被降低到机器代码的抽象级别。你似乎大大高估了收益:
- 如果你让JS开发者把c++写得像JS一样,你最终会得到丑陋的代码,它远不如c++那么快,而且在其他方面也有缺陷。 许多潜在的瓶颈,如DOM操作和网络延迟,根本不受代码运行速度的影响。
- 对于许多程序,更快的语言实现的速度与高级优化的速度相比相形见绌。换句话说,把工作做得快一点是好的,但什么都不做反而更快。
走这条路也有明显的缺点:
- 你必须抛弃你的工作代码,并重新编写它(包括bug)的语言,大多数你的团队几乎不知道,如果有的话。
- 截至目前,该技术仍处于起步阶段。你不会把你的公司,甚至是一个重要的产品押在上面。即使它成功了,与JavaScript相比,它也永远是一个小众技术。这并不会使它失去专业工作的资格,但它会使许多事情变得更加困难。你不能直接做JS能做的大部分事情,除了处理数字,你只能调用JS中显式提供给asm.js模块的函数。也就是说,在Javascript中至少需要一堆粘合代码,而且(如上所述)如果这包含了瓶颈,那么实际上您并没有获得任何东西。
我希望从asm.js中获得足够的代码类型是:
- 未在JavaScript中编写的现有代码。唯一的原因是为您节省了大部分移植麻烦。
- 大量的数字运算不与浏览器交互。(想想:你多久做一次这样的事?你真的想花时间用C/c++编写它,然后用JS连接吗?)
- 本质上属于asm.js支持的抽象级别的东西,比如编译器发出机器代码式指令。
相关文章:
- Meteor JS中代码的重复使用部分
- 骨干模型默认值-todos.js示例中不必要的代码
- 为什么indexOf在这个js代码中不起作用
- 点击facebook像素跟踪注册(JS/JQUERY代码)
- js代码从jQuery转换为原生代码
- JS代码中的减号
- 将JS函数传递给Emscripten生成的代码
- 谷歌地图Api和JS代码不工作
- HTML 5 和 3.js 代码不会在网页上显示任何内容
- Node.js:异步代码 + js 闭包的问题
- Chrome 开发者工具 - 控制台.log原生代码 JS
- 为jQuery和KNOCKOUT通用化javascript代码.js成为一个可重用的模块
- .ninnerHtml代码(JS/JQuery)无法识别html表中的动态内容
- 生成唯一的6位代码js
- 我得到了“;赋值中的左侧无效“;在我的代码(JS)中
- 更改代码(JS)中JQuery Mobile Calendar日期的状态
- 如何改进代码JS(Jquery)?一个简单的下拉列表
- 从传输中了解代码.js
- 这段代码(JS)的区别是什么?
- JavaScript倒计时计时器代码[JS]