2013-08-20 3 views
0

Является ли это:Javascript: Производительность «closured» переменных

function Con() { 
    var foo = 42; 
    this.foo = foo 
} 

более медленно, чем это:

function Con() { 
    this.foo = 42; 
} 

На последующих использований переменной Foo на объект, возвращаемый призванию из ' Con'-конструктор? Т.е. это больно, если переменная сначала живет в закрытии вызова конструктора?

EDIT: @FakeRainBrigand: Здесь вы измеряете время построения объекта с помощью конструктора. Правильно? я скорее думать о последующем использовании построенного объекта, например:

var myObj = new Con(); 
var bar = myObj.foo; 

Что такое использование времени последняя строка только (то есть, но доступ к переменным foo) в обоих случаях ?

+2

это медленнее, но ничего, что будет больно производительность –

+0

Они еще не эквивалентны. В первом вы имеете две переменные. Если 'foo' не передается по ссылке (строки, числа ...), то' foo' и 'this.foo' не будут синхронизироваться, если вы используете' foo'. Если вы используете 'this.foo', то' var foo' не поможет. – elclanrs

+0

Это один из тех случаев, когда вызовы настолько ничтожны, что вам лучше использовать более удобную для чтения кода, чем оптимизацию. – ars265

ответ

3

Это немного медленнее. Вот performance test. Это более или менее незначительно, и есть почти определенные проблемы, о которых вам следует беспокоиться. Мы можем делать это 60 миллионов раз в секунду, так что волнуйтесь о вещах, которые вы можете делать только несколько раз в секунду.

performance test with code in original question


Я changed the tests не включать на самом деле делает конструктор, и они стали еще более одинаковыми. Вероятно, это связано с внутренней оптимизацией. Здесь они попадают в пределы погрешности.

second performance test

+0

Ну, здесь вы измеряете время построения объекта с помощью конструктора. Правильно? Я скорее подумал о последующем использовании построенного объекта, например: var myObj = new Con(); var bar = myObj.foo; Какое время использует * последний оператор только * (т. Е. Доступ к переменной 'foo') в двух случаях? – loldrup

Смежные вопросы