можно ли использовать вебворкеры для более точного определения времени

Если вы хотите анимировать, это обычно включает вызов settimeout или setinterval. Затем это событие присоединяется к другим событиям в системе очередей событий, и событие может быть отложено по сравнению со временем, установленным при вызове settimeout, из-за того, что графический интерфейс приложения обрабатывает другие события, такие как движения мыши холста. Но что, если вы настроите цикл анимации в веб-воркере? на который не будут влиять события GUI, и он может точно вызывать функцию анимации в основном потоке (используя postmessage) с точным интервалом времени, установленным в вызове функции. По крайней мере, в теории это нормально, но будет ли это работать на самом деле?


person ejectamenta    schedule 30.05.2015    source источник
comment
это интересный подход sitepoint.com/creating-accurate-timers-in- javascript, хотя у вас по-прежнему будет индивидуальное неправильное время, последующие события настраиваются так, чтобы срабатывать чаще за меньшее время с интервалом   -  person ejectamenta    schedule 31.05.2015


Ответы (1)


Но что, если вы настроите цикл анимации в веб-воркере?

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

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

person T.J. Crowder    schedule 30.05.2015
comment
Меня больше интересуют точные звуковые звуки, скажем, если вы хотите воспроизвести звук ровно за 5 секунд. Webaudio имеет свои собственные часы для звуковых событий, которые работают довольно хорошо и кажутся независимыми от основной очереди событий, но я хочу использовать более простой звуковой API, который будет транслироваться на другие платформы (phonegap или звуковой API libGDX), и они, кажется, предлагают только играть сейчас функциональность - person ejectamenta; 31.05.2015
comment
На самом деле, возможно, ответ на правильный выбор времени лежит в функции webaudio NoteOn. Как возможно, что эта функция может запланировать воспроизведение звукового события ровно через столько миллисекунд в будущем? Если бы эту функциональность можно было извлечь из API, то можно было бы создать действительно точную функцию setInterval для анимации или других целей. Кажется, что у него есть только системные часы для работы. Может быть, он делает какое-то прогнозирование, основанное на выборке системных часов, чтобы гарантировать точность? - person ejectamenta; 31.05.2015
comment
Если вы работаете со звуком, эта запись в блоге показывает, что веб-воркеры можно использовать для улучшения синхронизации. - person ggorlen; 05.07.2021