Esportazione ideale in termini di dimensioni per le definizioni di moduli asincroni in JavaScript?

1

Quando si creano i moduli AMD, è possibile esportare ciò che si desidera, sia esso un oggetto o una funzione. Ricordo vagamente leggendo una raccomandazione da qualche parte per esportare solo una cosa; l'idea è di "tenerlo piccolo".

Usando questa filosofia significa che si potrebbe arrivare fino all'esportazione di singole funzioni. E quando questo è accoppiato con l'idea di composizione, molto probabilmente userete una funzione per costruire un'altra funzione. Di conseguenza, quando si carica una pagina che utilizza una funzione altamente composta, è possibile che si scarichi in modo asincrono una manciata di piccoli moduli per creare una funzione composta.

Prendi underscore.js che ha molte funzioni integrate. Ci sono pagine web in cui ho solo bisogno di una o due delle sue funzioni, ma mi trovo un po 'in disaccordo con l'intera libreria come modulo solo per quello. Sono quasi tentato di riscrivere l'una o due funzioni per evitarlo, ma questo va contro l'idea del riuso. Tuttavia, poiché underscore ha diverse dozzine di funzioni, tirarlo giù con un caricatore AMD come RequireJS significa spesso abbattere più del necessario. Se si va all'estremo opposto, decomponendo una libreria come underscore in moduli a funzione singola, si può imbattersi nel già citato problema di tirare un paio di manciate di piccoli moduli quando sono necessarie funzioni altamente composte.

Quindi qual è il verdetto? Come si disegna la linea quando si decide quanto esportare da un modulo AMD? Una funzione è la più piccola unità componibile. Un oggetto che viene esportato è spesso uno spazio dei nomi che offre a una suite funzioni, molte delle quali non vengono utilizzate.

Ho cercato online le discussioni su questo argomento, ma a quanto pare non sono riuscito a trovare i termini di ricerca giusti per individuarli. Se ne sei a conoscenza, ti preghiamo di includere eventuali link in cui è stato discusso per supportare la tua risposta.

    
posta Mario T. Lanza 30.12.2014 - 14:48
fonte

1 risposta

1

Non preoccuparti che le tue esportazioni siano troppo fini o troppo larghe. Questo è ciò che abbiamo per gli strumenti di costruzione.

Se vuoi esportare molti piccoli moduli (o singole funzioni), abbiamo strumenti come RequireJS Optimizer per unire tutto in una singola risorsa. Se vuoi esportare un oggetto namespace di grandi dimensioni con alcune funzioni che potrebbero non essere utilizzate, abbiamo strumenti come Closure Compiler per rimuovere il codice morto.

Organizza i tuoi moduli in modo che tu stia bene e fai in modo che ogni singolo script esporti ciò di cui ha bisogno per esportare. Lascia che gli strumenti gestiscano il resto.

Si noti inoltre che mentre AMD consente più define s in un singolo file sorgente, tramite moduli con nome esplicito, questo non è raccomandato. Ogni file sorgente dovrebbe solo definire un singolo modulo e dovrebbe essere anonimo. I moduli con nome sono destinati esclusivamente all'uso in uno script compilato, come quelli prodotti da Optimizer.

    
risposta data 30.12.2014 - 22:16
fonte

Leggi altre domande sui tag