Come fare l'impaginazione mentre la pagina viene popolata dinamicamente

1

Ho una pagina in cui elenco alcuni prodotti in base ai dati di ricerca. I prodotti mostrati non sono salvati nel database locale, ma sono presi dal vivo usando l'API (e questo è come deve rimanere).

Quando la pagina viene caricata, elenca prima i prodotti di un fornitore (prima chiamata API). Al termine del caricamento della pagina, con Ajax viene effettuata la seconda chiamata al secondo provider, l'elenco dei prodotti viene aggiunto alla pagina.

Considerando che ciascuna chiamata API richiede più di 2 secondi per restituire i dati, non posso lasciare più di 1 chiamata al caricamento della pagina.

La mia domanda è: come si fa l'impaginazione in questo scenario?

Idea 1

Effettuare l'impaginazione statica: L'impaginazione viene eseguita nel browser. Questo è molto semplice, ma con un ampio set di risultati potrebbe rallentare il dispositivo o addirittura causare un crash della pagina.

Idea 2

Al primo caricamento, metti in cache tutti i risultati e fai l'impaginazione usando il file cache (difficoltà: medio, inoltre non sarà corretto mantenere il file memorizzato nella cache troppo a lungo, poiché i dati possono cambiare frequentemente)

Idea 3

Nessuna cache, impaginazione sul server. Qui non ho idea di come farlo.

Elementi da considerare

Dopo aver scoperto l'idea alla base dell'impaginazione, dovrò aggiungere anche filtri e ordinamento.

Usando php, mysql, js.

    
posta DonJoe 17.11.2018 - 17:04
fonte

1 risposta

1

Esaminiamo le tue opzioni:

  • L'opzione 1 non è praticabile se il set di risultati è molto grande, la pagina potrebbe non rispondere e l'utente ha richiesto di interrompere lo script. Questo è vero solo sopra alcune migliaia di elementi. Ma se in alcuni risultati di ricerca questo è il caso, non può essere considerato.

  • Opzione 2: il caching risolve il problema della latenza, ma non il problema del volume, un enorme set di dati nella cache è ancora un enorme set di dati. Non capisco davvero in che modo il caching semplifica il problema della paginazione.

  • L'opzione 3 non presenta gli stessi svantaggi e richiede solo la potenza di elaborazione del server. Questo è il motivo per cui dovrebbe essere considerato.

Quando si lavora con un database, l'impaginazione viene gestita direttamente inviando un parametro limite dinamico al database. Qui hai solo la possibilità di post-processare, quindi quando chiami l'api nel back-end, ritaglia qualcosa oltre page * pagesize e sotto (page + 1) * pagesize risultati. Probabilmente dovrai analizzare l'html per farlo.

In seguito puoi aggiungere l'opzione 2 che ti consentirebbe di non richiedere l'API con la stessa ricerca quando richiesto per la pagina 2. Avresti invece la richiesta memorizzata nella cache per la pagina 1. Librerie dovrebbe rendere questo lavoro abbastanza facile.

    
risposta data 21.11.2018 - 22:20
fonte

Leggi altre domande sui tag