Использует ли оператор instanceof в javascript проблему производительности?
Я слышал, что instanceof оператора в java является проблемой производительности,
Это верно для Javascript (IE6, IE7, IE8, FF, Chrome, Safari и т.д.)?
любые ссылки на аутентичные документы были бы полезны.
Ответы
Ответ 1
Короче: он зависит от браузера.
Подробнее:
Я нашел этот тест JSPerf: http://jsperf.com/instanceof-performance/2, сравнивающий проверку экземпляра JavaScript по сравнению с логической проверкой на наличие/отсутствие свойства в объекте.
Общий результат (остерегайтесь небольшого количества образцов) заключается в том, что в Chrome оба метода одинаковы с преимуществами для instanceof. Тем не менее, в FF проверка свойства выполняется быстрее, чем оператор instanceof. Обновление Apr 2017: Как пояснил @ngryman: В обеих версиях FF и Chrome выполнение проверки свойств кажется значительно быстрее, чем instenaceof.
Было бы интересно продлить этот тест в таком случае, как проверка того, имеет ли сильное влияние на объект сравнение строк, например obj.type == 'MyClass'
.
Ответ 2
Это не верно для Java больше - см. здесь.
Что касается Javascript, я не могу найти статей, которые обсуждают это, но я очень сомневаюсь, что instanceof будет причиной каких-либо проблем с производительностью. Если вам нужно использовать его, я бы сказал, иди за ним, а затем передумай, только если у тебя проблемы с производительностью.
Ответ 3
Вы могли бы легко сделать свой собственный JavaScript-тест похожим на этот, связанный с ссылкой Калеба.
Ответ 4
Я бы не стал беспокоиться о производительности самого экземпляра оператора, потому что сам JavaScript редко является причиной проблем с производительностью. DOM-манипуляции обычно занимают гораздо больше времени. Однако, если вам нужен экземпляр в тяжелом цикле, я бы предложил его профилировать с использованием профилировщика FireBug.
Ответ 5
Предварительная зрелая оптимизация является основной причиной всего зла. Попробуйте, и если у вас возникнут проблемы с производительностью, попробуйте решить проблему.
Не пытайтесь решить что-то, что никогда не будет проблемой на первом месте для вас.