Фоновая обработка Javascript без веб-работника? - PullRequest
2 голосов
/ 26 января 2012

Я совершенно уверен в этом, но просто чтобы узнать ваше мнение:

Можно ли каким-то образом выполнять операции в фоновом режиме с Javascript, если веб-работники недоступны? Возможно, есть способ «неправильно» использовать асинхронную функцию setTimeout() или некоторые другие механизмы? Моя цель - прочитать вещи из localStorage, сделать несколько преобразований и отправить их через Ajax.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 26 января 2012

Вы не можете запустить операцию в фоновом режиме, но вы можете разделить ее на небольшие куски и запускать каждую следующую часть с помощью setTimeout.В результате браузер будет иметь время для внесения изменений и будет реагировать на обычные действия, в то время как ваш длинный процесс также будет выполняться

function iteration(){
     do_some_small_amount_of_work();
     if (!not_finished)
         scheduler.setTimeout(iteration, 1); 
}
2 голосов
/ 26 января 2012

В Javascript нет многопоточности, но вы можете выполнять код асинхронно, используя setTimeout(code, 0). Это ставит в очередь функцию для выполнения.

1 голос
/ 26 января 2012

Без использования веб-работников то, что вы предложили (используя setTimeout), является единственным способом сделать это, и, конечно, на самом деле это совсем не «фон».Обратите внимание, что вам нужно будет делать обработку достаточно короткой каждый раз, когда вы запускаете «фоновый» код, потому что это не совсем фоновый код;пока ваш код работает, страница будет довольно не отвечать (степень, в которой она не отвечает, будет зависеть от браузера, но, конечно, любой код JavaScript на странице должен будет ждать завершения вызова вашей функции).

1 голос
/ 26 января 2012

Нет, в Javascript нет возможности что-либо сделать в фоновом режиме.Он строго однопоточный.

Вы можете использовать setTimeout или setInterval для выполнения работы на переднем плане, но только небольшую ее часть каждый раз.Таким образом, интерфейс по-прежнему достаточно отзывчив, поскольку обрабатывает события между вашими очередями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...