Выбор Asynch-Loader для JavaScript [закрыто]

9

Я просматривал различные асинхронные загрузчики ресурсов и не уверен, какой из них использовать. Там, где я работаю, у нас разрозненные групповые усилия, чьи модули классов могут использовать разные версии jQuery (и т. Д.). Как таковые, вложенные зависимости также могут отличаться. У меня нет контроля над этим, так что это означает, что мне нужно динамически загружать ресурсы, которые могут использовать альтернативные версии одной и той же библиотеки.

Таким образом, вот мои требования:

  1. Загружайте файлы ресурсов JavaScript и CSS асинхронно.
  2. Управляйте порядком зависимости и вложенными зависимостями между версиями.
  3. Определить, если ресурс уже загружен.
  4. Должен учитывать междоменную загрузку (CDN)
  5. (необязательно) Позвольте нам выгрузить ресурс.

Я смотрю на:

Я мог бы подделать эти требования самостоятельно, загружая версии в переменные с соответствующим пространством имен и используя массив для отслеживания того, что уже загружено ... но (надеюсь) кто-то уже изобрел это.

Итак, мои вопросы:

  • Какие из них вы используете? И почему?
  • Есть ли другие, которые полностью удовлетворяют моим требованиям?
  • Какие из них вы считаете наиболее красноречивыми и простыми в работе? И почему?

ОБНОВЛЕНИЕ:
Для заинтересованных, я попробовал все библиотеки AMD выше (и больше). В итоге я пошел с RequireJS . Это просто чище и проще в целом ... и я рад, что использую его.

Узник ноль
источник
Для JavaScript я не думаю, что # 5 даже возможно. Это может быть теоретически возможно для CSS, но я не уверен, что какие-либо браузеры поддерживают это.
Майк Баранчак
@Mike Спасибо за комментарии! Если асинхронный загрузчик отслеживал и заполнял ресурсы с использованием объектных переменных ... это вполне возможно.
Заключенный НОЛЬ
Правильно, но конструктор NEW будет дублировать объект, поэтому, если вы создадите новый объект, который вызывали, он все равно будет там существовать. Зачем вы все равно его разгрузите?
Инкогнито
@ user1525 Спасибо за комментарий! Выгрузка ресурсов экономит память. Я отредактирую свой вопрос выше с некоторыми мыслями о вашем комментарии (через несколько минут). Еще раз спасибо!
Заключенный НОЛЬ
В jQuery уже есть getScriptфункция для внедрения скрипта.
zzzzBov

Ответы:

7

Я использовал RequireJS в серьезных проектах, и мне это нравится, но на самом деле он не предназначен для асинхронного загрузчика. Это действительно должна быть модульная система. Для этой цели предоставляется асинхронная загрузка. Его можно заставить выполнить любое из ваших требований, но его сервисы загрузки предназначены для загрузки модулей, а не произвольных файлов.

Загружайте файлы ресурсов JavaScript и CSS асинхронно : Requirejs загружает любые модули, которые вам требуются, с помощью инъекции тега скрипта, поэтому асинхронно.

Управление порядком зависимостей и вложенными зависимостями в разных версиях . Именно здесь RequireJS Shines. Модули могут объявлять зависимости от других модулей, и порядок загрузки будет экстраполирован из этого объявления зависимости. Существует также плагин заказа, который может навести порядок на зависимости.

Определите, загружен ли уже ресурс : Requirejs загрузит модуль только один раз.

Должен учитывать междоменную загрузку (CDN) : это возможно, но требует некоторой настройки; Вы можете установить конкретный URL для любого модуля, и он заменит местоположение по умолчанию, поэтому вы можете установить его в CDN.

RequireJS будет работать лучше всего, если вы будете писать модули, используя его формат, и будет наименее эффективным, если вы будете использовать его для загрузки необработанного JavaScript.

Он также предоставляет процесс сборки, который объединит ваши модули в один файл для производства.

Шон Макмиллан
источник
3

Теоретически вы можете просто сохранить список уже загруженных скриптов и создать функцию, которая загружает скрипты, которые еще не были загружены.

http://jsfiddle.net/BDG/Dhdu7/2/

Инкогнито
источник
2
Или используйте Curl / RequireJS, они имеют эту и другие функции. И вам не нужно поддерживать это самостоятельно;)
Raynos
Вы забыли упомянуть четкую структуру и не относительные включения.
Инкогнито
2

Если вы смотрите на RequireJS и хотите зависеть от CSS-файлов, вы можете воспользоваться плагином CSSP RequireJS :

CSS с отступом. Этот проект реализует плагин для проекта RequireJS, который позволяет модулям перечислять файлы CSS как зависимости. Это позволяет RequireJS ждать, пока не станут известны конкретные правила стиля, прежде чем он выпустит модуль JavaScript для оценки. Это было бы полезно, если, например, если вашему модулю JavaScript требуются определенные правила CSS, определенные в отдельном файле, для применения к DOM до его инициализации.

Пит О
источник