Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Come "rallentare" una ricerca per nn sovraccaricare il server

    Salve a tutti,
    sto realizzando una piccola applicazione, e il mio più che un reale problema è una necessità dovuta dal buon senso.

    Nella mia pagina in ASP, ho una textbox.
    Questa textbox dovrà contenere un codice da ricercare nella tabella degli articoli.

    Ogni qualvolta viene inserito un carattere, una funzione sul ONKEYUP della suddetta texbox mi apre un DIV sottostante; all'interno del DIV c'è un IFRAME con una pagina ASP che mi carica l'elenco, cercando nella tabella degli articoli il contenuto della textbox.

    Funziona tutto perfettamente.

    Questa è la textbox:
    codice:
    <input name="codice" type="text" class="textbox1" id="codice" onKeyUp="ShowDiv('txtbox_suggerimenti');RicaricaFrameConID('fr_list');" size="23" />
    Questa è la funzione:
    codice:
    function RicaricaFrameConID(el){
    document.getElementById(el).src = "elenca_articoli.asp?search="+document.form1.codice.value;
    }
    Come potete vedere, la funzione RicaricaFrameConID OGNI VOLTA che viene cliccato un tasto mi fa partire la ricerca.

    Io ho gia inibito la ricerca con un testo minore di 3 caratteri, però poi, quando ha gia inserito 3 caratteri, ogni tasto mi fa partire la ricerca, e nn mi sembra molto ortodosso.

    Secondo voi come posso fare per rallentare il tutto?
    Una sorta di rallentatore in secondi?

    Grazie a tutti in anticipo
    Ale

  2. #2
    puoi farlo sull'evento onkeyup quando clicca su invio, guardi con event.keyCode che tasto ha cliccato e se è invio lanci la funzione.
    I DON'T Double Click!

  3. #3
    Originariamente inviato da artorius
    puoi farlo sull'evento onkeyup quando clicca su invio, guardi con event.keyCode che tasto ha cliccato e se è invio lanci la funzione.
    Grazie per la risposta.
    In verità il punto di forza del sistema è proprio quello di presentare un elenco prodotti in automatico, senza l'ausilio del click onEnter.

    Mi hanno suggerito di fare un controllo ogni totsecondi sulla textbox, e se il valore della textbox cambia lo mando all'IFRAME, altrimenti no. Potrebbe essere una soluzione...

  4. #4
    l'alternativa migliore, a mio avviso, sarebbe levare l'iFrame ed usare AJAX facendo tornare l'elenco dei prodotti con JSON, dalla risposta (che è leggerissima dato che è il motivo per cui si usa JSON) generi la lista dei prodotti usando Javascript.

    Il server poi dovrebbe usare il caching per memorizzare le ricerche recenti (del tipo inserisco Giac, lui mi torna Giacche Giacconi e via dicendo, aggiungo Giaccon, lui mi torna solo Giacconi, cancello fino a Giac, il server non mi riprocesserà la pagina, ma ritornerà la risposta di prima).

    Comunque, che database usi? Su usi un DB con funzionalità avanzate, puoi memorizzare i dati delle ricerche più frequenti facendo risparmiare parecchio in termini di prestazioni.

    La cosa migliore comunque resta il caching delle pagine del server.
    I DON'T Double Click!

  5. #5
    Originariamente inviato da artorius
    l'alternativa migliore, a mio avviso, sarebbe levare l'iFrame ed usare AJAX facendo tornare l'elenco dei prodotti con JSON, dalla risposta (che è leggerissima dato che è il motivo per cui si usa JSON) generi la lista dei prodotti usando Javascript.

    Il server poi dovrebbe usare il caching per memorizzare le ricerche recenti (del tipo inserisco Giac, lui mi torna Giacche Giacconi e via dicendo, aggiungo Giaccon, lui mi torna solo Giacconi, cancello fino a Giac, il server non mi riprocesserà la pagina, ma ritornerà la risposta di prima).

    Comunque, che database usi? Su usi un DB con funzionalità avanzate, puoi memorizzare i dati delle ricerche più frequenti facendo risparmiare parecchio in termini di prestazioni.

    La cosa migliore comunque resta il caching delle pagine del server.
    Grazie per la rispotsa.
    Dunque, la questione qui si fa complicata. Devo informarmi di piu su JSon, nn sei la prima persona che me ne parla...

    Io uso Mysql come db...cosa intendi per memorizzare le ricerche piu frequenti? Come si agisce nel caso in cui l'elenco degli articoli cambia di continuo?

    Ti spiego: il mio cliente ha praticaemnte ogni notte articoli nuovi, quindi una ricerca per "ciccio" oggi, nn darà gli stessi articoli della stessa ricerca domani.

  6. #6
    La questione del Caching deve essere gestita sul server (e dato che usi ASP non so proprio come aiutarti, fai una ricerca su Google su come usare Caching su IIS). MySQL usa gia da solo un sistema interno di indicizzazione per essere più veloce, ma c'è una funzionalità chiamata appunto MySQL QUERY CACHE, che mi sembra faccia a caso tuo. L'unica cosa da implementare, di un po' magheggioso, sarebbe un sistema per svuotare la cache di MySQL ogni volta che il cliente aggiorna i prodotti in modo che le nuove richieste siano aggiornate.

    Dai un'occhio a:
    http://dev.mysql.com/doc/refman/5.1/en/query-cache.html
    http://dev.mysql.com/doc/refman/5.1/...operation.html

    http://dev.mysql.com/doc/refman/5.1/...iguration.html
    http://dev.mysql.com/doc/refman/5.1/...in-select.html

    Per la questione di AJAX e JSON non è indispensabile, è solo uno strumento diverso dall'iFrame per diminuire il carico di traffico inviato dal server (per dire, se devo passare del testo HTML è molto più pesante che inviare una risposta JSON).

    Se vuoi documentarti: http://www.json.org/
    I DON'T Double Click!

  7. #7
    Ho risolto alla grande in maniera simile, ma diversa.
    Ho usato JQUERY...scoperto grazie ad un mio amico inglese...spettacolo!

    Inoltre ho utilizzato una funzione che mi sembra carina:
    praticamente ogni due secondi lui fa il check se è cambiato qualcosa nel testo della TEXTBOX, se si, ricarica la pagina asp attraverso la riga di codice passata da jquery.

    se mai servisse, la posso postare...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.