2012-05-23 7 views
5

Sto scrivendo un'applicazione basata sul Web (peso e bilancia dell'aereo cargo di grandi dimensioni) in cui l'utente inserisce pesi di pallet. Quando viene inserito un peso specifico di un pallet, è necessario effettuare un certo numero di controlli per determinare se tale peso può essere accettato. I controlli sono tutti relativamente banali in termini di cicli di calcolo richiesti; uno non lo è. A quanto ho capito, JavaScript è a thread singolo, il che significa che se l'utente inizia a immettere un peso in un'altra posizione di pallet, verrà bloccato fino a quando il peso precedente non sarà completamente elaborato.gestione di un'operazione intensiva di calcolo

Non posso permettermi che l'utente attenda ogni volta che inserisce un peso (che non devono fare al momento in quanto l'app al momento non esegue correttamente l'ultimo controllo). Attualmente sto pensando di non eseguire il passaggio di elaborazione finale fino a quando non vengono inseriti tutti i pesi e l'utente lo indica facendo clic su un pulsante. Tuttavia, questo priverà l'utente di un riscontro immediato sul peso che ha inizialmente attivato il problema, un problema in cui diversi pesi potrebbero contribuire e che sarà difficile da risolvere se devono attendere fino all'ultimo.

Le mie ricerche Google sull'argomento sono state in qualche modo utili, ma sto chiedendo qui possibili idee per una soluzione aggiornata al dilemma. Tutti i suggerimenti sono i benvenuti. Il contesto del problema può essere osservato andando a http://terryliittschwager.com/WB/JWB.php e selezionando un aeromobile.

+0

quale calcolo richiederebbe molto tempo? – ninjagecko

+0

@ninjagecko Il calcolo sta verificando se viene superato il cosiddetto "caricamento lineare combinato". La sezione di carico di un 747 si estende per circa 2,165 pollici dal braccio di bilanciamento (b.a.) da 200 a b.a. 2365. Le limitazioni della monoscocca (e di altre) sono espresse nel massimo del carico lineare combinato, e questo è il depdning variabile sulla posizione del pollice. Quindi, sto osservando un ciclo di iterazione di 2.165 su ogni voce che deve fare una serie di cose. Uno dei problemi è che i computer, ad esempio, Harare, Zimbabwe, non sono l'ultimo. Sono lenti e devo prepararmi per questo. – Terry

+0

Hai davvero bisogno di un ciclo per ogni centimetro? C'è un modo per fare calcoli meno o avere dei calcoli pre-calcolati? – zortacon

risposta

2

Se si desidera farlo lato client, mi consiglia di guardare in WebWorkers. Eseguono su un thread separato dal thread JS principale (DOM). Non supportato in tutti i browser (ovviamente), ma è attualmente supportato in Chrome, FF, Safari e IE 10.

MODIFICA: l'MDN per WebWorkers è un buon punto di partenza.

+0

Grazie, darò un'occhiata. Deve essere fatto lato client (che dovrei dire) perché deve essere in grado di funzionare quando l'accesso a Internet non è disponibile. – Terry

1

potresti usare Ajax per il lungo e javascript per il resto. Oppure spezza il calcolo se possibile e fallo un po 'alla volta. http://www.sitepoint.com/multi-threading-javascript/

+1

Grazie per l'input. Purtroppo ho trascurato di dire nella mia domanda iniziale che questo deve essere eseguito senza l'accesso a Internet quando necessario. – Terry

+1

web server! = Accesso a internet. Ho creato diverse soluzioni offline che sono state alimentate da un perl utilizzando Net :: Server. Oppure installa apache o IIS. In ogni caso, l'elaborazione viene eseguita al di fuori di javascript quindi non vi è alcun blocco. – zortacon

+1

Ah, non avevo pensato a questa possibilità. Vivere e imparare. Grazie. – Terry