2013-07-30 8 views
6

Sto scrivendo un'applicazione utilizzando JavaScript, HTML5 e AngularJS. Deve funzionare solo su browser recenti (ad esempio, IE10 ma non IE9).Come eseguire attività di elaborazione intensiva nell'applicazione AngularJS?

In diversi punti dell'applicazione, verranno eseguite attività di elaborazione intensiva, come l'analisi XML, la decodifica base64; questi potrebbero comportare dati abbastanza grandi (alcuni MB sono certamente una possibilità).

Se chiamo solo cose come atob() o DOMParser.parseFromString(), otterrò un browser non rispondente per secondi o minuti. Questo chiaramente non è accettabile per un utente.

Ho utilizzato il servizio Q di Angular per rendere le cose come l'accesso a un servizio Web esterno asincrono e quindi evitare di riagganciare il browser in attesa di una risposta. Ma tali operazioni hanno già un'API asincrona.

Che dire di queste attività di elaborazione computazionale, che non dispongono di una propria API asincrona?

Posso suddividere alcune di queste attività un po ', concatenando le promesse. Questo aiuta affatto? La coda dei messaggi del browser fa un giro alla fine di ogni attività?

Vedo l'esistenza di "Web Workers", che sembrano offrire un'appropriata multi-threading. Ma sembrano avere delle scarse capacità di trasferire oggetti da/verso i thread dei lavoratori. Certamente, sembra così per qualcuno come me che viene da C# .Net! Per esempio, mi piacerebbe iniettare servizi Angular (built-in e mio) nelle attività sui thread. E non voglio nemmeno copiare enormi dati tra i thread.

Altre persone stanno raggiungendo applicazioni Web lato client reattive che includono un calcolo serio? Se sì, cosa stanno usando per raggiungere questo obiettivo?

+0

Per quanto riguarda i servizi di iniezione, un thread di lavoro può utilizzare una funzione globale importScripts ('script.js') - nel caso in cui non l'avessi perso. Purtroppo, non esiste una soluzione al problema della copia dei dati. –

+1

Ho sperimentato e non riesco a caricare Angular da solo in un worker (ha bisogno di finestre e documenti), quindi suppongo di non poter usare nulla di Angular? – PeteAC

risposta

3

Sembra che stiate cercando il Parallel.js library.

Ecco una rapida descrizione della biblioteca dal loro sito web:.

"Parallel.js è una piccola libreria per l'elaborazione multi-core in Javascript E 'stato creato per sfruttare al meglio della sempre maturazione web- API lavoratori. "

Attualmente non sono a conoscenza di esempi specifici sull'utilizzo di Parallel.js in Angular, ma sono sicuro che non sarebbe troppo difficile integrare la libreria come servizio Angolare.

Problemi correlati