Scelta di un caricatore asincrono JavaScript [chiuso]


9

Ho esaminato vari caricatori di risorse asincroni e non sono ancora sicuro di quale utilizzare. Dove lavoro, abbiamo diversi sforzi di gruppo i cui moduli di classe possono usare diverse versioni di jQuery (ecc.). Pertanto, anche le dipendenze nidificate possono differire. Non ho alcun controllo su questo, quindi questo significa che devo caricare dinamicamente risorse che potrebbero usare versioni alternative della stessa libreria.

Come tale, ecco i miei requisiti:

  1. Caricare i file di risorse JavaScript e CSS in modo asincrono.
  2. Gestire l'ordine delle dipendenze e le dipendenze nidificate tra le versioni.
  3. Rileva se una risorsa è già caricata.
  4. Deve consentire il caricamento tra domini (CDN)
  5. (facoltativo) Consentici di scaricare una risorsa.

Ho visto:

Potrei essere in grado di fingere questi requisiti da solo caricando le versioni in variabili correttamente posizionate e usando un array per tracciare ciò che è già caricato ... ma (si spera) qualcuno lo ha già inventato.

Quindi le mie domande sono:

  • Quali usi? E perché?
  • Ce ne sono altri che soddisfano pienamente le mie esigenze?
  • Qual è il più eloquente e il più semplice con cui lavorare? E perché?

AGGIORNAMENTO:
Per chi fosse interessato, ho provato tutte le librerie AMD sopra (e altre). Alla fine, sono andato con RequireJS . È semplicemente più pulito e più semplice nel complesso ... e sono felice di usarlo.


Per JavaScript, non penso che il numero 5 sia nemmeno possibile. Potrebbe essere teoricamente possibile per i CSS, ma non sono sicuro che alcuni browser lo supportino.
Mike Baranczak,

@Mike Grazie per aver commentato! Se il caricatore asincrono ha rintracciato e popolato le risorse usando le variabili oggetto ... è completamente possibile.
Prigioniero ZERO,

Giusto, ma il NUOVO costruttore duplicherà l'oggetto, quindi se crei una nuova di qualcosa che hai chiamato, esisterà ancora lì. Perché dovresti scaricarlo comunque?
Incognito,

@ user1525 Grazie per aver commentato! Lo scarico delle risorse consente di risparmiare memoria. Modificherò la mia domanda sopra con alcune riflessioni sul tuo commento (tra qualche minuto). Grazie ancora!
Prigioniero ZERO,

jQuery ha già una getScriptfunzione per l'iniezione di script.
zzzzBov,

Risposte:


7

Ho usato RequireJS per progetti seri e lo adoro, ma non è davvero pensato per essere un caricatore asincrono. È davvero pensato per essere un sistema modulare. Il caricamento asincrono viene fornito in servizio a tale obiettivo. Può essere spinto per soddisfare qualsiasi tua esigenza, ma i suoi servizi di caricamento sono progettati per caricare moduli, non file arbitrari.

Carica file di risorse JavaScript e CSS in modo asincrono : Requirejs carica tutti i moduli necessari utilizzando l'iniezione di tag script, in modo asincrono.

Gestisci l'ordine delle dipendenze e le dipendenze nidificate tra le versioni : è qui che brilla RequireJS. I moduli possono dichiarare dipendenze da altri moduli e l'ordine di caricamento verrà estrapolato da tale dichiarazione di dipendenza. C'è anche un plug-in per gli ordini, che può forzare l'ordine sulle dipendenze.

Rileva se una risorsa è già caricata : Requirejs caricherà un modulo una sola volta.

Deve consentire il caricamento tra domini (CDN) : questo è possibile, ma richiede una configurazione; È possibile impostare un URL specifico per qualsiasi modulo, che sostituirà la posizione predefinita, quindi è possibile impostarlo su una rete CDN.

RequireJS funzionerà al meglio se scrivi moduli usando il suo formato, e sarà meno efficace se lo stai usando per caricare javascript non elaborato.

Fornisce inoltre un processo di generazione che unirà i moduli in un unico file per la produzione.


3

In teoria potresti semplicemente tenere un elenco di script già caricati e creare una funzione che carica script che non sono stati ancora caricati.

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


2
O usa Curl / RequireJS hanno questa e più funzionalità. E non devi mantenerlo da solo;)
Raynos,

Hai dimenticato di menzionare la struttura chiara e le inclusioni non relative.
Incognito,

2

Se stai guardando RequireJS e vuoi dipendere da file CSS, puoi controllare il plugin CSSP RequireJS :

CSS con imbottitura. Questo progetto implementa un plug-in per il progetto RequireJS che consente ai moduli di elencare i file CSS come dipendenze. Ciò consente a RequireJS di attendere fino a quando non saranno note regole di stile specifiche prima che venga rilasciato il modulo JavaScript da valutare. Ciò sarebbe utile se, ad esempio, se il modulo JavaScript richiedesse l'applicazione di alcune regole CSS, definite in un file separato, al DOM prima che potesse essere inizializzato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.