Dovremmo (ancora) considerare una cattiva pratica XMLHTTPRequest sincronizzata?

2

Come forse saprai, XMLHTTPRequest può essere usato in modo sincrono o asincrono, ma le richieste sincronizzate sono sempre state considerate una cattiva pratica, e sono sempre d'accordo con questo.

Non solo l'ideologia dello sviluppo del JS moderno si basa pesantemente su un modello di eventi, ma c'erano anche alcuni motivi più prosaici per evitare richieste sincronizzate. Ad esempio, le vecchie versioni di Internet Explorer potrebbero semplicemente bloccarsi all'improvviso.

Oggi ho visto una richiesta sincronizzata nel codice sorgente di Liferay e ho pensato "Che peccato, come osi loro. Non sanno che è sbagliato?". Ma poi mi sono chiesto che cosa c'è di sbagliato in questo approccio nei tempi moderni, e non sono stato in grado di dare una risposta precisa e logica.

Ad esempio, sul lato server è prassi comune utilizzare le richieste HTTP sincronizzate. Naturalmente tutti i dati possono essere recuperati in modo asincrono, e forse dovrebbero essere recuperati in questo modo, ma spesso abbiamo bisogno di dati che verranno utilizzati per recuperare un'altra porzione di dati, quindi in tal caso la richiesta deve essere sincronizzata.

Quindi, dovrebbe essere ancora considerato una cattiva pratica?

PS : non ho usato il termine AJAX poiché il primo A sta per asincrono. :)

    
posta shabunc 05.10.2011 - 14:59
fonte

2 risposte

6

In breve, sì.

Le richieste HTTP sincrone interrompono l'esecuzione del codice successivo mentre sono in rotta. Mentre i browser possono non più bloccare l'interfaccia utente durante questo periodo, ci basiamo sulla larghezza di banda disponibile dell'utente, sull'affidabilità della rete e sul carico corrente del server per le prestazioni del nostro codice. Generalmente non è una buona pratica.

Nella pagina MDN "Using XMLHttpRequest" , vi è anche un vago avviso sull'uso della memoria e sulla perdita di eventi quando si utilizza XMLHttpRequest sincrono. Non è stato fornito alcun dettaglio, ma dato che l'interfaccia utente non è bloccata, e JavaScript è, avrebbe senso perdere gli eventi dell'interfaccia utente che avremmo rilevato se avessimo utilizzato Async.

Note: You shouldn't use synchronous XMLHttpRequests because, due to the inherently asynchronous nature of networking, there are various ways memory and events can leak when using synchronous requests.

Modifica: lato server

Anche se sono d'accordo sul fatto che le richieste sincrone sono comuni, non so che siano le migliori pratiche. Possono, tuttavia, essere migliori prassi sul server piuttosto che sul client. È migliore fidarsi del proprio server e delle sue connessioni di rete piuttosto che fidarsi di quelli del proprio utente. Il server è (teoricamente) una costante, il client è una variabile. Non ci sono problemi di interfaccia utente da affrontare e nessuna possibilità di eventi non catturati.

    
risposta data 05.10.2011 - 15:23
fonte
1

Ecco una buona ragione per non abbandonare completamente le chiamate di sincronizzazione ancora.

Hai appena scaricato un nuovo strumento da un fornitore.

Puoi farlo funzionare nella tua applicazione AngularJS. (trascorri settimane in questo POC)

Quindi ti viene chiesto di utilizzare un'opzione che deve comunicare al tuo server web.

Crea applicazioni OWIN sicure, quindi TUTTE le chiamate devono essere Autorizzate!

L'opzione per caricare / scaricare i BISOGNI necessari per avere un token di autorizzazione.

Timeout dei token di autorizzazione !!

Quindi devi averne uno nuovo in modo che sia fresco PRIMA di iniziare l'opzione per caricare / scaricare.

MA l'opzione per caricare / scaricare dove ottieni il token di autorizzazione è un gestore di eventi SENZA le capacità di Promessa / Q / $ q.

Javascript è a thread singolo, quindi le promesse non vengono eseguite fino alla fine del gestore di eventi!

Quindi devi fare un XmtHttpRequest sincrono!

Credo che dovremmo usare le chiamate asincrone, ma finché Javascript non è multi-thread o i gestori di eventi restituiscono promesse o i venditori di strumenti usano le promesse; avremo bisogno di una chiamata sincrona XmtHttpRequest per siti Web sicuri, solo per aggiornare i token di autorizzazione!

Cordiali saluti

GregJF

    
risposta data 29.04.2016 - 08:15
fonte

Leggi altre domande sui tag