W Chrome, jeśli użytkownik przewija wszystkie XHR, a setTimeouts będzie opóźnione, aż przewijanie się zatrzyma i potrzebuję obejścia tego problemu. Zachowanie jest opisane w this blog post. Chociaż ta funkcja pomaga w przewijaniu na urządzeniach mobilnych, jest katastrofalna w przypadku nieskończonego przewijania, co staram się robić.XHR/setTimeout/Obietnica nie kończy się, dopóki przewijanie nie zatrzyma się w Chrome.
dowody, że tak się dzieje:
Wszystkie inne przeglądarki działają bez zarzutu, Chrome pokazuje pusty ekran, dopóki użytkownik nie przestanie się przesuwać.
Panel sieci wyświetli wszystkie żądania jako
pending
, dopóki przewijanie się nie zakończy, a następnie wszystkie zostaną natychmiast zakończone.Umieść to w urywku, uruchom, a następnie natychmiast rozpocznij przewijanie. Funkcja setTimeout nie zostanie wywołana, dopóki nie zakończy się przewijanie.
var p = new Promise(function (resolve) {
setTimeout(function() {
console.log('resolving');
resolve();
}, 1000)
});
p.then(function() {
console.log('DONE!!');
})
Czy używając 'requestAnimationFrame()' 'zamiast setTimeout()' zdarzyć, aby pomóc? W poście na blogu wyraźnie widać, że Chrome priorytetowo traktuje animację i zadania związane z GPU, dzięki czemu użytkownik nie odczuwa (co robi). – arthurakay
Tak, to prawda! Jednak to nie pomaga XHRs, co ma znaczenie dla nieskończonego przewijania. – sakabako
Mam dokładnie ten problem, chciałbym uzyskać odpowiedź. Założyłem dla ciebie nagrodę. –