2012-05-23 4 views
5

Я пишу веб-приложение (вес и вес большого веса), в котором пользователь вводит весы поддона. Когда вводится индивидуальный вес паллет, необходимо провести ряд проверок, чтобы определить, можно ли принять этот вес. Проверки все относительно тривиальны с точки зрения требуемых циклов вычислений; один нет. Насколько я понимаю, JavaScript является однопоточным, что я подразумеваю, что если пользователь начинает вводить вес в другое положение поддона, он будет заблокирован до тех пор, пока предыдущий вес не будет полностью обработан.обработка интенсивного вычисления

Я не могу позволить себе, чтобы пользователь ждал каждый раз, когда он вводит вес (который им не нужно делать в данный момент, поскольку приложение в настоящее время не делает эту последнюю проверку должным образом). В настоящее время я подумываю о том, чтобы не делать окончательный шаг с интенсивным вычислением до тех пор, пока все веса не будут введены, и пользователь это означает, нажав на кнопку. Однако это лишит пользователя немедленной обратной связи относительно того, какой вес первоначально вызвал проблему, проблема, в которой могут вносить несколько весов, и что будет трудно разобраться, если им придется ждать до последнего.

Мои поисковые запросы Google по этой теме были несколько полезными, но я прошу здесь о возможных идеях для современного решения дилеммы. Любые предложения приветствуются. Контекст проблемы можно наблюдать, перейдя в http://terryliittschwager.com/WB/JWB.php и выбрав самолет.

+0

Какой расчет потребует столько времени? – ninjagecko

+0

@ninjagecko Расчет проверяет, превышено ли то, что называется «комбинированная линейная загрузка». Грузовая секция 747 простирается примерно на 2,165 дюйма от балансировочного рычага (b.a.) 200 до b.a. 2365. Монокок (и другие) ограничения выражаются в объединенном максимальном максимальном максимальном нагружении, и это зависит от местоположения на дюйм. Итак, я смотрю на 2656 циклов итераций на каждую запись, которая должна делать несколько вещей. Одна из проблем заключается в том, что компьютеры, скажем, Хараре, Зимбабве, не являются последними. Они медленные, и я должен настроиться на это. – Terry

+0

Вам действительно нужно зацикливаться на каждый дюйм? Есть ли способ сделать меньше вычислений или предварительно вычислить некоторые вычисления? – zortacon

ответ

2

Если вы хотите сделать это на стороне клиента, я бы рекомендовал заглянуть в WebWorkers. Они работают на отдельном потоке из основного (DOM) потока JS. Не поддерживается во всех браузерах (конечно), но в настоящее время поддерживается в Chrome, FF, Safari и IE 10.

EDIT: MDN для WebWorkers - это хорошее место для начала.

+0

Спасибо, я посмотрю. Это должно быть сделано на стороне клиента (что я должен сказать), потому что он должен быть доступен, когда доступ в Интернет недоступен. – Terry

1

Вы можете использовать Ajax для длинного и javascript для остальных. Или, если это возможно, разбивайте вычисления и делайте это немного за раз. http://www.sitepoint.com/multi-threading-javascript/

+1

Спасибо за ввод. К сожалению, я забыл сказать в своем первоначальном вопросе, что при необходимости он должен работать без доступа в Интернет. – Terry

+1

веб-сервер! = Доступ в интернет. Я создал несколько автономных решений, которые были задействованы perl, используя Net :: Server. Или установите apache или IIS. В любом случае обработка выполняется за пределами javascript, поэтому блокировки не происходит. – zortacon

+1

А, я не думал об этой возможности. Живи и учись. Спасибо. – Terry

Смежные вопросы