Ricerca dal vivo / filtro durante la digitazione nell'approccio client

1

Come esercizio per me stesso per praticare le mie "abilità" di JavaScript, sto provando a scrivere un filtro sul lato client. Dovrebbe essere in grado di filtrare "blocchi di contenuti" mentre l'utente digita.

Per "blocco del contenuto", intendo un elenco di DomElement che contengono almeno un nodo di testo - è possibile che contengano più e anche una quantità diversa di nodi di testo, annidati all'interno di altri nodi, ecc.

Ho pensato a 2 approcci:

  1. Inizializzazione della pagina, scansione di tutti i nodi e memorizzazione di tutto il testo in una sorta di mappa o albero.

  2. Semplicemente itera su ogni elemento e controlla se ha la stringa da cercare / filtrare. È possibile aggiungere prestazioni qui memorizzando nella cache, filtrando solo gli articoli rimanenti correnti se il testo è stato aggiunto, ecc.

Ovviamente, se il numero di nodi è veramente grande, l'opzione 1 impiegherà un po 'di tempo a costruire l'' indice ', ma sarà più veloce una volta costruita. L'opzione 2 tuttavia sarà disponibile direttamente sul caricamento della pagina poiché non viene eseguita alcuna inizializzazione. Ma ovviamente ci vorrà più tempo per cercare.

Quindi la mia domanda è: qual è l'approccio migliore qui? E come implementare il "caching" e / o "index"?

    
posta Pinoniq 20.06.2014 - 14:52
fonte

2 risposte

1

Credo che un mix tra entrambi sarebbe fantastico.

La prima volta costruirà l'indice durante la ricerca. Ci vorrà un po 'più di tempo per cercare, ma dopo cercherà più velocemente dalla cache indicizzata costruita.

Pensando nella situazione dei dati nidificati, e considerando che la ricerca verrà eseguita molte volte, farei una cache non indicizzata, nella stessa disposizione ad albero dei dati e una cache dei risultati di ricerca.

per es.

La cache dei risultati deve essere indicizzata dai risultati di ricerca (meno prima)

  1. Ricerca utente la prima volta per javascript , alla fine della ricerca ci sarà

    • un elenco di tutti i testi da cercare linearmente
    • un elenco dei risultati per javascript
  2. Ricerca utente per nodejs , alla fine della ricerca ci sarà

    • un elenco di tutti i testi da cercare linearmente
    • Elenco di risultati 2 (1 per javascript e 1 per nodejs)
  3. Ricerca utente per javascript nodejs , cercherà nell'elenco più piccolo e, alla fine della ricerca, ci sarà

    • un elenco di tutti i testi da cercare linearmente
    • Elenco risultati 3 (1 per javascript, 1 per nodejs e 1 per javascript nodejs)
risposta data 20.06.2014 - 15:14
fonte
-2

Assegnerei un indice posizionando una proprietà su ciascun elemento dopo averli inseriti in un qualche tipo di elenco o array.

textArray [indice] .Index = contatore; contatore ++;

    
risposta data 20.06.2014 - 18:37
fonte

Leggi altre domande sui tag