Это через setInterval процессор?
Я где-то читал, что setInterval является интенсивным процессором. Я создал скрипт, который использует setInterval и отслеживал использование ЦП, но не заметил изменений. Я хочу знать, есть ли что-то, что я пропустил.
Что делает код, это проверяет изменения хэша в URL (содержимое после #) каждые 100 миллисекунд, и если он изменился, загрузите страницу с помощью AJAX. Если он не изменился, ничего не происходит. Будут ли какие-либо проблемы с процессором с этим.
6 ответов:
не думаю
setInterval
по своей сути будет вызывать у вас значительные проблемы с производительностью. Я подозреваю, что репутация может исходить из более ранней эпохи, когда процессоры были менее мощными.есть способы, которые вы можете улучшить производительность, однако, и это, вероятно, разумно сделать их:
- передать функцию в
setInterval
, а не строку.- есть несколько интервалов устанавливаются по возможности.
- сделайте продолжительность интервала покуда вероятный.
- пусть код выполняется каждый раз как можно короче и проще.
не оптимизируйте преждевременно -- не делайте жизнь трудной для себя, когда нет проблем.
одна вещь, однако, что вы можете сделать в вашем конкретном случае использовать
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