2012-05-23 10 views
5

Estoy escribiendo una aplicación basada en la web (peso y balance del avión de carga grande) en la que el usuario ingresa pesos de paleta. Cuando se ingresa un peso de paleta individual, se deben realizar varios controles para determinar si se puede aceptar ese peso. Los controles son relativamente triviales en términos de ciclos de cálculo requeridos; uno no es Según tengo entendido, JavaScript tiene una sola hebra, lo que quiero decir que si el usuario comienza a ingresar un peso en otra posición de paleta, se bloqueará hasta que el peso anterior se haya procesado por completo.manejo de una operación de cálculo intensivo

No puedo permitir que el usuario espere cada vez que ingresa un peso (que no tienen que hacer en este momento, ya que la aplicación actualmente no realiza la última comprobación correctamente). Actualmente estoy pensando en no hacer el último paso de cálculo intensivo hasta que todos los pesos se ingresen y el usuario lo haga al hacer clic en un botón. Sin embargo, esto privará al usuario de retroalimentación inmediata sobre qué peso inicialmente desencadenó el problema, un problema en el que pueden contribuir varios pesos, y que será difícil de resolver si tienen que esperar hasta el último.

Mis búsquedas de Google sobre el tema me han sido de alguna utilidad, pero estoy pidiendo aquí las posibles ideas para una solución actualizada al dilema. Cualquier sugerencia es bienvenida. El contexto del problema se puede observar yendo al http://terryliittschwager.com/WB/JWB.php y seleccionando un avión.

+0

¿Qué cálculo requeriría tanto tiempo? – ninjagecko

+0

@ninjagecko El cálculo se está comprobando para ver si se está excediendo lo que se denomina "carga lineal combinada". La sección de carga de un 747 se extiende aproximadamente 2,165 pulgadas desde el brazo de equilibrio (b.a.) 200 hasta b.a. 2365. Las limitaciones del monocasco (y de otro tipo) se expresan en el máximo de carga lineal combinado, y eso es una disminución variable en la ubicación por pulgada. Entonces, estoy viendo un bucle de iteración de 2.165 sobre cada entrada que tiene que hacer una serie de cosas. Uno de los problemas es que las computadoras, por ejemplo, Harare, Zimbabwe, no son las más recientes. Son lentos, y tengo que prepararme para eso. – Terry

+0

¿De verdad tienes que repetir cada pulgada? ¿Hay alguna forma de que pueda hacer menos cálculos o tener algunos cálculos precalculados? – zortacon

Respuesta

2

Si quiere hacerlo desde el lado del cliente, le recomiendo que investigue en WebWorkers. Se ejecutan en un hilo separado del hilo principal (DOM) JS. No es compatible con todos los navegadores (por supuesto), pero actualmente es compatible con Chrome, FF, Safari e IE 10.

EDITAR: El MDN para WebWorkers es un buen lugar para comenzar.

+0

Gracias, voy a echar un vistazo. Tiene que hacerse desde el lado del cliente (lo cual debería decir) porque tiene que poder ejecutarse cuando el acceso a Internet no está disponible. – Terry

1

puede usar Ajax para el largo y javascript para el resto. O divide el cálculo si es posible y hazlo un poco a la vez. http://www.sitepoint.com/multi-threading-javascript/

+1

Gracias por la entrada. Lamentablemente, descuidé decir en mi pregunta original que esto debe funcionar sin acceso a Internet cuando sea necesario. – Terry

+1

servidor web! = Acceso a internet. Creé varias soluciones fuera de línea que funcionaban con un Perl usando Net :: Server. O instale Apache o IIS. En cualquier caso, el procesamiento se realiza fuera de JavaScript, por lo que no hay bloqueo. – zortacon

+1

Ah, no había pensado en esa posibilidad. Vive y aprende. Gracias. – Terry

Cuestiones relacionadas