Seda postitust toimetas viimati Summer 2019-2-13 kell 14:04
2009. aastal lõi Ameerika programmeerija Ryan Dahl node.js projekti, mis kasutas JavaScripti keelt serveripoolseks programmeerimiseks.
See tähistab "Javascripti modulaarse programmeerimise" sündi. Esiosa keerukus on piiratud ja on täiesti okei, kui mooduleid pole, kuid serveri poolel peavad olema moodulid operatsioonisüsteemi ja teiste rakendustega suhtlemiseks, vastasel juhul ei saa seda üldse programmeerida.
Üks olulisemaid ideid sõlmeprogrammeerimises on moodulid ning just see teeb JavaScripti ulatusliku inseneritöö võimalikuks. Modulaarne programmeerimine oli JS-maailmas populaarne ja see põhines sellel, ning brauseri poolel ilmusid ka tööriistakomplektid nagu requirejs ja seajs, nii-öelda, vastava spetsifikatsiooni all, mis nõuavad kõiki modulaarseid programmeerimisi enne ES6, isegi nüüd, enne kui ES6 moodul täielikult rakendati.
CommonJS-is kasutab exposure moodul module.exports ja exports ning paljud inimesed ei mõista, miks on kaks avatud objekti, mis tutvustatakse hiljem
CommonJS-is on olemas globaalne meetod require(), mida kasutatakse moodulite laadimiseks. Eeldades, et on olemas matemaatikamoodul math.js, saab seda laadida nii.
Seejärel saate kutsuda mooduli poolt pakutavaid meetodeid:
Just CommonJS-i kasutatud nõudmismeetodi tõttu kasutasid AMD ja CMD nõudmismeetodit hiljem moodulite stiili tähistamiseks
AMD spetsifikatsioon
Serveripoolsete moodulite puhul on loomulik, et kõik soovivad kliendipoolseid mooduleid. Ja parem on, kui need kaks on ühilduvad ning moodul saab töötada nii serveris kui brauseris ilma muudatusteta.
Siiski on olemas suur piirang, mis muudab CommonJS spetsifikatsiooni brauserikeskkondades rakendamatuks. Aga eelmise osa kood, kui see töötab brauseris, tekib suur probleem
Teine rida math.add(2, 3) jookseb pärast esimese rea nõuet ('math'), seega peab see ootama, kuni math.js laadimine lõpeb. See tähendab, et kui laadimisaeg on pikk, siis kogu rakendus peatub seal ja ootab.
See ei ole serveri poolel probleem, sest kõik moodulid salvestatakse kohalikule kõvakettale ja neid saab sünkroonselt laadida ning ooteaeg on kõvaketta lugemisaeg. Kuid brauserite puhul on see suur probleem, sest moodulid asuvad serveri poolel ning ooteaeg sõltub interneti kiirusest, mis võib võtta kaua aega, ning brauser on "peatatud surma" seisundis.
Seetõttu ei saa brauseripoolsed moodulid kasutada "sünkroonset", vaid ainult "asünkroonset". See on AMD spetsifikatsiooni sünni taust.
AMD on lühend sõnadest "Asünkroonse mooduli definitsioon", mis tähendab "Asünkroonse mooduli definitsioon". See laadib mooduli asünkroonselt ning mooduli koormus ei mõjuta selle järgnevate lausete tööd. Kõik avaldused, mis sõltuvad sellest moodulist, defineeritakse tagasikutsumise funktsioonis, mis ei tööta enne, kui laadimine on lõppenud.
Moodulid peavad olema määratletud kindla define() funktsiooniga.
•ID: string, mooduli nimi (valikuline) •sõltuvused: on sõltuv moodul, mida soovime laadida (valikuline), kasutades suhtelist teed. , pane tähele, et tegemist on massiivi formaadiga •tehas: tehase meetod, tagastab mooduli funktsiooni Kui moodul ei sõltu teistest moodulitest, saab seda define() funktsioonis otse define() määratleda.
Kui moodul sõltub ka teistest moodulitest, peab define() funktsiooni esimene argument olema massiivi, mis näitab mooduli sõltuvusi.
Kui require() funktsioon laadib ülaltoodud mooduli, laadib see esmalt Lib.js faili.
AMD kasutab mooduli laadimiseks ka require() lauset, kuid erinevalt CommonJS-ist nõuab see kahte parameetrit:
Esimene parameeter [moodul] on massiivi ja selle liikmed on laaditavad moodulid; Teine parameetri tagasikutsumine on tagasikõne funktsioon pärast koormuse õnnestumist. Kui kirjutada eelmine kood AMD kujule ümber, näeb see välja selline:
math.add() ei ole sünkroniseeritud matemaatikamooduli laadimisega ning brauser ei peata animatsiooni. Seega on AMD ilmselgelt sobivam brauserikeskkonnale.
Praegu on kaks peamist Javascripti teeki, mis rakendavad AMD spetsifikatsiooni :require.js ja curl.js.
|