Является ли setInterval CPU интенсивным? - программирование
Подтвердить что ты не робот

Является ли setInterval CPU интенсивным?

Я где-то читал, что setInterval имеет интенсивность процессора. Я создал script, который использует setInterval и контролировал использование ЦП, но не заметил изменений. Я хочу знать, есть ли что-то, что я пропустил.

Что делает код, это проверка изменений хэша в URL (контент после #) каждые 100 миллисекунд, и если он изменился, загрузите страницу с помощью AJAX. Если он не изменился, ничего не происходит. Были бы проблемы с ЦП с этим.

4b9b3361

Ответ 1

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

Однако есть способы улучшить производительность, и, вероятно, разумно их выполнять:

  • Передайте функцию setInterval, а не строку.
  • Установите как можно меньше интервалов.
  • Сделайте длительность интервала как можно дольше.
  • Всегда выполняйте код, как можно более короткий и простой.

Не оптимизируйте преждевременно - не делайте жизнь трудной для себя, когда нет проблем.

Однако в вашем конкретном случае вы можете использовать событие onhashchange, а не таймауты, в браузерах, которые его поддерживают.

Ответ 2

Я бы сказал, что все наоборот. Используя setTimeout и setInterval правильно, можно резко сократить использование процессора браузерами. Например, использование setTimeout вместо использования цикла for или while не только уменьшит интенсивность использования ЦП, но также гарантирует, что браузер имеет возможность чаще обновлять очередь UI. Длительные процессы не замерзают и не блокируют работу пользователя.

Но в целом использование setInterval действительно очень похоже на ваш сайт может замедлить работу. 20 одновременных интервалов работы с более или менее тяжелой работой повлияет на шоу. И снова... вы действительно можете испортить любую часть, я думаю, это не проблема setInterval.

.. и, кстати, вам не нужно проверять хеш. Для этого есть события:

onhashchange

будет срабатывать при изменении хэша.

window.addEventListener('hashchange', function(e) {
    console.log('hash changed, yay!');
}, false);

Ответ 3

Нет, setInterval не является интенсивным CPU. Если у вас много интервалов, выполняющихся на очень коротких циклах (или очень сложная операция, выполняемая на умеренно длинном интервале), тогда это может легко стать интенсивным в ЦП, в зависимости от того, что делают ваши интервалы и как часто они это делают.

Я бы не ожидал увидеть какие-либо проблемы с проверкой URL каждые 100 миллисекунд с интервалом, хотя лично я увеличил бы интервал до 250 миллисекунд, просто потому, что я не ожидал, что разница между ними будет заметна для обычного пользователя и потому, что я обычно стараюсь использовать самые длинные интервалы времени ожидания, которые, как мне кажется, я могу избежать, особенно для вещей, которые, как ожидается, в большинстве случаев будут отсутствовать.

Ответ 4

Там немного маркетинга идет там под термином "интенсивный процессор". На самом деле это означает, что "более интенсивный процессор, чем некоторые альтернативы". Это не "интенсивный процессор", как в "использует много мощности процессора, как игра или алгоритм сжатия".

Объяснение:

Как только браузер выполнил управление, он полагается на прерывание от базовую операционную систему и оборудование для получения контроля и выдать обратный вызов JavaScript. Имея более длительную продолжительность между этими прерывания позволяют аппаратным средствам вводить состояния низкой мощности, которые значительно снижает потребление энергии. По умолчанию операционная система Microsoft Windows и Intel процессоры используют для этих прерываний разрешение 15,6 мс (64 прерывания в секунду). Это позволяет процессорам на базе Intel вводить самые низкие состояние мощности. По этой причине веб-разработчики традиционно только удалось достичь 64 обратных вызовов в секунду при использовании setTimeout (0) при использовании браузеров HTML4, включая более ранние издания Интернета Explorer и Mozilla Firefox.

В течение последних двух лет браузеры пытались увеличить число обратных вызовов в секунду, которые разработчики JavaScript могут получить через API setTimeout и setInterval, изменяя сознание по мощности Системные настройки Windows и предотвращение входа оборудования в низкий уровень энергетических состояний. Спецификация HTML5 дошла до крайности рекомендуя 250 обратных вызовов в секунду. Эта высокая частота может в 40% -ном увеличении потребления энергии, влияя на срок службы батареи, эксплуатационные расходы и окружающую среду. Кроме того, этот подход не затрагивает основную проблему производительности процессора эффективности и планирования.

Из http://ie.microsoft.com/testdrive/Performance/setImmediateSorting/Default.html

Ответ 5

В вашем случае проблем не будет. Но если вы делаете огромные анимации в холсте или работаете с webgl, тогда будут проблемы с процессором, поэтому для этого вы можете использовать requestAnimationFrame.

Отправить ссылку О requestAnimationFrame

Ответ 6

Время функции > время интервала плохое, вы не можете знать, когда cpu hiccups или медленный, и он складывается поверх текущих функций до тех пор, пока pc не зависает. Используйте setimeout или даже лучше, process.nextick используя обратный вызов внутри settimeout.