Ho incontrato uno strano problema in Firefox 12. setTimeout() non sembra attendere sempre la lunghezza appropriata. O forse sono i millisecondi della data che non fanno jive?Firefox richiama la funzione setTimeout troppo presto (o Date.getTime() è disattivato?)
Check out this fiddle. In sostanza, un setTimeout di 100 ms sembra funzionare ovunque tra 80 ms e 110 ms. Più posso capire, basato su John Resig's explanation of timers. Ma meno?
Potrebbe essere necessario aggiornarlo una o due volte per vedere il problema, poiché a volte funziona correttamente alla prima esecuzione. Sembra funzionare spifftacular in IE e Chrome.
Ecco il codice che sto utilizzando nel mio violino:
var txt = '',
TIMEOUT_LENGTH = 100,
_now;
now = Date.now || function() { return new Date().getTime() };
function log(time) {
c = time < 100? 'class="error"' : '';
$('#log').append('<p '+c+'>waited ' + time + '</p>');
}
function defer() {
var d = $.Deferred(),
start = now();
setTimeout(function() {
d.resolve(now() - start);
}, TIMEOUT_LENGTH);
return d.promise();
}
for (var i = 0; i < 20; i++) {
defer().then(log);
}
Ecco un esempio di output eccentrico:
Ecco le mie informazioni del browser:
E grazie così muc h per aver letto la mia domanda! Spero che qualcuno possa far luce su questo.
INFO
ho lavorato tutto il problema utilizzando setInterval() e controllando ogni incremento per vedere se il tempo richiesto è passato. See this fiddle.
Tuttavia, sono ancora molto interessati a sentire se qualcuno può far luce nella fonte del problema
Posso confermare questo comportamento in Firefox 12 su OS X 10.7. Safari fornisce ovunque tra 100 e 105 per me, Firefox 12 80s-110s per la prima esecuzione, le esecuzioni successive erano ... 95-105. – Aaron
Felice di sentire che non sono solo io :) – Kato
Quindi questo è tutto ciò che otteniamo allora. Forse aprirò un bug su mozilla solo per vedere cosa dicono :) – Kato