Это через setInterval процессор?


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

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

6 53

6 ответов:

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

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

  1. передать функцию в setInterval, а не строку.
  2. есть несколько интервалов устанавливаются по возможности.
  3. сделайте продолжительность интервала покуда вероятный.
  4. пусть код выполняется каждый раз как можно короче и проще.

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

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

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

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

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

onhashchange

будет стрелять, когда произошло изменение в хэше.

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

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

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

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

объяснение :

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

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

от http://ie.microsoft.com/testdrive/Performance/setImmediateSorting/Default.html

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

см. ссылку о requestAnimationFrame

функция время > интервал времени плохо, вы не можете знать, когда процессор икота или медленно один и он складывается поверх текущих функций, пока ПК не замерзнет. Используйте settimeout или даже лучше, процесс.nextick с помощью обратного вызова внутри settimeout.