Производительность JavaScript .hashchange. Может ли это вызвать замедление?

событие hashchange jQuery

На мой взгляд, сейчас это наиболее зрелое решение (поправьте меня, если я ошибаюсь). Мне очень нравится этот плагин для работы с хешами браузеров. В некоторых случаях это сильно упрощает js-код.

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

Согласно источнику, он использует цикл и проверяет, изменялась ли привязка хэша каждые 50 мс.

А как насчет производительности? Могу ли я злоупотреблять хэш-обменом? Может ли это привести к значительному снижению производительности? Если да, то в каких случаях?


person Nikita Fedyashev    schedule 22.08.2010    source источник


Ответы (2)


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

Также имейте в виду, что проверка 50 мс предназначена только для браузеров, у которых нет встроенных window.onhashchange, для них это собственное событие (и это большинство современных браузеров).

person Nick Craver    schedule 22.08.2010

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

-- Больше информации --

jQuery History Plugin использует тест 200 мс для браузеры старого поколения, в которых событие onhashchange изначально не реализовано. Без этого события, реализованного изначально, вам придется обходить его функциональность, используя изменение интервала - насколько мне известно, другого способа просто нет. К счастью, последние версии всех основных браузеров теперь изначально поддерживают событие onhashchange, поэтому эта проверка больше не требуется.

Давайте разберемся, что делает эта проверка с интервалом 200 мс. Если они находятся в IE6 или 7, он проверит состояние iframe (как в этих браузерах, iframe требуется для имитации кнопок назад и вперед - тогда как для других браузеров iframe не требуется). Если они используют другой старый браузер, который не является IE, он может просто использовать location.getHash() в проверке (без iframe, как объяснялось ранее). Оба типа проверок разработаны так, чтобы быть чрезвычайно быстрыми и минимальными, что сводит к минимуму необходимые накладные расходы. Все дело в том, что браузер на самом деле позволяет вам делать, и в попытке сделать это с использованием наименее интенсивного кода.

person balupton    schedule 18.09.2010