Il codice asincrono in JavaScript
In questo video vedremo come funziona il codice asincrono in JavaScript.
Sarà un video un po' tecnico, quindi cercherò di semplificare i vari concetti il più possibile.
In questo video vedremo una veloce panoramica di come un programmatore può lavorare con il codice asincrono, usando diversi tecniche: callback, Promise, funzioni asincrone; ma avendo già dedicato un video ad ognuna di queste maniere (vedi link), nel video parleremo proprio di come funziona il codice asincrono dietro le quinte, dove il programmatore non può arrivare.
Prenderemo confidenza con termini tecnici come: single thread, non blocking, call stack, memory heap, event loop.
JavaScript é un linguaggio single thread. Quindi usa un solo call stack e può eseguire una sola istruzione alla volta, ciò vuol dire che deve completare un comando prima di poter passare al successivo.
Il "problema" sorge quando si deve lavorare con il codice asincrono, come un timer o aspettare la risposta di un server.
JavaScript é un linguaggio non blocking. Questo vuol dire che JS è in grado di eseguire il codice successivo all'attivazione di un timer, senza dover prima aspettare la sua scadenza.
adesso vi faccio vedere che io ho detto sì che c'è quell'event loop che è sempre lì che aspetta che il call stack sia vuoto per poter mettere la callback nel call stack ed eseguirla quindi adesso andiamo a vedere un esempio in cui questo dimostra che se il mio call stack non è un vuoto la call back che è in attesa nella coda non può essere eseguita allora io ho questo mini script qui che quando viene eseguito prende il time stamp di questo momento e viene salvato in questa variabile now e dopo viene eseguito questo timer e dentro il timer vado a fare il log dell'ora in cui viene eseguita la call back del mio timer meno il now che avevo preso qui quindi siccome questo timer dovrebbe scadere dopo 50 millisecondi dovrei trovarmi pressappoco 50 52 millisecondi da questa differenza qui andiamo a vedere e come vedete 50 millisecondi esatti se lo ritrova 52 millisecondi comunque grosso modo mi trovo che la call back è stata eseguita proprio quando il timer è scaduto però cosa succede se io adesso metto in gioco un for loop che ha un miliardo di iterazioni siccome questo il for loop dovrà venire eseguito tutto in un colpo non è detto che quando il mio timer scade il call stack sia vuoto in maniera che possa essere eseguita la mia callback del timer andiamo a vedere come vedete adesso io ho 583 millisecondi questo vuol dire che con la scusa che il mio call stack non era vuoto perché stava eseguendo tutte questo miliardo di iterazioni quando il mio timer è scaduto la call back del timer era inattesa dentro la coda e l'event loop era lì che aspettava che il call stack si svuotasse che quindi il mio ciclo for si esaurisse in maniera da poter mettere la call back dentro al call stack ed eseguirla io penso di aver dato una panoramica di come javascript lavora col codice asincrono spero di essere stato più di averlo spiegato nella maniera più semplice possibile con questo è tutto ci sentiamo la prossima ciao
Link per il video su Introduzione ad Ajax
Link per il video su Parametri e callback
Link per il video su Introduzione alle Promise
Link per il video su Le funzioni asincrone
Link per il video su Debugging
Link per un post che parla del Callback Hell