Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Как в Timeout сделать delay меньше 1 мс (https://javascript.ru/forum/css-html/8616-kak-v-timeout-sdelat-delay-menshe-1-ms.html)

alex90 05.04.2010 08:07

Как в Timeout сделать delay меньше 1 мс
 
Вот такая задача
я пишу setTimeout("pav()",0.01); - все равно вычисляет как будто 1 мс.

Aetae 05.04.2010 09:06

А зачем такая мега точность?)
Всё равно это бессмысленно, ибо и 1мс, далеко не всегда равен 1мс при загруженности компьютера...

Айба 05.04.2010 09:27

никак нельзя этого сделать, delay устанавливается в мс.
https://developer.mozilla.org/en/DOM/window.setTimeout

Kolyaj 05.04.2010 10:33

Цитата:

Сообщение от Aetae
ибо и 1мс, далеко не всегда равен 1мс при загруженности компьютера...

Никогда не равен. Во всех браузерах, кроме хрома, таймаут ограничивается 10 мс, в хроме порядка 4 вроде заявлено.

Вообще не понятно, конечно, зачем такая задержка, без неё тогда уж то же самое будет.

alex90 05.04.2010 10:54

Это не точность, просто мне нужна большая скорость вычислений.
Да в хроме быстрее чем в FF но процессор загружен только на 70%, нельзя убрать ограничение ?

Kolyaj 05.04.2010 10:55

Вам кроссбраузерное решение нужно?

alex90 05.04.2010 11:04

нет. достаточно чтобы в одном браузере работало быстро

Kolyaj 05.04.2010 11:08

Насколько я понял, setTimeout вам нужен, чтобы браузер не зависал?

Вариант 1: отказываемся от setTimeout.
Вариант 2: эмулируем более быстрый setTimeout.

subzey 05.04.2010 11:10

Под windows у Вас не получится сделать атомные часы, увы. Минимальный квант времени в этой ОС не может быть меньше 10 мсек.
ссылка

При этом поведение браузеров касаемо этого разнится. По крайней мере, несколько лет назад, если задавать выполнение через 10 мсек, во всех браузерах, кроме Safari (Гуглобраузера тогда не было), функция вызывалась через 18 мсек, а в Safari — через 0 мсек. :)

UPD: Если Вы делаете анимацию, то задавать таймаут меньше 30 мсек (33 FPS) смысла не имеет, иначе постоянные reflow могут сильно загрузить проц.

alex90 05.04.2010 11:33

нет не анимация. у меня идут числовые вычисления.
То есть в Safari 0 мс ?

alex90 05.04.2010 11:34

Цитата:

Сообщение от Kolyaj (Сообщение 50108)
Насколько я понял, setTimeout вам нужен, чтобы браузер не зависал?

Вариант 1: отказываемся от setTimeout.
Вариант 2: эмулируем более быстрый setTimeout.

А можно русский вариант эмуляции setTimeout?

x-yuri 05.04.2010 12:15

на 1С что ли? :) В противном случае Google Translate или просто "google it"

alex90 05.04.2010 12:19

Цитата:

Сообщение от x-yuri (Сообщение 50116)
на 1С что ли? :) В противном случае Google Translate или просто "google it"

нет... я просто не разберусь в этой функции

subzey 05.04.2010 12:34

alex90,
Вы можете задавать просто 0 мс, и тогда предупреждений «Этот скрипт тормозит работу» не будет.

alex90 05.04.2010 13:03

Цитата:

Сообщение от subzey (Сообщение 50120)
alex90,
Вы можете задавать просто 0 мс, и тогда предупреждений «Этот скрипт тормозит работу» не будет.

а компьютер при этом не зависнет?

Skipp 05.04.2010 13:41

а зачем интервал, если можно просто циклом сделать? По идее это будет быстрее, если код функции не нагромаждён. А насчёт зависания, в любом случаи, компьютер отойдёт при завершении цикла, если конечно он у тебя завершается. И вообще есть другие языки программирования, которыми можно это сделать намного удобнее)

alex90 05.04.2010 13:44

Цитата:

Сообщение от Skipp (Сообщение 50134)
а зачем интервал, если можно просто циклом сделать? По идее это будет быстрее, если код функции не нагромаждён. А насчёт зависания, в любом случаи, компьютер отойдёт при завершении цикла, если конечно он у тебя завершается. И вообще есть другие языки программирования, которыми можно это сделать намного удобнее)

умное решение вы подсказали, попробую его реализовать

subzey 05.04.2010 14:37

Цитата:

Сообщение от alex90
а компьютер при этом не зависнет?

Нет. Яваскрипт однопоточный. Просто задавайте в конце одной итерации выполнение через 0 мс другой итерации.

Скажу честно, таким образом работали около 15 минут матричные вычисления, и ни одного сообщения «Этот скрипт работает слишком долго».

Это был дипломный проект, не мой, правда, распределенные вычисления. Небольшой скрипт на php раздавал задания любому количеству клиентов, а после этого собирал значения. Причем из клиентской части нужен был просто любой браузер.

Подобным образом, впрочем, можно заставить бесцельно бродящих по сети в поисках прона людей тратить свои процессорные мощности на что-нибудь полезное, типа вычисления простых чисел Мерсенна ;)

alex90 05.04.2010 15:12

Цитата:

Сообщение от subzey (Сообщение 50141)
Нет. Яваскрипт однопоточный. Просто задавайте в конце одной итерации выполнение через 0 мс другой итерации.

Скажу честно, таким образом работали около 15 минут матричные вычисления, и ни одного сообщения «Этот скрипт работает слишком долго».

Это был дипломный проект, не мой, правда, распределенные вычисления. Небольшой скрипт на php раздавал задания любому количеству клиентов, а после этого собирал значения. Причем из клиентской части нужен был просто любой браузер.

Подобным образом, впрочем, можно заставить бесцельно бродящих по сети в поисках прона людей тратить свои процессорные мощности на что-нибудь полезное, типа вычисления простых чисел Мерсенна ;)

спасибо, работает

x-yuri 05.04.2010 15:26

Цитата:

Сообщение от subzey
Подобным образом, впрочем, можно заставить бесцельно бродящих по сети в поисках прона людей тратить свои процессорные мощности на что-нибудь полезное, типа вычисления простых чисел Мерсенна

вы все еще ...? Мы идем к вам :lol:

subzey 05.04.2010 18:37

x-yuri,
А что? Просто представьте:
«Помогите человечеству, смотря прон!»
и домен какой-нибудь типа pornscience.xxx

:D


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