Подтвердить что ты не робот

Использует ли оператор instanceof в javascript проблему производительности?

Я слышал, что instanceof оператора в java является проблемой производительности,

Это верно для Javascript (IE6, IE7, IE8, FF, Chrome, Safari и т.д.)? любые ссылки на аутентичные документы были бы полезны.

4b9b3361

Ответ 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

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

Не пытайтесь решить что-то, что никогда не будет проблемой на первом месте для вас.