To objavo je nazadnje uredila Summer 13. 2. 2019 ob 14:04
Leta 2009 je ameriški programer Ryan Dahl ustvaril projekt node.js uporabo jezika JavaScript za strežniško programiranje.
To pomeni začetek "Javascript modularnega programiranja". Kompleksnost front-enda je omejena in v redu je, če nimate modulov, vendar morajo na strežniški strani obstajati moduli za interakcijo z operacijskim sistemom in drugimi aplikacijami, sicer jih ni mogoče programirati.
Ena najpomembnejših idej v programiranju vozlišč so moduli, in prav ta ideja omogoča obsežno inženirstvo JavaScripta. Modularno programiranje je bilo priljubljeno v svetu JS in temeljilo je na tem, nato pa so se na strani brskalnika pojavila orodja, kot sta requirejs in seajs, tako rekoč, pod ustrezno specifikacijo, ki so zahtevala vse modularno programiranje pred ES6, tudi danes, preden je bil modul ES6 popolnoma implementiran.
V CommonJS modul za eksponacijo uporablja module.exports in exports, mnogi pa ne razumejo, zakaj sta dva izpostavljena objekta, ki bosta predstavljena kasneje
V CommonJS obstaja globalna metoda require(), ki se uporablja za nalaganje modulov. Če predpostavimo, da obstaja matematični modul math.js, ga je mogoče naložiti tako.
Metode, ki jih ponuja modul, lahko nato poimenujete:
Prav zaradi metode zahteva, ki jo uporablja CommonJS, je metoda zahteva, ki sta jo uporabljala AMD in CMD, kasneje uporabljena tudi za označevanje sloga modulov
Specifikacija AMD
Pri strežniških modulih je naravno, da si vsi želijo modulov na strani odjemalca. In najbolje je, da sta oba združljiva in da lahko modul teče tako na strežniku kot v brskalniku brez sprememb.
Vendar pa obstaja velika omejitev, zaradi katere specifikacija CommonJS ni uporabna za brskalniška okolja. Še vedno koda iz prejšnjega razdelka, če deluje v brskalniku, bo velika težava
Druga vrstica math.add(2, 3) teče po prvi vrstici zahteva('math'), zato mora počakati, da se math.js naložitev. Če je čas nalaganja dolg, se celotna aplikacija tam ustavi in počaka.
To ni problem na strežniški strani, saj so vsi moduli shranjeni na lokalnem trdem disku in jih je mogoče naložiti sinhrono, čas čakanja pa je čas branja trdega diska. Vendar pa je to za brskalnike velik problem, saj so moduli nameščeni na strežniški strani, čas čakanja pa je odvisen od hitrosti interneta, kar lahko traja dolgo, brskalnik pa je v stanju "suspendirane smrti".
Zato moduli na strani brskalnika ne morejo uporabljati "sinhronog", lahko pa le "asinhrono". To je ozadje rojstva AMD specifikacije.
AMD je okrajšava za "Asinhrono definicijo modula", kar pomeni "Definicija asinhronega modula". Modul se naloži asinhrono, nalaganje modula pa ne vpliva na delovanje njegovih naslednjih stavkov. Vse stavke, ki so odvisne od tega modula, so definirane v funkciji za povratni klic, ki se ne bo zagnala, dokler nalaganje ni končano.
Module je treba definirati s specifično funkcijo define().
•ID: niz, ime modula (neobvezno) •odvisnosti: je odvisni modul, ki ga želimo naložiti (opcijsko), z uporabo relativne poti. , upoštevajte, da gre za format polja •tovarna: tovarniška metoda, vrne funkcijo modula Če modul ni odvisen od drugih modulov, ga lahko definiramo neposredno v funkciji define().
Če modul je odvisen tudi od drugih modulov, mora biti prvi argument funkcije define() polje, ki označuje odvisnosti modula.
Ko funkcija zahteva() naloži zgornji modul, bo najprej naložila Lib.js datoteko.
AMD prav tako uporablja ukaz require() za nalaganje modula, vendar za razliko od CommonJS zahteva dva parametra:
Prvi parameter [modul] je polje, elementi v njem pa so moduli, ki jih je treba naložiti; Drugi parameter povratni klic je funkcija povratnega klica po uspešnem obremenitvi. Če prepišeš prejšnjo kodo v AMD obliko, izgleda takole:
math.add() ni sinhroniziran z nalaganjem matematičnih modulov in brskalnik ne prekine animacije. Torej je AMD očitno bolj primeren za okolje brskalnikov.
Trenutno obstajata dve glavni Javascript knjižnici, ki implementirata AMD specifikaciji :require.js in curl.js.
|