Возможно, не потому, что вызов медленный, а скорее поиск; Я не уверен, но вот пример:
var foo = {};
foo.fn = function() {};
var bar = {};
bar.fn = function() {};
console.time('t');
for (var i = 0; i < 100000000; i++) {
foo.fn();
}
console.timeEnd('t');
Протестировано на win8.1
- firefox 35.01: ~ 240 мс
- chrome 40.0.2214.93 (V8 3.30.33.15): ~ 760 мс
- msie 11: 34 сек
- nodejs 0.10.21 (V8 3.14.5.9): ~ 100 мс
- iojs 1.0.4 (V8 4.1.0.12): ~ 760 мс
Теперь вот интересная часть, если я изменяю bar.fn
на bar.somethingelse
:
- chrome 40.0.2214.93 (V8 3.30.33.15): ~ 100 мс
- nodejs 0.10.21 (V8 3.14.5.9): ~ 100 мс
- iojs 1.0.4 (V8 4.1.0.12): ~ 100 мс
Что-то пошло не так в v8 в последнее время? Что вызывает это?