Mam dość długą działającą (3 do 10 sekund) funkcję, która ładuje dane w tle dla dość rzadko używanych części strony. Mam pytanie, jaki jest optymalny czas działania na wykonanie i czas opóźnienia, aby upewnić się, że reszta strony pozostaje dość interaktywna, ale ładowanie danych nie jest nadmiernie opóźnione przez zerwanie?Ile należy podzielić długo działającą funkcję dla interfejsu użytkownika?
Na przykład:
var i = 0;
var chunkSize = 10;
var timeout = 1;
var data; //some array
var bigFunction = function() {
var nextStop = chunkSize + i; //find next stop
if (nextStop > data.length) { nextStop = data.length }
for (; i < nextStop; i++) {
doSomethingWithData(data[i]);
}
if (i == data.length) { setTimeout(finalizingFunction, timeout); }
else { setTimeout(bigFunction , timeoutLengthInMs); }
};
bigFunction(); //start it all off
Teraz zrobiłem kilka testów, a chunkSize
że daje czas 100ms o wykonanie i 1ms timeout
wydawać uzyskując dość czułe UI, ale niektóre przykłady I” Widziane z góry zalecają znacznie większe porcje (~ 300ms) i dłuższe limity czasu (20 do 100 ms). Czy brakuje mi pewnych niebezpieczeństw w przecinaniu mojej funkcji w zbyt wiele małych kawałków, czy też próba i błąd to bezpieczny sposób na określenie tych liczb?
Zdajesz sobie sprawę, że będąc JavaScript (po stronie klienta), procesora, pamięci, połączenie sieciowe itp. czynników maszyny w znacznym stopniu. –
@Jason McCreary, oczywiście. Właśnie dlatego zadaję to pytanie i nie zakładam, że moja metoda prób i błędów w ustalaniu tych liczb jest bezpieczna. – jball