Domanda

Nella schermata di ricerca avanzata del mio sito web ci sono circa 15 campi che richiedono un campo di completamento automatico.
Il loro contenuto dipende tutto dal valore dell'altro (quindi se uno è compilato, il contenuto dell'altro cambierà in base al valore del primo).
La maggior parte dei campi ha una grande quantità di possibilità (almeno 1000 voci).

Attualmente effettua una chiamata Ajax se l'utente smette di digitare per mezzo secondo. Questa chiamata ajax fa una rapida chiamata al mio indice Lucene e restituisce un mucchio di oggetti JSon. Il metodo stesso è molto veloce, ma è la connessione e il trasferimento dei dati che è troppo lento.

Se guardo altri siti (diciamo facebook), il loro completamento automatico è istantaneo. Immagino che inseriscano i possibili valori nel loro HTML, quindi non devono fare un round trip. Ma temo per la quantità di dati che sto gestendo, questa non è un'opzione.

Qualche idea?

È stato utile?

Soluzione

  1. Restituisce solo i primi x risultati.
  2. Ottieni alcune tendenze su ciò che gli utenti scelgono, e ordine basato su quello, preferibilmente automaticamente.
  3. Risultati della cache per ogni URL e amp; combinazione di tasti, in modo da non dover fare andata e ritorno se hai già recuperato il risultato prima.
  4. Condividi questa cache con tutti completamenti automatici che utilizzano lo stesso URL & Amp; combinazione di tasti.
  5. Certo, abilita la compressione gzip per JSON e assicurati di impostare il tuo cache header to cache per alcuni tempo. Il tempo dipende dalla tua tariffa di modifica della risposta di completamento automatico.
  6. Ottimizza JSON per inviare il file minimo indispensabile. Non mandare giù tutto ciò di cui non hai bisogno.

Altri suggerimenti

Stai restituendo TUTTI i risultati per le possibilità o solo i primi 10 come oggetti json.

Ho notato che molte persone inviano un gran numero di risultati sullo schermo, ma poi mostrano solo i primi. Inviando un numero limitato di risultati, è possibile ridurre il trasferimento dei dati.

Restituisce la parte superiore " X " risultati, piuttosto che l'intero elenco, per ridurre il numero di opzioni? Potresti anche provare a inserire alcune tendenze per tenere traccia di ciò che gli utenti scelgono dall'elenco in modo da poter provare a fare la cima " X " il più usato / più vantaggioso. Puoi sempre restituire prima l'elenco più pertinente, quindi restituire l'elenco completo se sono ancora in difficoltà.

Oltre a limitare il set di risultati a un set X in alto prendere in considerazione la possibilità di abilitare la memorizzazione nella cache delle risposte delle richieste AJAX (il che significa utilizzare GET e mantenere semplice l'URL).

È sorprendente la frequenza con cui gli utenti effettuano il backspace e finiscono per riscrivere esattamente lo stesso contenuto. Inoltre, consentendo la memorizzazione nella cache pubblica e sul lato server, è possibile accelerare il tempo complessivo di round-trup.

  • Memorizza nella cache i risultati in System.Web.Cache
  • Utilizza una cache Lucene
  • Usa GET not POST in quanto IE memorizza nella cache
  • Prendi solo un sottoinsieme di risultati (10 come suggeriscono le persone)
  • Prova un widget di completamento automatico di terze parti decente come YUI one

Restituire le voci N-top è un buon approccio. Ma se vuoi / devi restituire tutti i dati, proverei a limitare i dati inviati e l'oggetto JSON stesso.

Ad esempio:

"Questa azienda qui con un nome lungo" diventa " This Here Company ... " (inserisci i punti nel nome del client - di nuovo; trasferisci un minimo di dati).

E per quanto riguarda l'oggetto JSON:

{n: "This Here Company", v: "1"}

... Dove " n " sarebbe il nome e " v " sarebbe il valore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top