Wybór JavaScript Asynch-Loader [zamknięty]

9

Patrzyłem na różne asynchroniczne programy ładujące zasoby i nie jestem jeszcze pewien, którego użyć. Tam, gdzie pracuję, mamy różne wysiłki grupowe, których moduły klasowe mogą używać różnych wersji jQuery (itp.). W związku z tym zagnieżdżone zależności również mogą się różnić. Nie mam nad tym kontroli, więc oznacza to, że muszę dynamicznie ładować zasoby, które mogą wykorzystywać alternatywne wersje tej samej biblioteki.

Jako takie, oto moje wymagania:

  1. Załaduj pliki zasobów JavaScript i CSS asynchronicznie.
  2. Zarządzaj kolejnością zależności i zagnieżdżonymi zależnościami między wersjami.
  3. Wykryj, czy zasób jest już załadowany.
  4. Musi zezwalać na ładowanie między domenami (CDN)
  5. (opcjonalnie) Pozwól nam rozładować zasób.

Patrzyłem na:

Mogę być w stanie sam sfałszować te wymagania, ładując wersje do zmiennych o odpowiednich nazwach i używając tablicy do śledzenia tego, co jest już załadowane ... ale (mam nadzieję) ktoś już to wymyślił.

Więc moje pytania to:

  • Z których korzystasz? I dlaczego?
  • Czy są inne, które w pełni spełniają moje wymagania?
  • Która z nich jest najbardziej wymowna i najłatwiejsza w obsłudze? I dlaczego?

AKTUALIZACJA:
Dla zainteresowanych wypróbowałem wszystkie biblioteki AMD powyżej (i więcej). W końcu poszedłem z RequireJS . Ogólnie jest po prostu czystszy i łatwiejszy ... i cieszę się, że go używam.

Więzień ZERO
źródło
W przypadku JavaScript nie sądzę, że # 5 jest nawet możliwy. Teoretycznie jest to możliwe w przypadku CSS, ale nie jestem pewien, czy którakolwiek przeglądarka to obsługuje.
Mike Baranczak
@Mike Dzięki za komentowanie! Jeśli moduł ładujący asynch śledzi i zapełnia zasoby za pomocą zmiennych obiektowych ... jest to całkowicie możliwe.
Więzień ZERO
Racja, ale konstruktor NEW zduplikuje obiekt, więc jeśli utworzysz nowy z czegoś, co wywołałeś, nadal tam będzie. Dlaczego i tak go rozładowałeś?
Incognito
@ user1525 Dziękujemy za komentowanie! Zwalnianie zasobów oszczędza pamięć. Wyedytuję moje pytanie powyżej z przemyśleniami na temat twojego komentarza (za kilka minut). Dzięki jeszcze raz!
Więzień ZERO
jQuery ma już getScriptfunkcję wstrzykiwania skryptu.
zzzzBov,

Odpowiedzi:

7

Korzystałem z RequireJS przy poważnych projektach i uwielbiam to, ale tak naprawdę to nie ma być asynchronicznym programem ładującym. To naprawdę ma być system modułowy. W tym celu zapewnia się ładowanie asynchroniczne. Można go wypchnąć, aby spełnić dowolne wymagania, ale jego usługi ładowania służą do ładowania modułów, a nie dowolnych plików.

Ładuj pliki zasobów JavaScript i CSS asynchronicznie : Requirejs ładuje wszystkie moduły, których potrzebujesz, używając wstrzykiwania znaczników skryptu, więc asynchronicznie.

Zarządzaj kolejnością zależności i zależnościami zagnieżdżonymi między wersjami : Tutaj świeci RequireJS. Moduły mogą deklarować zależności od innych modułów, a kolejność ładowania zostanie ekstrapolowana z tej deklaracji zależności. Istnieje również wtyczka do zamówień, która może wymuszać porządek na podstawie zależności.

Wykryj, czy zasób jest już załadowany : Requirejs załaduje moduł tylko raz.

Musi zezwalać na ładowanie między domenami (CDN) : Jest to możliwe, ale wymaga pewnej konfiguracji; Możesz ustawić określony adres URL dla dowolnego modułu, który zastąpi domyślną lokalizację, dzięki czemu możesz ustawić ją na CDN.

RequireJS będzie działał najlepiej, jeśli piszesz moduły w jego formacie, i będzie najmniej skuteczny, jeśli używasz go do ładowania surowego javascript.

Zapewnia również proces kompilacji, który połączy twoje moduły w jeden plik do produkcji.

Sean McMillan
źródło
3

Teoretycznie możesz po prostu zachować listę skryptów już załadowanych i utworzyć funkcję, która ładuje skrypty, które nie zostały jeszcze załadowane.

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

Incognito
źródło
2
Lub użyj Curl / RequireJS, że mają tę i więcej funkcji. I nie musisz sam go utrzymywać;)
Raynos
Zapomniałeś wspomnieć o przejrzystej strukturze i nie-krewnych obejmuje.
Incognito
2

Jeśli patrzysz na RequireJS i chcesz polegać na plikach CSS, możesz pobrać wtyczkę CSSP RequireJS :

CSS z wypełnieniem. Ten projekt implementuje wtyczkę do projektu RequireJS , która umożliwia modułom wyświetlanie plików CSS jako zależności. Dzięki temu RequireJS musi poczekać, aż określone reguły stylu będą obowiązywać, zanim zwolni moduł JavaScript do oceny. Byłoby to przydatne, jeśli na przykład moduł JavaScript wymagał zastosowania pewnych reguł CSS, zdefiniowanych w osobnym pliku, do zastosowania do DOM przed jego inicjalizacją.

Pete O
źródło