Javascript - Nedsættelse at belastningen på serveren
Hej Eksperter!
Jeg har en hjemmeside med en søgefunktion, og hver gang en tast er sluppet når man skriver i søgefeltet (v.h.a OnKeyUp() event), sender PHP v.h.a AJAX en forespørgsel til MySQL databasen og finder resultater som den foreslår som søgeord. Man kan betragte det som såkaldte suggestions.
Problemet er bare at min hjemmeside går fuldstendig kold. For når man er igang med at skrive i søgefeltet sender den hele tiden forespørgelser til MySQL som får hjemmesiden til at gå helt istå.
Er der nogen der ved hvordan jeg kan rette dette problem?
Måske kan man lave et script som først udfører funktionen når en knap ikke er blevet trykket på i 1 sekundt. Det ville medfører at den ikke sender førespørgsler til databasen så længe at man skriver (medmindre at man bruger mere end 1 sekundt på at finde hver tast). hehe
Tak på forhånd og undskyld den lange tekst :S Mathias
Alternativt kan nøjes med at hente f.eks. de 50 første ord som matcher det indtastede. Det vil givetvis gøre belastningen på serveren mindre i selve søgeøjeblikket. Desuden kan du sørge for at cache resultaterne på serveren, så der ved næste opslag kan gøres brug af de allerede hentede data.
Målet med min foreslåede strategi er dels at lave så få opslag i databasen som muligt, dels sende så få data til klienten som muligt.
Du må se lidt på om klienten har brug for at få vist f.eks. 5000 ord i en dropdown, eller om det er sandsynligt at brugeren vi taste lidt videre for at få afgrænset sit resultat yderligere. Hvis brugeren vil taste videre, så er det sikkert nok blot at sende 50 resultater og indikere, at der var mange flere. Når brugeren holder en pause med at taste og begynder at kigge i forslagslisten efter ord kan du overveje om du skulle hente flere resultater. Du kan evt. bare tillade at brugeren selv vælger at de vil se de sidste resultater i søgningen (ved f.eks. at vælge "se resten af resultaterne")...
Det er ikke uden grund, at Google - som med Google Suggest var blandt de allerførste i dette trug - sender en request én gang i sekundet.
En helt anden ting er, at man aldrig må HTML-formatere data på serveren ved brug af Ajax. Det er alt for ressourcekrævende. I stedet JSON- eller XML-formateres data, som på klienten lægges i elementer, der oprettes og indsættes med DOM
Kan jeg stadig foretage forespørgelser til MySQL databasen gennem JSN og XML ligesom med AJAX?
Problemet er jo at den sender er forespørgsel hver gang jeg taster et bogstav. D.v.s at hvis jeg skriver "Giv mig nogle foreslag" og jeg skriver det på 3 sekunder bliver der sendt 19 forespørgelser på 3 sekunder.
Hvis nu jeg kun foretog en forespørgelse hver gang brugeren stoppede for at kigge på foreslagene, ville det ikke nedsætte belastningen eller er jeg nød til at bruge noget andet end AJAX?
Jamen, hvorfor foretager du så ikke bare én Ajax request i sekundet?
At pause forespørgslerne, mens brugeren holder pause, hjælper jo kun, hvis brugeren holder pause. Det gør øvede hurtigskrivere ikke - og det er præcis dem, der giver dig problemer ;o)
Okay... Det prøver jeg... Tak skal i have alle sammen :D
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.