2012-12-10 8 views
6

Abbiamo una grande singola applicazione pagina con circa 200 moduli -RequireJS - ottimizzare per più di un file e caricare su richiesta

Quando usiamo l'ottimizzatore - stiamo finendo con tutti i moduli in un unico file più bello, ecc. Funziona magnificamente.

Ma la nostra è una specie di applicazione multi-tenant in cui ogni utente non ha bisogno di tutti i 200 moduli.

Possiamo sostanzialmente dividere i moduli in 50 moduli comuni, 100 moduli che sono necessarie se il tipo di utente è 'A' e 50 moduli per tipo di utente 'B' ecc

Ora, se il tipo di utente è 'B 'il singolo file ottimizzato scaricato contiene 100 moduli che non vengono mai utilizzati. In qualche modo, se possiamo evitarlo, la dimensione del file sarà molto inferiore, il che aumenterebbe davvero le prestazioni.

In breve, sto cercando questo - Abbiamo gruppi di moduli - Ottimizza il gruppo di moduli nel proprio file - scarica il file corrispondente in base all'utente su richiesta.

È possibile eseguire questo tipo di ottimizzazione con requireJS?

Grazie, J.

risposta

0

si potrebbe costruire un modulo di base con tutte le cose che avete bisogno per avviare l'applicazione e la roba maggior parte degli utenti vedranno. From the docs:

l'ottimizzatore combinare solo moduli specificati nelle matrici di stringhe che vengono passati al livello superiore richiedere e definire chiamate, o require ('nome') chiamate letterali stringa in una semplificata Involucro comune. Quindi, non troverà i moduli che vengono caricati tramite un nome variabile

...

Questo comportamento consente il caricamento dinamico di moduli, anche dopo l'ottimizzazione. È sempre possibile aggiungere in modo esplicito moduli non rilevati tramite l'analisi statica dell'ottimizzatore utilizzando l'opzione di inclusione.

Tutti i moduli che non volete avere in là, devono essere richiesti in questo modo nei moduli:

define(["require"], function(require) { 
     return function(b) { 
      var lib = 'lib' 
      var a = require(lib); 
      a.doSomething(b); 
     } 
    } 
); 

in modo che non sarà parte del vostro carico iniziale, ma caricati quando necessario.

+1

I moduli che fanno parte del mio carico iniziale sono combinati in un unico file e vi è una sola richiesta HTTP per caricare quel file, ma per i moduli che non fanno parte del mio carico iniziale, verrà inviata una richiesta HTTP separata per ogni modulo, questa è la parte che sto cercando di ottimizzare. –

+0

Hai trovato qualche soluzione @joinhbk? Ho lo stesso problema. – luissquall

+0

@luissquall Anche qui, hai trovato una soluzione? – Philip

0

Sembra che sarebbe meglio suddividere l'app singola in due app singole che condividono il codice comune come descritto nella documentazione richiesta Optimizing a multi-page project.

Ciò significa che per qualsiasi cosa condivisa per i tipi utente A e B deve esserci una richiesta HTTP e quindi per l'utente di tipo A o B un'altra richiesta HTTP con i moduli specifici per quel tipo di modulo.