Meglio inviare tutti i dati al client o al server di query per ogni ricerca?

5

Ho una funzione di ricerca sul mio sito che ha bisogno di cercare tra ~ 2000 elementi (questa tabella non cambia mai, avrà sempre lo stesso numero di elementi) archiviati in MySQL. Tutto quello che deve fare è cercare per nome o 'LIKE' il nome e restituire l'id. Ho pensato a due approcci a questo:

  1. Cerca il database usando ajax su keyup (), sembra che sarebbe costoso con molte persone che cercano
  2. Invia tutti i dati al client come file JSON quando caricano la pagina e la cercano attraverso JavaScript per ridurre il carico sul database

Quale approccio è migliore? O se hai un approccio migliore, sono aperto ai suggerimenti.

    
posta obl 11.11.2017 - 00:25
fonte

2 risposte

4

C'è un approccio migliore.

Per prima cosa, non inviare tutti i risultati per impostazione predefinita in un file JSON. I tuoi clienti dovranno scaricare un file enorme senza alcuna ragione, e potresti avere problemi con la cache del browser quando i risultati cambiano.

In secondo luogo, la ricerca chiave su tasto va bene finché la si attiva dopo che sono state scritte lettere X all'interno dell'input di ricerca. X dipende ovviamente dalla tua attività. Inoltre, quando opti per questa soluzione, dovresti eseguire l'impaginazione lato server in modo che le richieste siano leggere e veloci. Non dovrebbero danneggiare i tuoi server nemmeno con tutti quelli che inviano spam all'input della ricerca.

Questo porta all'ultimo punto: implementare la cache lato server per queste query. Molte persone cercano le stesse cose e il caching potrebbe mostrare un enorme guadagno in termini di prestazioni e costi. La scelta del motore della cache dipende dalla frequenza delle modifiche applicate a questi risultati.

Tra tutti i precedenti, il secondo punto è cruciale, specialmente per le richieste leggere. Come vedo che stai usando MySQL, avendo l'indicizzazione intelligente del tuo tavolo poiché non cambierà mai potrebbe portare a risultati sorprendentemente veloci.

    
risposta data 11.11.2017 - 01:48
fonte
3

2000 elementi non sono molti dati se ogni oggetto è un nome e un id (a meno che i nomi non siano enormi). La ricerca in Javascript sarà molto veloce. Se compresso quando inviato tramite la connessione HTTP, è probabilmente inferiore a 10kb; anche come oggetti Javascript, dovrebbe essere inferiore a 200kb in memoria. Ho sempre visto i fogli di stile che sono due volte più grandi.

Se la ricerca è la funzione principale di questa pagina, dovresti considerare di caricare i dati una volta finito il caricamento della pagina stessa (in un callback DOM-ready o tramite javascript async o qualsiasi altra cosa). Se gli utenti non sono necessariamente in cerca, è possibile caricare i dati quando il campo di ricerca è focalizzato. Poiché i dati non cambiano, è possibile archiviarli in una rete CDN per l'accesso a bassa latenza in tutto il mondo senza alcun impatto sui server.

    
risposta data 16.11.2017 - 20:29
fonte

Leggi altre domande sui tag