Domanda

Sto esaminando le situazioni nelle applicazioni web orientate al database quando si dovrebbe fare affidamento sull'ordinamento delle tabelle lato client rispetto all'ordinamento sul lato server. Una situazione particolare che mi infastidisce è l'impaginazione.

Quando si cerca di impaginare una tabella di grandi dimensioni (diciamo 10000 righe), oltre a ordinarla per una colonna specifica, quale sarebbe l'approccio migliore da adottare?

Comprendo che alcuni problemi relativi a questo sono:

  • Non posso restituire l'intera tabella al lato client in una volta sola
  • Non riesco a ordinare fino a 10000 record con JavaScript
  • l'ordinamento della tabella implica l'ordinamento delle righe in tutte le pagine, non solo nella pagina corrente.

Quindi hai altri problemi da aggiungere a questo elenco?

Quale approccio porterebbe a un buon mix di interazione lato client e lato server in modo da ridurre al minimo il carico del server?


AGGIUNTA:

Va ??bene, l'ordinamento sul database e la restituzione della pagina reqd, una pagina precedente e una pagina successiva sembrano essere la scommessa migliore.

Ora considera questo:

L'utente è nella pagina (3 di 10) della tabella ordinata per numero seriale. Ora l'utente fa clic sull'intestazione denominata " nome utente " ;, desiderando ordinare la tabella in base al nome utente.

Quesion: se il risultato finale dovesse essere " pagina (1 di 10) ordinata per nome utente " o dovrebbe essere " pagina (3 di 10) ordinata per nome utente " ;?

So che questa è una domanda molto soggettiva, ma cosa consiglieresti e perché?

È stato utile?

Soluzione

Il lato client è molto semplice: l'ordinamento / paging di Javascript è solo per insiemi di risultati molto piccoli - abbastanza piccoli che un utente non noterà un calo delle prestazioni.

Il lato server è dove è possibile ottimizzare il carico del server:

Il caricamento può presentarsi sotto forma di richieste frequenti per più pagine, un gran numero di righe / colonne per pagina e frequenti richieste di ricorso. (Non abbiamo nemmeno parlato di filtraggio)

Quindi, a seconda dei tuoi utenti e utilizzo effettivo , potresti aver bisogno di una qualche forma di memorizzazione nella cache. Nota, questi sono suggerimenti per un momento DOPO che sai cosa stanno facendo i tuoi utenti:

  • Per richieste di pagine frequenti, considera di avere alcune richieste Ajax precaricate le pagine successive (e precedenti), quindi scambia le righe (tramite Javascript) sulla tabella su richiesta dell'utente.

  • Per pagine di grandi dimensioni, prendi in considerazione di conservare le righe in una "quotazione utilizzata più di recente" cache dell'applicazione (memoria), in modo che il database non sia necessario per sputare continuamente gli stessi enormi blocchi di dati.

  • Per il ricorso frequente, un buon approccio è quello di mantenere una tabella di cache in SQL con solo i risultati.

E sempre, sempre, indicizzare sempre il database in modo appropriato.


Risposta aggiuntiva:

La mia risposta molto soggettiva è questa: l'utente (me) vuole ordinare da una pagina arbitraria. Lasciali (io). Non c'è niente di più fastidioso di essere dove vuoi essere e avere un'applicazione che ti riporta all'inizio della lista.

Un'altra considerazione riguarda più livelli di ordinamento: vuoi implementare l'ordinamento per numero seriale, quindi nome utente? Considera cosa fa Microsoft Excel o qualsiasi altra applicazione che i tuoi utenti conoscono. I tuoi utenti probabilmente staranno bene con ciò a cui sono abituati, incluso il ritorno alla pagina 1.

Altri suggerimenti

I database sono vere bestie nell'ordinamento e nella selezione dei dati. Quindi la soluzione migliore è sicuramente far dire al client il server ", voglio la pagina X con le righe Y ordinate per Z". Quindi il database fa la sua cosa e il client mostra il risultato. Per migliorare le prestazioni, è possibile ottenere i risultati della cache del client e, inoltre, è possibile fare in modo che il codice richieda le pagine successiva e precedente dopo che è stata recuperata quella corrente in modo che possano essere visualizzate immediatamente su richiesta.

L'approccio migliore sarebbe quello di fare l'ordinamento e il paging a livello di database e restituire solo un sottoinsieme dei dati originali che verranno mostrati solo sullo schermo. Nessun javascript in questo scenario.

Se per alcuni motivi non è possibile ordinare e sfogliare a livello di database, è necessario farlo con uno script lato server. Nessun javascript anche in questo scenario.

E l'approccio peggiore sarebbe quello di fare l'ordinamento e il paging con javascript che ovviamente non è affatto raccomandato per ovvi motivi.

Chiedi al db di ordinare ciò che viene consegnato alla pagina specifica sullo schermo. Sarà quasi sempre più veloce, sarà memorizzato nella cache e faciliterà un tale carico sul browser.

Se lo desideri, fai in modo che il lato client consenta un ulteriore ordinamento tramite javascript, ecc. se i dati sono sufficientemente dettagliati e potrebbero trarne vantaggio. Potresti voler archiviare quali sono le funzioni di ordinamento secondario selezionati in modo da essere ricordati tra le pagine.

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