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:
- Załaduj pliki zasobów JavaScript i CSS asynchronicznie.
- Zarządzaj kolejnością zależności i zagnieżdżonymi zależnościami między wersjami.
- Wykryj, czy zasób jest już załadowany.
- Musi zezwalać na ładowanie między domenami (CDN)
- (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.
źródło
getScript
funkcję wstrzykiwania skryptu.Odpowiedzi:
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.
źródło
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/
źródło
Jeśli patrzysz na RequireJS i chcesz polegać na plikach CSS, możesz pobrać wtyczkę CSSP RequireJS :
źródło