Ezt a bejegyzést utoljára Summer szerkesztette: 2019-2-13, 14:04
2009-ben az amerikai programozó, Ryan Dahl létrehozott node.js projektet, amely a JavaScript nyelvet használja szerveroldali programozáshoz.
Ez a "Javascript moduláris programozás" születését jelzi. A frontend összetettsége korlátozott, és rendben van, ha nincsenek modulok, de a szerver oldalon moduloknak kell lenniük, amelyek az operációs rendszerrel és más alkalmazásokkal interakcióba léphetnek, különben egyáltalán nem programozható.
A csomópont-programozás egyik legfontosabb ötlete a modulok, és ez az ekép teszi lehetővé a JavaScript nagyszabású mérnöki megvalósítását. A moduláris programozás népszerű volt a JS világában, és ezen alapult, majd a böngésző oldalon megjelentek olyan eszközkészletek, mint a requirejs és a seajs, úgymondom, a megfelelő specifikáció alá tartozó előírások szerint minden moduláris programozást az ES6 előtt, még most is, még az ES6 modul teljes megvalósítása előtt is.
A CommonJS-ben az expozíciós modul a module.exports és exports funkciókat használja, és sokan nem értik, miért van két exponált objektum, amelyeket később bemutatunk
A CommonJS-ben létezik egy globális require() módszer, amelyet modulok betöltésére használnak. Ha van math.js matematikai modul, így be lehet tölteni.
Ezután hívhatod a modul által biztosított metódusokat:
Éppen a CommonJS által használt required módszer miatt az AMD és a CMD által később használt require módszert is használták a modulok stílusára
AMD specifikáció
Szerveroldali moduloknál természetes, hogy mindenki kliensoldali modulokat szeretne használni. És a legjobb, ha a kettő kompatibilis, és egy modul módosítás nélkül fut mind a szerveren, mind a böngészőn.
Ugyanakkor van egy jelentős korlát, amely miatt a CommonJS specifikáció nem alkalmazható böngészőkörnyezetekben. Még mindig az előző rész kódja, ha böngészőben fut, nagy probléma lesz
A második sor math.add(2, 3) az első sorra ('math') után fut, így várnia kell, hogy math.js betöltés befejeződjön. Vagyis ha hosszú a betöltési idő, az egész alkalmazás ott megáll és vár.
Ez nem probléma a szerver oldalon, mivel minden modul a helyi merevlemezen van tárolva, és szinkron módon tölthető, a várakozási idő pedig a merevlemez olvasási ideje. Azonban böngészők esetében ez nagy probléma, mivel a modulok a szerver oldalon helyezkednek el, és a várakozási idő az internet sebességétől függ, ami sokáig tarthat, és a böngésző "felfüggesztett halál" állapotban van.
Ezért a böngészőoldali modulok nem használhatják a "szinkron" funkciót, hanem csak az "aszinkron" funkciót. Ez az AMD specifikáció születésének háttere.
Az AMD a "Aszinkron modul definíció" rövidítése, ami azt jelenti, hogy "aszinkron modul definíció". Aszinkron módon tölti be a modult, és a modul betöltése nem befolyásolja a következő állítások működését. Minden olyan állítás, amely ettől a modultól függ, egy visszahívási függvényben definiálható, amely csak a betöltés befejezésével indul el.
A modulokat egy specifikus define() függénnyel kell definiálni.
•ID: string, modul név (opcionális) •dependencies: az a függő modul, amit be akarunk tölteni (opcionális), a relatív út használatával. , megjegyzendő, hogy ez egy tömbformátum •factory: factory method, modul függvényt ad vissza Ha egy modul nem függ más moduloktól, akkor közvetlenül definiálható a define() függvényben.
Ha a modul más moduloktól is függ, akkor a define() függvény első argumentumának egy olyan tömbnek kell lennie, amely jelzi a modul függőségeit.
Amikor a require() függvény betölti a fenti modult, először Lib.js fájlt tölti be.
Az AMD a require() utasítást is használja a modul betöltéséhez, de a CommonJS-szel ellentétben két paramétert igényel:
Az első paraméter [module] egy tömb, és a tagok a betöltésre váró modulok; A második paramétervisszahívás a visszahívás függvény a betöltés sikere után. Ha az előző kódot AMD formába írod át, így néz ki:
A math.add() nem szinkronizált a matematika modul betöltésével, és a böngésző nem szünteti meg az animációt. Tehát nyilvánvalóan az AMD jobban illik a böngészőkörnyezethez.
Jelenleg két fő Javascript könyvtár működik, amelyek az AMD specifikációját hajtják végre :require.js és curl.js.
|