Я просматривал различные асинхронные загрузчики ресурсов и не уверен, какой из них использовать. Там, где я работаю, у нас разрозненные групповые усилия, чьи модули классов могут использовать разные версии jQuery (и т. Д.). Как таковые, вложенные зависимости также могут отличаться. У меня нет контроля над этим, так что это означает, что мне нужно динамически загружать ресурсы, которые могут использовать альтернативные версии одной и той же библиотеки.
Таким образом, вот мои требования:
- Загружайте файлы ресурсов JavaScript и CSS асинхронно.
- Управляйте порядком зависимости и вложенными зависимостями между версиями.
- Определить, если ресурс уже загружен.
- Должен учитывать междоменную загрузку (CDN)
- (необязательно) Позвольте нам выгрузить ресурс.
Я смотрю на:
Я мог бы подделать эти требования самостоятельно, загружая версии в переменные с соответствующим пространством имен и используя массив для отслеживания того, что уже загружено ... но (надеюсь) кто-то уже изобрел это.
Итак, мои вопросы:
- Какие из них вы используете? И почему?
- Есть ли другие, которые полностью удовлетворяют моим требованиям?
- Какие из них вы считаете наиболее красноречивыми и простыми в работе? И почему?
ОБНОВЛЕНИЕ:
Для заинтересованных, я попробовал все библиотеки AMD выше (и больше). В итоге я пошел с RequireJS . Это просто чище и проще в целом ... и я рад, что использую его.
источник
getScript
функция для внедрения скрипта.Ответы:
Я использовал RequireJS в серьезных проектах, и мне это нравится, но на самом деле он не предназначен для асинхронного загрузчика. Это действительно должна быть модульная система. Для этой цели предоставляется асинхронная загрузка. Его можно заставить выполнить любое из ваших требований, но его сервисы загрузки предназначены для загрузки модулей, а не произвольных файлов.
Загружайте файлы ресурсов JavaScript и CSS асинхронно : Requirejs загружает любые модули, которые вам требуются, с помощью инъекции тега скрипта, поэтому асинхронно.
Управление порядком зависимостей и вложенными зависимостями в разных версиях . Именно здесь RequireJS Shines. Модули могут объявлять зависимости от других модулей, и порядок загрузки будет экстраполирован из этого объявления зависимости. Существует также плагин заказа, который может навести порядок на зависимости.
Определите, загружен ли уже ресурс : Requirejs загрузит модуль только один раз.
Должен учитывать междоменную загрузку (CDN) : это возможно, но требует некоторой настройки; Вы можете установить конкретный URL для любого модуля, и он заменит местоположение по умолчанию, поэтому вы можете установить его в CDN.
RequireJS будет работать лучше всего, если вы будете писать модули, используя его формат, и будет наименее эффективным, если вы будете использовать его для загрузки необработанного JavaScript.
Он также предоставляет процесс сборки, который объединит ваши модули в один файл для производства.
источник
Теоретически вы можете просто сохранить список уже загруженных скриптов и создать функцию, которая загружает скрипты, которые еще не были загружены.
http://jsfiddle.net/BDG/Dhdu7/2/
источник
Если вы смотрите на RequireJS и хотите зависеть от CSS-файлов, вы можете воспользоваться плагином CSSP RequireJS :
источник