Wie weit zu unterteilen Long-Run-Funktion für reaktionsfähige Benutzeroberfläche?

8

Ich habe eine ziemlich lange laufende (3 bis 10 Sekunden) Funktion, die Daten im Hintergrund für einen ziemlich selten verwendeten Teil der Seite lädt. Die Frage, die ich habe, ist, was ist die optimale Laufzeit pro Ausführung und Verzögerungszeit zwischen, um sicherzustellen, dass der Rest der Seite ziemlich interaktiv bleibt, aber das Laden der Daten nicht übermäßig durch Aufbrechen verzögert wird?

Zum Beispiel:

%Vor%

Nun habe ich ein paar Tests durchgeführt, und ein chunkSize , das eine Ausführungszeit von etwa 100 ms und eine 1ms timeout ergibt, scheint eine ziemlich reaktionsschnelle Benutzeroberfläche zu liefern, aber einige Beispiele, die ich gesehen habe, empfehlen viel größere ~ 300 ms) und längere Timeouts (20 bis 100 ms). Fehle ich einige Gefahren, wenn ich meine Funktion in zu viele kleine Stücke zerschneide, oder ist Versuch und Irrtum eine sichere Weise, diese Zahlen zu bestimmen?

    
jball 10.11.2010, 22:11
quelle

2 Antworten

3

Jeder Timeout-Wert von weniger als etwa 15 ms ist äquivalent - der Browser aktualisiert das DOM usw. und führt dann das Timeout aus. Siehe dies und dies für weitere Informationen. Ich neige dazu, setTimeout(fn, 0) zu verwenden.

Ich würde die verstrichene Zeit überprüfen, anstatt Zahlen zu erraten, denn wie Jason darauf hingewiesen hat, gibt es Geschwindigkeitsunterschiede zwischen den Clients:

%Vor%     
Alex 17.11.2010, 11:30
quelle
0

Das Timeout von 1 ms ist nicht wirklich 1 ms. Zu der Zeit, die der Thread liefert, um die 1 ms zu erreichen, hat er wahrscheinlich viel mehr ergeben - weil die typische Zeitscheibe des Threads 30 ms ist. Während der 1ms-Zeitüberschreitung konnte eine beliebige Anzahl anderer Threads ausgeführt werden, was bedeuten könnte, dass 200ms vergingen, bevor Sie die Kontrolle wieder erhielten.

Warum sollte nicht einfach 'doSomethingWithData' in einem ganz anderen Thread ausgeführt werden?

    
Brent Arias 10.11.2010 22:21
quelle

Tags und Links