socket asincrono.io per molti messaggi simultanei

3

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 (alcuni kb )
  • stabilire una connessione http richiede in realtà la maggior parte del tempo
  • naturalmente, non più di circa l'8% delle richieste diajax 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.

    
posta Jivan 11.02.2016 - 00:44
fonte

1 risposta

3

Could using a socket dramatically improve connection time so that the app is much more responsive at initial loading and in case of modifications in previews?

Sì. I socket sono progettati specificamente per questo.

Could messages exchanged in this socket be asynchronous so that if we ask for 100+ previews at the same time, they will all be loaded very quickly?

Molto probabilmente il design assumerà la forma: ricevere un messaggio, aggiornare una tessera. Sarebbe asincrono nel senso che non richiederebbe una ricarica parziale o completa della pagina.

Is there a maximum number of concurrent messages in the socket?

Uno, per quanto ne so. Ma puoi ricevere messaggi seriali molto rapidamente.

can all the concurrent messages for which the front is currently waiting for, be instantly dropped if the user exits this view to visit another one?

Invia un messaggio all'host per verificare che la vista sia cambiata. Programma l'host per rispondere di conseguenza.

Vedi anche
link
link

    
risposta data 11.02.2016 - 01:10
fonte

Leggi altre domande sui tag