2017-02-10 3 views
2

Это, пожалуй, противоположность очень распространенной проблемы: когда вы используете setInterval на одной вкладке и переключаетесь на другую, интервал значительно уменьшается (например, замедляется). Это очень заметно при синхронизации звука, так как вы можете слышать, как он замедляется.setInterval не замедляется на неактивной вкладке

Но на последних Chrome 56 и Firefox 51 я больше не могу этого сделать.

Однако на Chrome очень редко, и, казалось бы, случайным образом, переключающие вкладки могут имеют эффект. И по какой-то причине он даже дросселирует Web Workers.

Это вызывает у меня головные боли, потому что я пытаюсь написать материал для веб-аудио API, который требует очень точного времени, и я даже не вижу разницы между setInterval и веб-рабочими, которые должны запускаться в своем потоке.

Почему setInterval не работает так, как и раньше, и неактивные вкладки дроссельной заслонки?

Обновление: даже setInterval в веб-работнике, который был загружен через URI Blob, в некоторых случаях получает дросселирование, например, переключения вкладок.

ответ

1

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

+0

Есть ли способ имитировать низкую ОЗУ или CPU или другие параметры для запуска ** надежного поведения 'setInterval' дросселирования **? Мне нужно иметь возможность фактически определить, имеет ли использование Web Workers какие-либо преимущества по времени для ванильного 'setInterval' или другого решения, связанного с setTimeout. – bryc

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