Този пост беше последно редактиран от Summer на 2019-2-13 14:04
През 2009 г. американският програмист Райън Дал създаде node.js проект за използване на езика JavaScript за програмиране от страна на сървъра.
Това бележи раждането на "модулното програмиране на Javascript". Сложността на фронтенда е ограничена и е приемливо да няма модули, но от страна на сървъра трябва да има модули, които да взаимодействат с операционната система и други приложения, в противен случай изобщо не може да бъде програмиран.
Една от най-важните идеи в програмирането на възли са модулите, и именно тази идея прави възможно мащабното инженерство на JavaScript. Модулното програмиране беше популярно в JS света и се базираше на това, а от страна на браузъра се появиха и инструменти като requirejs и seajs, така да се каже, според съответната спецификация, изискваща управлявано цялото модулно програмиране преди ES6, дори сега, преди модулът ES6 да бъде напълно реализиран.
В CommonJS модулът за експозиция използва module.exports и exports, и много хора не разбират защо има два изложени обекта, които ще бъдат въведени по-късно
В CommonJS съществува глобален метод require(), който се използва за зареждане на модули. Ако приемем, че има математически модул math.js, може да се зареди по този начин.
След това можете да извикнете методите, предоставени от модула:
Именно заради метода на изискване, използван от CommonJS, методът на изискване, използван от AMD и CMD, по-късно се използва и за обозначаване на стил модули
Спецификация на AMD
При сървърните модули е естествено всеки да иска клиентски такива. И е най-добре двете да са съвместими и модулът да може да работи както на сървъра, така и на браузъра без модификации.
Въпреки това, има сериозно ограничение, което прави спецификацията CommonJS неприложима за браузърни среди. Все пак кодът от предишната секция, ако работи в браузър, ще има голям проблем
Вторият ред math.add(2, 3) се изпълнява след първия ред require('math'), така че трябва да изчака зареждането math.js да приключи. Тоест, ако времето за зареждане е дълго, цялото приложение ще спре там и ще чака.
Това не е проблем от страна на сървъра, тъй като всички модули се съхраняват на локалния твърд диск и могат да се зареждат синхронно, а времето за изчакване е времето за четене на твърдия диск. Въпреки това, за браузърите това е голям проблем, тъй като модулите се поставят от страна на сървъра, а времето за изчакване зависи от скоростта на интернет скоростта, което може да отнеме много време, а браузърът е в състояние на "суспендиране на смърт".
Следователно, модулите от страна на браузъра не могат да използват "синхронен", а могат да използват само "асинхронен". Това е предисторията за раждането на спецификацията AMD.
AMD е съкращение от "Дефиниция на асинхронен модул", което означава "Дефиниция на асинхронен модул". Той зарежда модула асинхронно, а зареждането на модула не влияе на работата на следващите му оператори. Всички оператори, които зависят от този модул, са дефинирани в функция за обратно извикване, която няма да се изпълни, докато зареждането не приключи.
Модулите трябва да бъдат дефинирани с конкретна функция define().
•ID: низ, име на модул (по избор) •зависимости: е зависимият модул, който искаме да заредим (по избор), използвайки относителния път. , обърнете внимание, че това е масивен формат •factory: фабричен метод, връща модулна функция Ако модулът не зависи от други модули, той може да бъде дефиниран директно във функцията define().
Ако модулът зависи и от други модули, тогава първият аргумент на функцията define() трябва да бъде масив, който показва зависимостите на модула.
Когато функцията require() зареди горния модул, първо ще зареди Lib.js файл.
AMD също използва оператора require() за зареждане на модула, но за разлика от CommonJS, той изисква два параметъра:
Първият параметър [модул] е масив, а членовете в него са модулите, които трябва да се заредят; Вторият параметърен обратен сигнал е функцията за обратно извикване след успешно зареждане. Ако пренапишете предишния код във формата на AMD, изглежда така:
math.add() не е синхронизиран с зареждането на математически модули и браузърът не прекъсва анимацията. Очевидно AMD е по-подходящ за браузърната среда.
В момента има две основни библиотеки на Javascript, които реализират спецификациите на AMD :require.js и curl.js.
|