App Backbone.js che estrae dataset di grandi dimensioni con fetch ()

0

Attualmente sto apportando alcuni miglioramenti per un client su un'app di backbone.js. L'app è un negozio web e un sistema di gestione delle scorte. Una cosa che mi infastidisce di questa app (e di altre app backbone.js che ho incontrato) è che carica l'intera collezione di elementi di inventario in memoria dal server su ogni caricamento iniziale della pagina. Dopo circa un anno e mezzo di produzione, questo set di dati (esclusi i beni immagine) è di circa 2,7 MB. Quindi, per ogni visitatore del sito Web, il front-end javascript ottiene 2,7 MB di dati sul filo al caricamento iniziale della pagina. Ovviamente questo comporta un serio ritardo (circa 8-12 secondi per caricare la maggior parte delle connessioni a banda larga di fascia consumer nella mia area). Per me questo tempo di caricamento è inaccettabile. Ovviamente una volta caricati i dati, il resto del sito Web è super scattante e reattivo.

Il caricamento di un'intera raccolta è davvero il modo migliore per sviluppare app backbone.js? Sto cercando di capirlo perché i libri e le esercitazioni che ho incontrato sembrano insegnare questo. C'è un altro modello da seguire? Cercando di tenerlo backbone.js specifico --- ma come si gestiscono grandi dataset in questo framework?

    
posta b.b. 10.12.2013 - 15:35
fonte

3 risposte

2

Is loading an entire collection really the best-practice way of developing backbone.js apps?

Non necessariamente, avendo lavorato in un'app backbone con collezioni altrettanto grandi, abbiamo scritto una classe di raccolta di base che ci ha aiutato a impaginare insiemi più piccoli dei dati.

I'm trying to figure it out because the books and tutorials I've come across seem to teach this.

Direi che la maggior parte dei tutorial che ho letto sulla dorsale non esplorano cosa fare con app che hanno grandi serie di dati, o un gran numero di elementi dell'interfaccia utente, quindi il nostro team ha sempre esplorato le opzioni di miglioramento.

Is there another pattern to follow? Trying to keep it backbone.js specific --- but how does one manage large datasets in this framework?

Questa è una domanda abbastanza ampia, ma come ho detto prima, crea una classe base che ti permette di impaginare facilmente una collezione (usa i modelli interni per gestire lo stato dove necessario) e scrivi il supporto per api per permetterlo. Oltre all'impaginazione, aggiungi il supporto per le query di ricerca, in modo che gli utenti possano cercare tra i dati, facendo in modo che le raccolte recuperino le parole chiave al volo. Condividi sempre le raccolte attraverso le visualizzazioni e sfrutta al massimo insiemi di dati più piccoli.

    
risposta data 10.12.2013 - 18:28
fonte
1

Non penso che ci siano soluzioni specifiche per Backbone, dato che è un framework abbastanza flessibile che non impone alcun comportamento particolare.

Quello che farei nel tuo caso, proprio come ha sottolineato @Satanicpuppy, è caricare i dati in piccoli blocchi in modo da avere subito qualcosa da mostrare dall'inizio e continuare a caricare i dati in background (potresti implementare qualche tipo di scrolling infinito). Puoi ottenerlo in modo trasparente implementando il tuo metodo sync o fetch nella tua raccolta. Consulta il codice annotato per sapere dove cercare.

Un'altra opzione che hai è ancora quella di caricare la collezione completa ma solo le proprietà limitate (id e nome?) e poi recuperare i dettagli completi del singolo modello quando devono essere mostrati (magari a clic?).

Guarda anche questa domanda SO che evidenzia un problema simile: link

    
risposta data 10.12.2013 - 16:45
fonte
0

Non c'è alcun motivo reale per cui devi caricare più cose di quelle che stai per visualizzare sulla pagina. A cosa servono i dati extra? E 8-12 secondi ti faranno perdere i clienti. Il monitoraggio del nostro sito Web genera errori se i numeri salgono a centinaia di millisecondi .

Ci deve essere un modo per limitare il set di dati che stai caricando ... Non ci sono sottosezioni all'inventario? E proverei a caricare anticipatamente gli elementi più richiesti. Ciò farà risparmiare tempo ai tuoi clienti e alla larghezza di banda.

    
risposta data 10.12.2013 - 16:03
fonte

Leggi altre domande sui tag