Вибір асинхронного завантажувача JavaScript [закрито]


9

Я дивився на різні асинхронні завантажувачі ресурсів і не знаю, який з них ще використовувати. Там, де я працюю, у нас є різні групи зусиль, класові модулі яких можуть використовувати різні версії jQuery (тощо). Як такі, вкладені залежності можуть також відрізнятися. Я не маю контролю над цим, тому це означає, що мені потрібно динамічно завантажувати ресурси, які можуть використовувати альтернативні версії однієї бібліотеки.

Ось такі мої вимоги:

  1. Асинхронно завантажуйте файли ресурсів JavaScript та CSS.
  2. Керуйте залежністю та вкладеними залежностями у різних версіях.
  3. Визначте, якщо ресурс уже завантажений.
  4. Повинен дозволити завантаження між доменами (CDN)
  5. (необов’язково) Дозвольте нам вивантажити ресурс.

Я дивився на:

Я можу власноруч підробити ці вимоги, завантажуючи версії в змінні, розміщені правильно імена, та використовуючи масив для відстеження того, що вже завантажено ... але (сподіваюся), хтось це вже винайшов.

Отже, мої запитання:

  • Які ви використовуєте? І чому?
  • Чи є інші, які повністю задовольняють мої вимоги?
  • З якими ви вважаєте найбільш красномовними та найпростішими працювати? І чому?

ОНОВЛЕННЯ:
Для тих, хто цікавиться, я спробував усі бібліотеки AMD вище (та більше). Зрештою, я поїхав з RequireJS . Це просто чистіше і просто в цілому ... і я радий, що ним користуюся.


Що стосується JavaScript, я не думаю, що №5 навіть можливий. Це може бути теоретично можливим для CSS, але я не впевнений, чи підтримують це будь-які браузери.
Майк Баранчак

@Mike Дякую за коментар! Якщо асинхрон-завантажувач відслідковує та заповнюється ресурси за допомогою об'єктних змінних ... це цілком можливо.
В'язень ЗЕРО

Правильно, але НОВИЙ конструктор буде дублювати об’єкт, тому якщо ви створите нове з чогось, до якого ви зателефонували, він все одно буде існувати там. Навіщо ви все-таки розвантажувати це?
інкогніто

@ 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, вони мають цю та інші функції. І вам не доведеться це підтримувати самостійно;)
Райнос

Ви забули згадати чітку структуру і не відносні включення.
інкогніто

2

Якщо ви шукаєте RequireJS і хочете залежати від файлів CSS, ви можете перевірити плагін CSSP RequireJS :

CSS з Padding. Цей проект реалізує плагін для проекту RequireJS, який дозволяє модулям перелічувати файли CSS як залежності. Це дозволяє RequireJS чекати, поки будуть відомі чинності конкретних правил стилю, перш ніж він випустить модуль JavaScript для оцінки. Це було б корисно, якщо, наприклад, якщо ваш модуль JavaScript вимагав, щоб певні правила CSS, визначені в окремому файлі, були застосовані до DOM до його ініціалізації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.