Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Запустить поток на js (https://javascript.ru/forum/misc/4317-zapustit-potok-na-js.html)

Shasoft 10.07.2009 17:17

Запустить поток на js
 
Одна из функций работает долго. Чтобы не тормозить весь браузер, можно ли запустить её в отдельном потоке через js?
Попробовал через setTimeout
setTimeout(function() {
  alert(1);
 },0);
 alert(2);

но наверное я не до конца понял её функциональность. Данный код выводит сообщение alert(2) И пока его закроешь, сообщение alert(1) не появится. Т.е. никакого парралельного запуска не получается.

Так можно ли долго выполняемую функцию выполнить так, чтобы не тормозить весь браузер? (кроме как оптимизировать скорость :) )

Kolyaj 10.07.2009 17:23

JavaScript однопоточный язык. Можно разбить долгую функцию на несколько итераций и запускать эти итерации через setTimeout (это если совсем образно). Если приведете код функции, можно будет посмотреть более конкретно.

B~Vladi 10.07.2009 17:25

Цитата:

Сообщение от Shasoft
Одна из функций работает долго.

Что значит долго?! Выполняется постоянно много раз или один раз но 10 мин?! И вапсче это не есть нормально.
Цитата:

Сообщение от Shasoft
через setTimeout

Через таймер ты ещё больше повесишь браузер;)

А что касается отдельного потока, то могу сказать только одно - JS НЕ! управляет браузером. JS управляет той средой, которую этот браузер предоставляет. Алгоритмы использования ресурсов браузера не входят в эту среду, а выполняются извне.

А что эта функция делает?! Расчёты или визуальное форматирование?!

B~Vladi 10.07.2009 17:30

Цитата:

Сообщение от Shasoft
Данный код выводит сообщение alert(2) И пока его закроешь, сообщение alert(1) не появится.

Замечал, по моему, в мозилле, что она иногда всё-таки продолжает выполнять код после появления алерта.

Riim 10.07.2009 17:31

Цитата:

Сообщение от B~Vladi
Через таймер ты ещё больше повесишь браузер

http://javascript.ru/tutorial/events/timing
Советую дочитать до конца, нудно только в начале.

B~Vladi 10.07.2009 17:48

Цитата:

Сообщение от Riim
Советую дочитать до конца, нудно только в начале.

спс, я читал.

Просто, видать, я недопонял немного, как ему нужно запускать свою ф-цию.
Интересно, какую же ф-цию нада написать чтобы она выполнялась ооочень долго... Думаю, Shasoft, тебе стоит пересмотреть алгоритм.

Shasoft 10.07.2009 19:22

За ответы всем спасибо. Разъяснили всё. Я то думал, что раз есть асинхронные запросы AJAX, то можно также сделать и выполнение кода в функции. Но, как я понял, все функции обратного вызова всё-равно выполняются уже ПОСЛЕ отработки основной функции.

По поводу долгой функции: делаю программу на js, которая создает резервную копию сайта (файлы + БД) + обновляет движок с сайта прототипа. В общем админка сайта, только не на сайте, а на отдельной странице.
Так что время работы зависит от кол-ва файлов и объема БД. Но так как процесс этот не частый, то время работы в общем мне не особо важно.

Тему можно закрывать.

x-yuri 13.07.2009 23:33

а зачем это на js делать?

а по поводу многопоточность: в ff она уже появилась


Часовой пояс GMT +3, время: 00:43.