有人对此进行了基准测试。让我们谈谈...
https://jsperf.com/single-raf-draw-calls-vs-multiple-raf-draw-calls
我查看了性能比较(你也应该这样做)。欢迎你不同意。这些是在画布元素上绘制图元。
function timeStamp() {
return window.performance && window.performance.now ? window.performance.now() : new Date().getTime();
}
function frame() {
drawCircle();
drawLines();
drawRect();
}
function render() {
if (timeStamp() >= (time || timeStamp())) {
time = timeStamp() + delayDraw;
frame();
}
requestAnimationFrame(render);
}
function render1() {
if (timeStamp() >= (time || timeStamp())) {
time = timeStamp() + delayDraw;
drawCircle();
}
requestAnimationFrame(render1);
}
function render2() {
if (timeStamp() >= (time || timeStamp())) {
time = timeStamp() + delayDraw;
drawRect();
}
requestAnimationFrame(render2);
}
function render3() {
if (timeStamp() >= (time || timeStamp())) {
time = timeStamp() + delayDraw;
drawLines();
}
requestAnimationFrame(render3);
}
我认为这段代码实际上是对 7 次 timestamp() 调用和 2 次 timestamp() 调用进行基准测试。看看 Chrome 46 和 47 的区别。
- Chrome 46: 12k / 秒(一次调用)vs 12k / 秒(3 次调用)
- Chrome 47: 270k /秒(一次调用)vs 810k /sec(3次调用)
我认为这是非常优化的,它没有任何区别。这只是在这一点上测量噪声。
我的收获是这不需要为我的应用程序手动优化。
如果您担心性能,请查看 Chrome 59 (1.8m ops/sec) 与 Chrome 71 (506k ops/sec) 之间的差异。