Nehmen wir an, wir haben ein einfaches Beispiel wie unten.
<input id="filter" type="text" />
<script>
function reload() {
// get data via ajax
}
$('#filter').change($.debounce(250,reload));
</script>
Wir führen eine kleine Verzögerung ein, um die Anzahl der Anrufe zu reduzieren reload
während der Benutzer Text in die Eingabe eingibt.
Nun ist mir klar, dass dies von Fall zu Fall abhängt, aber gibt es eine allgemeingültige Meinung darüber, wie lange die Entprellungsverzögerung angesichts einer durchschnittlichen (oder möglicherweise kleinsten gemeinsamen Nenner) Tipp-/Interaktionsgeschwindigkeit sein sollte? Im Allgemeinen spiele ich einfach mit dem Wert herum, bis er sich richtig anfühlt, aber ich vertrete möglicherweise keinen typischen Benutzer. Hat jemand irgendwelche Studien dazu durchgeführt?
Wie Sie angedeutet haben, hängt die Antwort von einer Reihe von Faktoren ab – nicht alle davon sind subjektiv.
Im Allgemeinen lässt sich der Grund für die Verwendung einer Entprellungsoperation mit einem von zwei Zwecken zusammenfassen:
- Reduzierung der Kosten für die Bereitstellung dynamischer interaktiver Elemente (wobei die Kosten rechnerisch, IO, Netzwerk oder Latenz sein können und vom Client oder Server vorgegeben werden können).
- Reduzierung des visuellen „Rauschens“, um den Benutzer nicht durch Seitenaktualisierungen abzulenken, während er beschäftigt ist.
Reaktionszeiten
Eine wichtige Zahl, die Sie im Auge behalten sollten, ist 250 ms – dies stellt die (ungefähr) mittlere Reaktionszeit eines Menschen dar und ist im Allgemeinen eine gute Obergrenze, innerhalb derer Sie alle Aktualisierungen der Benutzeroberfläche durchführen sollten, damit Ihre Website weiterhin reaktionsfähig bleibt. Weitere Informationen zu menschlichen Reaktionszeiten finden Sie hier Hier.
Im ersteren Fall hängt das genaue Entprellungsintervall davon ab, wie hoch die Kosten eines Vorgangs für beide Parteien (Client und Server) sind. Wenn Ihr AJAX-Aufruf eine End-to-End-Antwortzeit von 100 ms hat, kann es sinnvoll sein, die Entprellung auf 150 ms einzustellen, um den Reaktionsschwellenwert von 250 ms einzuhalten.
Wenn die Ausführung Ihres Anrufs andererseits im Allgemeinen 4000 ms dauert, ist es möglicherweise besser, beim eigentlichen Anruf eine längere Entprellung einzustellen und stattdessen eine Entprellung der ersten Ebene zu verwenden, um einen Ladeindikator anzuzeigen (vorausgesetzt, Ihr Ladeindikator verdeckt nicht). Ihre Texteingabe).
$('#filter').change($.debounce(250, show_loading));
$('#filter').change($.debounce(2000, reload));
Backend-Kapazität
Es ist auch wichtig, die Leistungskosten dieser Anfragen in Ihrem Backend im Auge zu behalten. In diesem Fall eine Kombination aus durchschnittliche Schreibgeschwindigkeit (etwa 44 Wörter pro Minute oder etwa 200 Zeichen pro Minute) und die Kenntnis Ihrer Benutzerbasisgröße und Backend-Kapazität können Ihnen die Auswahl eines Entprellwerts ermöglichen, der die Backend-Last beherrschbar hält.
Beispiel: Wenn Sie über ein einzelnes Backend verfügen, das 10 Anfragen pro Sekunde verarbeiten kann und eine maximale aktive Benutzerbasis von 30 (unter Verwendung dieses Dienstes) hat, sollten Sie Ihren Entprellungszeitraum so wählen, dass Sie vermeiden, dass 10 Anfragen pro Sekunde überschritten werden (idealerweise mit einer Marge von Fehler). In diesem Fall verfügen wir über 33,3 % der Kapazität, die erforderlich ist, um eine Eingabe pro Benutzer und Sekunde zu verarbeiten, sodass wir idealerweise alle 3 Sekunden höchstens eine Anfrage pro Benutzer bearbeiten würden, was uns unsere Möglichkeiten gibt 3000ms
Entprellungszeitraum.
Frontend-Leistung
Der letzte zu berücksichtigende Aspekt sind die Verarbeitungskosten auf Kundenseite. Abhängig von der Datenmenge, die Sie verschieben, und der Komplexität Ihrer UI-Updates kann dies vernachlässigbar oder erheblich sein. Sie sollten sicherstellen, dass Ihre Benutzeroberfläche weiterhin auf Benutzereingaben reagiert. Das bedeutet nicht unbedingt, dass es immer in der Lage sein muss, zu reagieren, aber während ein Benutzer mit ihm interagiert, sollte es schnell auf ihn reagieren (60 FPS ist hier im Allgemeinen das Ziel).
In diesem Fall sollte Ihr Ziel darin bestehen, mit einer Geschwindigkeit zu entprellen, die verhindert, dass die Benutzeroberfläche träge wird oder nicht mehr reagiert, während der Benutzer damit interagiert. Auch hier sind Statistiken eine gute Möglichkeit, diese Zahl abzuleiten. Bedenken Sie jedoch, dass verschiedene Arten von Eingaben unterschiedlich viel Zeit in Anspruch nehmen.
Beispielsweise ist das Transkribieren eines Satzes mit kurzen Wörtern im Allgemeinen viel schneller als die Eingabe eines einzelnen langen und komplexen Wortes. Ebenso tendiert ein Benutzer dazu, langsamer zu tippen, wenn er darüber nachdenken muss, was er eingibt. Gleiches gilt für die Verwendung von Sonderzeichen oder Satzzeichen.
Subjektive Antwort
In der Praxis habe ich Entprellzeiträume verwendet, die zwischen 100ms
für Daten, die außergewöhnlich schnell abrufbar sind und kaum Auswirkungen auf die Leistung haben 5000ms
für Dinge, die teurer waren.
Im letzteren Fall wird durch die Kombination einer kurzen, kostengünstigen Entprellungsperiode, um dem Benutzer Feedback zu geben, und einer längeren Zeitspanne für die tatsächliche Rechenarbeit tendenziell ein gutes Gleichgewicht zwischen Benutzererfahrung und den Leistungskosten verschwendeter Vorgänge erzielt.
Eine bemerkenswerte Sache, die ich bei der Auswahl dieser Werte zu berücksichtigen versuche, ist, dass ich als jemand, der jeden Tag mit einer Tastatur arbeitet, wahrscheinlich schneller tippe als die meisten meiner Benutzer. Das kann bedeuten, dass Dinge, die sich für mich glatt und natürlich anfühlen, für jemanden, der langsamer tippt, störend sind. Daher ist es eine gute Idee, einige Benutzertests durchzuführen oder (noch besser) Metriken zu sammeln und diese zur Optimierung Ihrer Benutzeroberfläche zu verwenden.
Ich möchte ein anbieten prägnante Antwort zur Suchtexteingabe.
Normalerweise mache ich 300 mswas einfach fühlt sich Richtig, wenn man sowohl Hardware-Ressourcen spart als auch ein ausreichend gutes Benutzererlebnis bietet.
—
Ein interessanter Gedanke…
Nehmen wir ein Beispiel von einem der Meister: Google.
Wenn Sie bemerken (Sie müssen eine schnelle Schreibkraft sein), hat Google tatsächlich nur sehr wenig oder gar keine Entprellzeit für die ersten paar Zeichen (2, glaube ich), aber danach erhöht es die Entprellzeit. Ihr Hauptziel besteht offensichtlich darin, ein sofortiges Gefühl zu vermitteln und ihre Benutzeroberfläche an Anwendungsfälle anzupassen. Ich weiß nicht, welche Daten oder Studien sie erstellt haben, aber sie haben sie erstellt und sind ein gutes Beispiel dafür, wenn eine Sucheingabe die Hauptfunktion einer Website ist.
Daher würde ich sagen, dass dies eine hervorragende Benutzererfahrung ist, wenn auch mit zusätzlicher Komplexität und Programmierzeit. Google braucht es. Eine weniger häufig verwendete Suchleiste könnte möglicherweise ohne zusätzliche Komplexität auskommen.