我目前正在开发一个图像编辑器,偶然发现了 V8 中关于像素操作和/或函数调用的这种奇怪行为。
http://jsperf.com/canvas-pixelwise-manipulation-performance
有两个测试用例。两个测试用例都应该操作内存中画布的图像数据以增加亮度。所以他们必须遍历每个像素并操作每个像素的 4 个颜色值。
情况1
案例 1 执行“总共 1 个函数调用”,这意味着它将上下文和 imageData 传递给一个函数,该函数然后迭代像素并操作数据。多合一功能
案例2
案例 2 执行“每个像素1 个函数调用”,这意味着它遍历像素并为每个像素调用一个方法,然后操作给定像素的 imageData。这导致(在这种情况下)250000 个额外的函数调用。
我的期望
我希望案例 1 比案例 2 快得多,因为案例 2 正在执行 250000 个额外的函数调用。
结果
在 Chrome 中,情况正好相反。如果我进行 250000 次额外的函数调用,它比处理所有图像操作的单个函数调用要快。