Tätä julkaisua on viimeksi muokannut Summer 13.2.2019 klo 14:04
Vuonna 2009 amerikkalainen ohjelmoija Ryan Dahl loi node.js projektin, jossa käytetään JavaScript-kieltä palvelinpuolen ohjelmointiin.
Tämä merkitsee "Javascript-modulaarisen ohjelmoinnin" syntyä. Front-endin monimutkaisuus on rajallinen, ja on ihan ok, ettei moduuleja ole, mutta palvelinpuolella täytyy olla moduuleja, jotka voivat olla vuorovaikutuksessa käyttöjärjestelmän ja muiden sovellusten kanssa, muuten sitä ei voi ohjelmoida lainkaan.
Yksi tärkeimmistä ideoista solmuohjelmoinnissa ovat moduulit, ja juuri tämä ajatus mahdollistaa JavaScriptin laajamittaisen suunnittelun. Modulaarinen ohjelmointi oli suosittua JS-maailmassa, ja se perustui tähän, ja sitten selainpuolella ilmestyivät myös työkalupakit kuten requirejs ja seajs, niin sanotusti, vastaavan spesifikaation mukaisesti, vaativat hallitsevat kaiken modulaarisen ohjelmoinnin ennen ES6:ta, jopa nyt, ennen kuin ES6-moduuli oli täysin toteutettu.
CommonJS:ssä altistusmoduuli käyttää module.exportsia ja exportsia, ja monet eivät ymmärrä, miksi on kaksi altistunutta objektia, jotka esitellään myöhemmin
CommonJS:ssä on globaali menetelmä require(), jota käytetään moduulien lataamiseen. Oletetaan, että matemaattinen moduuli on math.js, se voidaan ladata näin.
Voit sitten kutsua moduulin tarjoamia metodeja:
Juuri CommonJS:n käyttämän vaatimismenetelmän vuoksi AMD:n ja CMD:n käyttämä vaatimusmenetelmä viittasi myöhemmin moduulien tyyliin
AMD:n määrittely
Palvelinpuolen moduuleissa on luonnollista, että kaikki haluavat asiakaspuolen moduuleja. Ja on parasta, että molemmat ovat yhteensopivia, ja moduuli voi toimia sekä palvelimella että selaimella ilman muutoksia.
Kuitenkin on olemassa merkittävä rajoitus, joka tekee CommonJS-määrittelystä käyttökelvottoman selainympäristöissä. Silti edellisen osion koodi, jos se ajetaan selaimessa, tulee iso ongelma
Toinen rivi math.add(2, 3) käynnistyy ensimmäisen rivin vaatimuksen ('math') jälkeen, joten sen täytyy odottaa, että math.js lataus valmistuu. Eli jos latausaika on pitkä, koko sovellus pysähtyy siihen ja odottaa.
Tämä ei ole ongelma palvelinpuolella, koska kaikki moduulit tallennetaan paikalliselle kiintolevylle ja ne voidaan ladata synkronisesti, ja odotusaika on kiintolevyn lukuaika. Selaimille tämä on kuitenkin iso ongelma, koska moduulit sijoitetaan palvelinpuolelle, ja odotusaika riippuu internetin nopeudesta, joka voi kestää kauan, ja selain on "keskeytetyn kuoleman" tilassa.
Siksi selaimen puolen moduulit eivät voi käyttää "synkronista", vaan ainoastaan "asynkronista". Tämä on tausta AMD-määrittelyn syntylle.
AMD on lyhenne sanoista "Asynchronous Module Definition", joka tarkoittaa "Asynchronous Module Definition". Se lataa moduulin asynkronisesti, eikä moduulin kuormitus vaikuta sen myöhempien lauseiden toimintaan. Kaikki lauseet, jotka riippuvat tästä moduulista, määritellään callback-funktiossa, joka ei käynnisty ennen kuin lataus on valmis.
Moduulit on määriteltävä tietyllä define()-funktiolla.
•ID: merkkijono, moduulin nimi (valinnainen) •Dependencies: on riippuvainen moduuli, jonka haluamme ladata (valinnaisena), käyttäen suhteellista polkua. , huomaa, että kyseessä on taulukkomuoto •tehdas: tehdasmenetelmä, palauttaa moduulifunktion Jos moduuli ei riipu muista moduuleista, se voidaan määritellä suoraan define()-funktiossa.
Jos moduuli riippuu myös muista moduuleista, define()-funktion ensimmäisen argumentin täytyy olla taulukko, joka ilmaisee moduulin riippuvuudet.
Kun require()-funktio lataa yllä mainitun moduulin, se lataa ensin Lib.js tiedoston.
AMD käyttää myös require()-lausetta moduulin lataamiseen, mutta toisin kuin CommonJS, se vaatii kaksi parametria:
Ensimmäinen parametri [module] on taulukko, ja sen jäsenet ovat ladattavat moduulit; Toinen parametrin takaisinkutsu on callback-funktio kuormituksen onnistumisen jälkeen. Jos kirjoitat edellisen koodin uudelleen AMD-muotoon, se näyttää tältä:
math.add() ei ole synkronoitu matematiikkamoduulin latauksen kanssa, eikä selain keskeytä animaatiota. Joten on selvää, että AMD sopii paremmin selainympäristöön.
Tällä hetkellä on kaksi pääasiallista Javascript-kirjastoa, jotka toteuttavat AMD-määrittelyn :require.js ja curl.js.
|