Abbiamo un'applicazione web che funziona attualmente come in una tipica vista / pagina:
- il fronte deve mostrare più di 100 "anteprime" (sotto forma di
base64
immagini) - ciascuna di questa anteprima è costruita su richiesta dal back-end quando il front lo richiede
- un pool di 8 richieste standard
ajax
viene eseguito in coda fino a quando tutte le anteprime vengono caricate
Fammi illustrare questo con un'immagine:
Avoltel'utentefaqualcosachemodificaalcuneanteprimeequelle(esoloquelle)devonoesserenuovamenterichiestedalfronte.Inquestocasovacosì:
In questo momento, aspettare che vengano caricate inizialmente più di 100 anteprime può richiedere molto tempo (tra 30 e 50 secondi), il che è molto fastidioso.
Prima di passare alla domanda, lascia che ti indichi alcuni punti:
- ogni anteprima è totalmente indipendente dagli altri
- ogni anteprima può essere costruita quasi istantaneamente dal back-end
- il carico utile di
base64
di ogni anteprima non ha praticamente alcun peso (alcunikb
) - stabilire una connessione
http
richiede in realtà la maggior parte del tempo - naturalmente, non più di circa l'8% delle richieste di
ajax
possono funzionare contemporaneamente - se l'utente lascia un'altra vista mentre vengono gestite 8 richieste, il browser attenderà di avere un po 'di spazio nella sua coda
ajax
prima di caricare elementi dalla nuova vista, che è molto fastidioso (la nuova vista può rimanere vuota per molti secondi prima che accada qualcosa) - non possiamo bulk tutte le anteprime in una grande richiesta perché a volte (e non è prevedibile), accade che una particolare anteprima richieda molto tempo (diversi secondi) per essere costruita, e non vogliamo penalizzare le altre anteprime che potrebbero essere caricate molto più rapidamente
Quindi, le mie domande sono:
-
potrebbe utilizzare un
socket
per migliorare notevolmente il tempo di connessione, in modo che l'app sia molto più reattiva al caricamento iniziale e in caso di modifiche nelle anteprime? -
i messaggi scambiati in questo
socket
potrebbero essere asincroni cosicché se chiedessimo più di 100 anteprime allo stesso tempo, verranno caricati tutti molto velocemente? E se sì, c'è un numero massimo di messaggi simultanei nel socket? -
può tutti i messaggi concorrenti per i quali il front attualmente sta aspettando, essere immediatamente eliminati se l'utente esce da questa vista per visitarne un'altra? o importa anche se non ci sono praticamente limiti di messaggi simultanei?
Stiamo utilizzando EmberJS
per il fronte con EmberData
e Flask
per il retro.