Tento príspevok naposledy upravila Summer 13. 2. 2019 o 14:04
V roku 2009 americký programátor Ryan Dahl vytvoril node.js projekt, ktorý využíva jazyk JavaScript pre programovanie na strane servera.
Toto znamená zrod "Javascript modulárneho programovania". Zložitosť front-endu je obmedzená a je v poriadku nemať žiadne moduly, ale na strane servera musia byť moduly na interakciu s operačným systémom a inými aplikáciami, inak sa to vôbec nedá programovať.
Jednou z najdôležitejších myšlienok v programovaní uzlov sú moduly, a práve táto myšlienka umožňuje rozsiahle inžinierstvo JavaScriptu. Modulárne programovanie bolo populárne vo svete JS a bolo na tom založené, a potom sa na strane prehliadača objavili aj toolkity ako requirejs a seajs, takpovediac, pod príslušnou špecifikáciou, ktoré vyžadovali všetko modulárne programovanie pred ES6, dokonca aj dnes, ešte predtým, než bol modul ES6 plne implementovaný.
V CommonJS modul expozície používa module.exports a exporty a mnohí ľudia nechápu, prečo sú tam dva exponované objekty, ktoré budú predstavené neskôr
V CommonJS existuje globálna metóda require(), ktorá sa používa na načítanie modulov. Za predpokladu, že existuje matematický modul math.js, dá sa načítať takto.
Metódy poskytované modulom potom môžete nazvať:
Práve kvôli metóde require používanej CommonJS bola metóda require používaná AMD a CMD neskôr použitá aj na označenie štýlu modulov
Špecifikácia AMD
Pri serverových moduloch je prirodzené, že každý chce moduly na strane klienta. A je najlepšie, ak sú tieto dva moduly kompatibilné a modul môže bežať na serveri aj prehliadači bez úprav.
Existuje však zásadné obmedzenie, ktoré robí špecifikáciu CommonJS neaplikovateľnou na prostredia prehliadača. Stále kód z predchádzajúcej sekcie, ak beží v prehliadači, bude veľký problém
Druhý riadok math.add(2, 3) beží po požiadavke prvého riadku ('math'), takže musí počkať, kým math.js načítanie skončí. To znamená, že ak je čas načítavania dlhý, celá aplikácia tam zastaví a čaká.
Na strane servera to nie je problém, pretože všetky moduly sú uložené na lokálnom pevnom disku a môžu sa načítať synchronne, pričom čas čakania je čas čítania pevného disku. Pre prehliadače je to však veľký problém, pretože moduly sú umiestnené na strane servera a čas čakania závisí od rýchlosti internetu, čo môže trvať dlho, a prehliadač je v stave "pozastavenej smrti".
Preto moduly na strane prehliadača nemôžu používať "synchronné", ale iba "asynchrónne". Toto je pozadie vzniku špecifikácie AMD.
AMD je skratka pre "Asynchronous Module Definition", čo znamená "Asynchronous Module Definition" (Definícia asynchrónneho modulu). Načítava modul asynchrónne a načítanie modulu neovplyvňuje prevádzku jeho nasledujúcich príkazov. Všetky príkazy, ktoré závisia od tohto modulu, sú definované v callback funkcii, ktorá sa spustí až po dokončení načítania.
Moduly musia byť definované pomocou konkrétnej funkcie define().
•ID: reťazec, názov modulu (voliteľné) •dependencies: je závislý modul, ktorý chceme načítať (voliteľne), používajúc relatívnu cestu. , všimnite si, že ide o formát poľa •Factory: továrenská metóda, vracia modulovú funkciu Ak modul nezávisí od iných modulov, môže byť definovaný priamo vo funkcii define().
Ak modul závisí aj od iných modulov, potom prvým argumentom funkcie define() musí byť pole, ktoré indikuje závislosti modulu.
Keď funkcia require() načíta vyššie uvedený modul, najskôr načíta Lib.js súbor.
AMD tiež používa príkaz require() na načítanie modulu, ale na rozdiel od CommonJS vyžaduje dva parametre:
Prvým parametrom [modul] je pole a prvky v ňom sú moduly, ktoré sa majú načítať; Druhý parameter callback je callback funkcia po úspešnom zaťažení. Ak prepíšete predchádzajúci kód do formy AMD, vyzerá to takto:
math.add() nie je synchronizovaný s načítavaním matematického modulu a prehliadač neprerušuje animáciu. Takže je zrejmé, že AMD je vhodnejšie pre prostredie prehliadača.
V súčasnosti existujú dve hlavné Javascriptové knižnice, ktoré implementujú špecifikáciu AMD :require.js a curl.js.
|