Warum ist setTimeout so nicht performant?Warum ist setTimeout so nicht performant
Ich habe 100 Aufgaben, die jeweils 1ms dauern sollten. Ich verschachtle sie mit requestAnimationFrame, die ungefähr 16ms sein sollte. Also würde ich erwarten, dass 14 bis 16 dieser Aufgaben für jede rAF ausgeführt werden. Stattdessen sehe ich 1-3 pro rAF.
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);
}
Werfen Sie einen Blick auf [Warum in diesem Fall native Versprechen scheint schneller als Callbacks in Chrome zu sein?] (Http://StackOverflow.com/a/22759890/1048572) – Bergi
Leider Versprechen gehen nicht durch die Ereigniswarteschlange so wenn ich verkettete Versprechen verwende, führt raf – gman
nicht aus Ja, aber probiere einige der anderen Techniken aus, die dort verlinkt sind, wie 'postMessage' oder' setImmediate' – Bergi