Domača » Kodiranje » Razumevanje sinhronega in asinhronega JavaScripta - 1. del

    Razumevanje sinhronega in asinhronega JavaScripta - 1. del

    Sinhrono in asinhrono so zamenljivi koncepti v JavaScriptu, še posebej za začetnike. Dve ali več stvari je sinhrono ko bodo zgodilo hkrati (sinhronizirano) in asinhroni, kadar ne (ni sinhronizirano).

    Čeprav so te definicije lahko sprejeti, je dejansko bolj zapleteno, kot se zdi. Upoštevati moramo kaj točno so sinhronizirani, in kaj ni.

    Verjetno bi poklical normalno funkcija v JavaScript sinhroni, kajne? In če je nekaj podobnega setTimeout () ali AJAX, s katerim delate, ga boste imenovali asinhroni, da? Kaj, če vam to povem oboje na nek način asinhroni?

    Pojasniti zakaj, za pomoč se moramo obrniti na gospoda X..

    Scenarij 1 - g. X poskuša sinhronizirati

    Tukaj je nastavitev:

    1. Gospod X je nekdo, ki lahko odgovori na zahtevna vprašanja in izvede zahtevano nalogo.
    2. Edini način, da ga pokličete, je telefonski klic.
    3. Kakršno koli vprašanje ali nalogo, ki ste jo dobili, da bi prosili gospoda Xa za pomoč; Pokliči ga.
    4. Gospod X vam odgovori ali dokonča nalogo takoj, in vas obvešča opravljeno je.
    5. Spustiš sprejemnik občutek vsebine in iti ven za film.

    Kar ste pravkar opravili, je bil sinhrono (nazaj in naprej) komunikacijo z gospodom X. Poslušal je, ko ste mu postavljali vprašanje, in poslušali ste ga, ko je odgovarjal nanj.

    Scenarij 2 - Gospod X ni zadovoljen s sinhronijo

    Ker je gospod X tako učinkovit, začne prejemati veliko več klicev. Torej, kaj se zgodi, ko ga pokličeš že je zaposlen govorim z nekom drugim? Ne boste mu mogli zastaviti svojega vprašanja - ne dokler ne bo prejel vašega klica. Vse, kar boste slišali, je ton zasedenosti.

    Torej, kaj lahko g. X stori za boj proti temu?

    Namesto neposrednega klica:

    1. Gospod X najame novega, gospoda M, in mu pošlje telefonski odzivnik zapustiti sporočila.
    2. Naloga g. M je, da posredujte sporočilo od odzivnika do g. X, ko ve, da je gospod X popolnoma končal obdelavo vseh prejšnjih sporočil in je že prosto sprejmete novega.
    3. Torej, ko ga pokličete, namesto da bi dobili zaseden ton, potem pustite sporočilo gospodu X, potem počakajte, da vas pokliče nazaj (še ni časa za film).
    4. Ko gospod X opravi z vsemi čakajočimi sporočili, ki jih je prejel pred vašim, bo preučil vaše vprašanje in te pokličem nazaj da vam odgovorim.

    Zdaj je tu vprašanje: ali so bili dosedanji ukrepi sinhroni ali asinhroni?

    Mešano je. Ko zapustite sporočilo, Gospod X ga ni poslušal, zato je bila četrta komunikacija asinhrona.

    Toda, ko je odgovoril, bili ste tam in poslušali, ki omogoča povratno komunikacijo sinhrono.

    Upam, da ste do sedaj pridobili boljše razumevanje, kako se sinhronizacija dojema v smislu komunikacije. Čas je, da vnesete JavaScript.

    JavaScript - Asinhroni programski jezik

    Ko nekdo označi JavaScript asinhrono, na kar se na splošno sklicuje, je, kako lahko pustite sporočilo za to in klic ni blokiran z zasedenim signalom.

    Klici funkcij so nikoli ne usmerjajte v JavaScript, dobesedno so narejeni prek sporočil.

    JavaScript uporablja a čakalne vrste sporočil kjer potekajo vhodna sporočila (ali dogodki). An dogodek-zanke (sporočilo dispečer) zaporedno pošlje ta sporočila v stack kjer so ustrezne funkcije sporočil zložene kot okvirji (funkcija argumenti in spremenljivke) za izvedbo.

    Stack za klic zadrži okvir začetne funkcije, ki se kliče, in vse druge okvire za funkcije, ki se kličejo prek ugnezdenih klicev na vrhu .

    Ko se sporočilo pridruži čakalni vrsti, počaka, dokler ni stack praznih vseh okvirjev iz prejšnjega sporočila, in ko je, dogodek-zanke odstrani prejšnje sporočilo, in doda ustrezne okvire trenutnega sporočila v sklad.

    Sporočilo ponovno čaka, dokler se ne vzpostavi sklad praznih svojih ustreznih okvirjev (to pomeni, da so izvršitve vseh zloženih funkcij končane), nato pa se odstrani.

    Razmislite o naslednji kodi:

     funkcija foo ()  funkcijska vrstica () foo ();  funkcija baz () bar ();  baz (); 

    Funkcija, ki se izvaja, je baz () (v zadnji vrstici odrezka kode), za kar sporočilo se doda v čakalno vrsto, in ko se dogodek zanka poveže, se pokliče začne zlagati okvirje za baz (), bar(), in foo () na ustreznih mestih izvrševanja.

    Ko je izvedba funkcij zaključena ena za drugo, so njihovi okvirji odstranili iz sklada klicev, ko je sporočilo še vedno čakajo v čakalni vrsti, do baz () iz skladov.

    Ne pozabite, da so klici funkcij nikoli ne usmerjajte v JavaScript, končali so prek sporočil. Kadarkoli slišite nekoga, ki pravi, da je sam JavaScript asinhroni programski jezik, predpostavite, da govorijo o njegovem vgrajenem “odzivnik”, in kako lahko pustite sporočila.

    Kaj pa posebne asinhrone metode?

    Do sedaj se nisem dotaknil API-jev, kot je setTimeout () in AJAX, to so tisti, ki so posebej imenovan asinhroni. Zakaj je to?

    Pomembno je razumeti, kaj točno je sinhrono ali asinhrono. JavaScript, s pomočjo dogodkov in dogodek zanke, lahko vadite asinhrona obdelava sporočil, ampak to ne pomeni vse v JavaScriptu je asinhrona.

    Ne pozabite, da sem vam povedal, da sporočilo ni odšlo, dokler ni bil klic praznih ustreznih okvirjev, tako kot nisi odšel v film, dokler ne dobiš odgovora - to je biti sinhroni, vi ste tam čakali dokler opravilo ni končano, in dobite odgovor.

    Čakam ni idealen v vseh scenarijih. Kaj pa, če po odhodu sporočila, namesto da bi čakal, lahko pustite film? Kaj pa, če se funkcija lahko upokoji (izprazni sklad za klic), in njeno sporočilo se lahko umakne, še preden je opravilo funkcije končano? Kaj, če lahko kodo izvedemo asinhrono?

    Tukaj API-ji, kot so setTimeout () in AJAX pridejo v sliko, in kar delajo je… držite se, tega ne morem razložiti, ne da bi se vrnila k gospodu X, kar bomo videli v drugem delu tega članka. Ostani na vezi.