Как стать автором
Обновить
33
0
Andrey Nagikh @AndreyNagih

✌ Webmaster, Radio-Engineer, Father, Husband, Son

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

Обойти эту проблему помогает использование setTimeout, который планирует лишь одну, следующую, итерацию вычислений. В конце который вы снова вызываете setTimeout. Таким образом задача сама себя ставит в очередь. И в итоге, если она начинает тормозить, то и планировать себя она начинает медленнее, т.е. тормозит только эта подвисшая задача.

При использовании setInterval браузер может «зафризиться», при рекурсивном setTimeout — добиться этого гораздо сложнее.

И еще раз заострю внимание: время таймаута для следующей итерации нужно вычислять каждый раз через объект Date, т.к. JS вам не гарантирует точность тайминга асинхронных вызовов. Т.е. на одной итерации у вас будет 1000ms, на другой, может 950ms, а на третей может быть 1050ms.

Возможно, в вашем случае с аналоговыми часами это не страшно — позицию стрелок вы вычисляете используя Date, но если бы вы просто делали цифровые часы, используя таймеры, то они убегали бы или отставали в зависимости от загрузки процессора и других факторов.
Спасибо за пост. Есть некоторые замечания.

setInterval — это очень плохая идея для продакшена. Лучше — вложенные setTimeout.
Но с часами отдельная история: если хочется попадать в секунды, то нужно каждый раз подстраивать время таймаута, т.к. из-за внутреннего устройства JS (EventLoop), таймер выполняется не точно в назначенное время, а где-то около него.

И еще, очень хочется демку, чтобы сразу поиграть с ней.
Спасибо Вам за статью. Я сам очень долго собираюсь, и никак не соберусь сделать летопись семьи. А время уходит…
Ваша статья придала мне заряд энтузиазма для этого дела.
А читать про очередной гаджет надоедает.
Еще поправка, не Dalvik, а Darwin :-)
Чтобы не подгорело в тех местах, куда раньше доберутся волны.
Интересно, какова будет судьба недавних Pansonic SmartTV, основанных на этой ОС?
Спасибо за статью. Могли бы вы раскрыть подробнее, чем вам не подошла архитектура Flux, и какие плюсы вы получили от Redux?
Intel заявляет, что можно будет не только использовать XPoint в качестве ОЗУ, но можно будет устанавливать их одновременно с обычными модулями памяти. Но есть подозрение, что работать это все будет на основе расширений протокола и в связке с новыми процессорами Intel. Надеюсь, все-же, что расширения будут открытыми.
Спасибо, вам, я рад, что понравилось.

В данном руководстве автор рекомендует использовать для этой цели https://github.com/tj/n
Я рад, что вам понравилось. Спасибо за ссылку на PM2.
Это номер раздела man. Есть статьи которые называются одинаково, но находятся в разных разделах man.
А поделитесь ссылкой на ленту?
Подскажите, пожалуйста, я не совсем понял.
В стандартной поставке Behave нет вообще никаких шагов, даже таких банальных как открыть URL и кликнуть элемент? Т.е. чтобы начать писать тесты на естественном языке, мы должны сначала сформировать словарь всевозможных шагов?
Космические корабли из к/ф «Кин-дза-дза» так же обделены вниманием.

«Друг, какая у тебя система?»
В копилку изоморфных фреймворков: CatBerry.
Из фишек, прогрессивный рендеринг — клиенту начинает отправляться html как можно быстрее. Таким образом браузер может уже работать с head, когда последний блок на странице еще не сгенерирован сервером. (Минус этой фичи: код ответа сервера всегда строго 200)
Алексей, можете в двух словах описать что будет на Вашем квартирнике на Кодфесте? Там будет эта же самая информация?
Рукописи не горят.
Подобные системы давно используются в реальной подготовке правоохранителей: www.lasertools.ru (не сочтите за рекламу).
Нет желания написать небольшой топик про настройку NFS?
Заметьте, все самые гениальные идеи обычно зарисованы на каких-то немыслимых черновиках; на чем попало. Перенесешь потом на чистый аккуратный лист: вообще не то будет.

Информация

В рейтинге
Не участвует
Откуда
Новосибирск, Новосибирская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность