Forum: PC-Programmierung Javascript Workerrequest vor überladung schützen


von baer (Gast)


Lesenswert?

Hi,

ich habe mir einen kleinen Worker gebastelt welcher mir mittels PHP 
einen Datenbankabruf macht.

in Javascript muss ich also nur folgende Parameter eingeben:
1
worker.postMessage({ 
2
  data: {
3
    "getOrders": true, 
4
    "filter": $( this ).val()
5
  }
6
});

jetzt habe ich mir einen Eventlistener gebaut (mit Jquery) welcher mir 
in einer Inputbox abfragt ob ich eine taste "loslasse".

Sobald die Taste losgelassen wird, läuft der Worker aufs neue los...

vom Prinzip läuft das ganz gut... allerdings ist jetzt der fall, wenn 
man "schnell" schreibt oder mehrere Sachen sucht, überfordert man 
ziemlich schnell den Worker und befeuert diesen mit "hunderten" 
abfragen.
Trotzdem möchte ich nicht auf die "live-suche" verzichten (also erst 
abfragen, wenn ich das Feld verlasse oder so).

Kann ich denn eine Abfrage irgendwie Abbrechen oder wie Handelt man 
sowas normalerweise???

Meine erste Idee war es ein "Timeout" von ~150ms einzubauen... 
allerdings kommen dann ALLE Abfragen nur verzögert und nicht nur die 
letzte...

Vielen Dank für jeden Tipp

von Jim M. (turboj)


Lesenswert?

baer schrieb:
> Meine erste Idee war es ein "Timeout" von ~150ms einzubauen...

Starte die Abfrage erst 150 ms nach dem letzten Tastendruck, d.h. neue 
Taste startet den Timer vor Ablauf erneut.


Wenn es kompliziert sein darf: Nach x Tasten (2,3,4) macht man eine 
Abfrage zwischendurch. Dann muss man aber u.U. den Fall behandeln dass 
die länger als die abschließende Anfrage dauert.

Andere Alternative: Im Javascript filtern. Soll heissen: Man zieht sich 
die lange Liste für 1,2 oder 3 Tasten rein und filtert die weiteren 
Tasten im Javascript aus - und spart sich so weitere Server Roundtrips 
ein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.