5

Из того, что я понимаю History.js является полиполнением для HTML5 History/State APIs. Поэтому в современных браузерах он должен просто использовать popstate для прослушивания изменений URL. Итак, Почему на последнем Chrome я могу видеть срабатывание таймера каждые 250 мс? Кажется настолько расточительным и запускает сборщик мусора каждые несколько секунд.Почему history.js использует setInterval (.., 250)?

Отъезд официальных лиц History.js demo.

History.js demo page firing timer every 250ms

+0

Почему вы не используете родной JS? – RomanGorbatko

+1

@RomanGorbatko Нам нужно поддерживать [IE9 и более старые браузеры для Android] (http://caniuse.com/#feat=history). Поэтому требуется использование полизаполнения (не так ли?). –

+0

Я не получил никаких записей о таймере, записанных в хромированном состоянии – NavaRajan

ответ

0

Я не знаю код History.js, но прочитав это, я считаю, @apsillers правильно.

Он настроен на интервал в 250 мс между элементами очереди. Некоторые из функций очереди в этой очереди требуют захвата состояния истории. Эти пункты заставляют промывку останавливаться, называя ее занятой.

Что касается того, почему это происходит в браузерах HTML5, мне также кажется, что History.JS не просто переключает переключатель, если это HTML5, а затем ничего не делает. На их github говорится один из них стремится быть:

Обеспечение кросс-совместимый опыт для всех HTML5 браузеров (все они реализовать на API истории HTML5 немного иначе, вызывая различные модели поведения, а иногда и ошибки - History.js фиксирует это обеспечивает опыт, как и ожидалось/тот же/большой во всем браузеров HTML5)

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