【发布时间】:2013-06-27 12:56:12
【问题描述】:
我目前正在开发一个图像编辑器,偶然发现了这种关于 V8 中像素操作和/或函数调用的奇怪行为。
http://jsperf.com/canvas-pixelwise-manipulation-performance
有两个测试用例。两个测试用例都应该处理内存中画布的图像数据以增加亮度。所以他们必须遍历每个像素并操作每个像素的 4 个颜色值。
案例一
案例 1 执行“总共 1 个函数调用”,这意味着它将上下文和 imageData 传递给一个函数,该函数然后迭代像素并操作数据。多合一功能
案例2
案例 2 执行“1 个函数调用 per pixel”,这意味着它遍历像素并为每个像素调用一个方法,然后操作给定像素的 imageData。这会导致(在这种情况下)250000 个额外的函数调用。
我的期望
我希望案例 1 比案例 2 快得多,因为案例 2 执行了 250000 次额外的函数调用。
结果
在 Chrome 中,情况正好相反。如果我执行 250000 个额外的函数调用,它比一个处理所有图像操作的单个函数调用要快。
我的问题:为什么?
【问题讨论】:
-
V8 将为案例 2 内联您的函数。我认为函数内联的类型推断更严格,因此可以将这段代码“重写”为高性能整数运算。
标签: javascript performance v8