Un metodo che ho utilizzato in una posizione in qualche modo simile che mi ha permesso di forzare l'integrità dei dati, garantendo al contempo un'esperienza rapida per i miei utenti consisteva nel creare in modo asincrono la richiesta sul lato server.
Quindi, se la funzione A (.75 secondi per elaborare i calcoli), B (2 secondi) e C (3 secondi) facevano tutti parte di una singola pagina e quando ho postato questa pagina il tempo di elaborazione per A + B + C era semplicemente troppo grande. 5.75 secondi non è orribile, ma le persone iniziano a notare velocità a questo punto. L'elaborazione della mia pagina in realtà ha richiesto circa 10 secondi a causa di tutto ciò che era necessario fare. Per risolvere questo problema li ho divisi in funzioni separate sulla stessa pagina.
Quando hai aggiunto A (diciamo la posizione dell'aereo che fa 20 calcoli diversi sulle cose e ti ci sono voluti 0,75 secondi), era asincrono. Avevo una funzione lato server che ha eseguito l'elaborazione per questo, inclusi controlli, movimento dei file, ecc. Le informazioni per A sono state memorizzate sul server come parte di una richiesta parziale (ho usato REDIS per mantenere queste informazioni).
Quando aggiungi le tue informazioni B, l'elaborazione avviene di nuovo in modo asincrono.
E C.
Quindi, quando finalmente si preme "Invia", non è necessario ripetere tutta questa elaborazione. È già stato fatto e i risultati / le informazioni / le verifiche sono sul server in attesa di invio parziale. La tua presentazione effettiva darebbe il via a un processo che dice sostanzialmente "prendi le informazioni parziali sul server e combinale in x (x è un record, una richiesta, o qualsiasi altra cosa tu faccia con esso)".
Mi rendo conto di essere di alto livello. Posso provare a fornire un esempio di codice, se vuoi. Ma, il mio processo sincrono di 10 secondi di una pagina (non è nessuno ha tempo per quello), trasformato in più invii per la pagina. Alla gente non dispiace aspettare 1 secondo dopo aver aggiornato ogni parte della pagina. Quando pubblicano effettivamente la pagina, tutto il lavoro è stato fatto in background, quindi il tempo di risposta è di circa 1 secondo. Pensano che sia molto veloce, ma è solo perché tutto il lavoro è già stato fatto.
Una nota, lo scopo per la memorizzazione delle informazioni sul lato server aiuta a prevenire problemi di sicurezza. Se si "controlla" A solo quando lo completano sulla pagina e si restituisce un messaggio "Va tutto bene", ma dopo l'invio, prendi il valore di A dalle informazioni di invio assumendo che si tratti delle stesse informazioni che hai controllato, potresti aprirti ai dati dannosi. Ricevo le informazioni parziali, le memorizzo sul lato server, e in post, utilizzo quelle informazioni, quindi so con certezza al 100% che le informazioni che sto utilizzando sono quelle che hanno già superato tutti i miei assegni.
Spero che ti aiuti!