为什么setTimeout如此不具有性能
Why is setTimeout so non-performant
为什么setTimeout如此不具有性能?
我有100个任务,每个任务需要1毫秒。我将它们与requestAnimationFrame交织在一起,后者应该在16ms左右。因此,我希望每个rAF都能执行14-16个这样的任务。相反,我看到每个rAF有1-3个。
var count = 0;
var limit = 100;
function doSomething1ms() {
var start = performance.now();
while (performance.now() - start < 1);
log("finished: " + count);
if (++count < limit) {
setTimeout(doSomething1ms, 0);
}
}
doSomething1ms();
var rafCount = 100;
function raf() {
log("raf");
--rafCount;
if (rafCount) {
requestAnimationFrame(raf);
}
};
requestAnimationFrame(raf);
log("start------------------------");
function log(msg) {
var div = document.createElement('div');
div.appendChild(document.createTextNode(msg));
document.body.appendChild(div);
}
基于bergi的评论和链接,setTimeout的限制为4ms
使用postMessage,我每个rAF可以得到7-10个调用,虽然还差16个,但效果更好。
var count = 0;
var limit = 100;
function doSomething1ms() {
var start = performance.now();
while (performance.now() - start < 1);
log("finished: " + count);
queueNext();
}
window.addEventListener('message', doSomething1ms);
function queueNext() {
if (++count < limit) {
window.postMessage({}, "*", []);
}
}
queueNext();
var rafCount = 100;
function raf() {
log("raf");
--rafCount;
if (rafCount) {
requestAnimationFrame(raf);
}
};
requestAnimationFrame(raf);
log("start------------------------");
function log(msg) {
var div = document.createElement('div');
div.appendChild(document.createTextNode(msg));
document.body.appendChild(div);
}
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 提高JQuery的性能
- setInteval vs setTimeout
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 使用正则表达式评估电子邮件地址时出现性能问题
- React:按键的性能提升
- 在Three.js中导出网格会提高性能吗
- 在javascript中搜索项目列表的性能
- setTimeout可以与闭包内的函数一起使用吗
- Javascript setTimeout for an array
- 为什么在许多浏览器中drawImage()的性能略好于createPattern()
- 刷新后,setTimeout将工作或不工作
- JavaScript数组优化以提高性能
- 继续使用javascript中的setTimeout
- React+Redux性能优化与组件ShouldUpdate
- 为什么setTimeout如此不具有性能
- Javascript setTimeout性能与手动检查
- 嵌套setTimeout的性能
- 大setTimeout时间对性能的影响
- 节点setTimeout性能