Il lato client JavaScript è in grado di replicare il sistema di caricamento del modulo Node.JS?

1

Mi piace lo stile Node.JS di JavaScript, in cui posso scrivere tutte le mie funzionalità in file più piccoli e quindi richiederli in modo ordinato all'interno del mio codice. Sto anche pensando di provare a scrivere un framework per imitare quel comportamento nel JS lato client.

Il mio obiettivo sarebbe implementare il module loading system nel modo più accurato possibile: Vedi i documenti del modulo

Per require() , posso usare le cose dettagliato in risposta a questa domanda , in particolare $.getScript() di JQuery. Mi sembra che anche altri aspetti del sistema di caricamento dei moduli siano possibili.

Quindi, chiedo ai programmatori più esperti di essere il primo, prima di dedicarmi ai miei tempi: C'è qualcosa che mi manca che causerà un tale tentativo di fallire miseramente, o può essere fatto con successo?

    
posta Viziionary 09.08.2014 - 01:00
fonte

4 risposte

4

No. Node.js require() è basato sul sistema del modulo Common.js che utilizza sincrono caricamento.

A meno che non si esegua una pre-elaborazione (bundle) lato server per servire tutti gli script in una volta, questo è impossibile nel browser, dove le risorse sono dovrebbero essere caricate in modo asincrono. Potresti dare un'occhiata a browserify .

Tuttavia, vi è la proposta di definizione del modulo asincrono che ha una percentuale asincrona di co_de % funzione che richiede una richiamata. Questo è ampiamente implementato in varie librerie, probabilmente non ne hai idea. RequireJs è molto conosciuto, ne troverai altri quando cerchi "caricatore AMD".

    
risposta data 22.08.2014 - 15:50
fonte
1

Il concetto che stai cercando si chiama AMD che sta per Asynchronous Module Definition

The Asynchronous Module Definition (AMD) API specifies a mechanism for defining modules such >that the module and its dependencies can be asynchronously loaded. This is particularly well >suited for the browser environment where synchronous loading of modules incurs performance, >usability, debugging, and cross-domain access problems.

Specifica completa

Come menzionato nei commenti ci sono più librerie per farlo. Puoi trovare un confronto abbastanza completo di tutti i framework disponibili qui

    
risposta data 22.08.2014 - 14:10
fonte
0

Sì. Ci sono biblioteche che fanno questo per te, come require.js o molti altri. Quando desideri implementarlo tu stesso, puoi caricare il codice sorgente dei tuoi file javascript utilizzando XmlHttpRequest e poi eval .

Tuttavia, fare ciò potrebbe non essere la migliore idea dal punto di vista delle prestazioni. Ogni file javascript dovrà essere scaricato con una richiesta HTTP separata. Questa richiesta non può essere eseguita prima che il file di script che lo richiedeva fosse scaricato ed eseguito. Ciò può aumentare significativamente il tempo di caricamento della pagina.

Ma esiste una soluzione alternativa che consente di lavorare con molti file di script indipendenti durante lo sviluppo, ma poi di distribuirli come un singolo file in produzione. Esistono strumenti come Minify (che richiede PHP) o YUI Compressor (che viene eseguito offline e genera un nuovo file JS) che può unire più file JS in uno solo. Come effetto secondario, riduce anche la dimensione di ogni singolo script in modo che il traffico generale si riduca e compia alcune offuscamenti che scoraggiano le persone (un po ') dal rubare i tuoi script.

    
risposta data 22.08.2014 - 19:08
fonte
0

Dovresti controllare browserify probabilmente fa esattamente quello che stai cercando. Puoi scrivere il codice in modo nodo e con un semplice comando costruisci tutto in un unico file. Penso che sia un grande strumento e un paradigma. Ho scritto il mio piccolo framework usando questo modello, funziona in modo ingenuo sul nodo e su tutti i principali browser incluso IE 6.

    
risposta data 23.08.2014 - 18:24
fonte

Leggi altre domande sui tag