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