Это быстрее, чтобы получить доступ к локальной переменной, чем атрибут объекта? - PullRequest
0 голосов
/ 20 марта 2011

Простой языковой вопрос.Я всегда делал это:

myVar = myObj.myAttribute

, когда мне нужно много раз получить доступ к моему атрибуту.

Мне интересно, приобрел ли я это суеверие или вообщебыстрее?

Редактировать: Я также хотел бы знать, является ли это

myVar = myObj.myAttribute/100
for (i=0; i<100; i++) {
    print myVar*i;
}

более эффективным, чем помещение (myObj.myAttribute / 100) в цикл.Будут ли современные компиляторы и интерпретаторы обнаруживать, что эта часть уравнения не меняется?

Ответы [ 3 ]

1 голос
/ 20 марта 2011

Как правило, в зависимости от языка, может быть.

Однако вы вряд ли заметите разницу, если только вы не используете (например) жесткий цикл.

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

Однако, если у вас есть код, который, как вы знаете, имеет проблему с медлительностью, этот вид оптимизации, безусловно, стоит рассмотреть.

1 голос
/ 20 марта 2011

В данном конкретном случае то, что вы сделали, более эффективно, так как это одно деление против 100.

Я присваиваю переменным свойство только в том случае, если могу оптимизировать операции, выполняемые позже, как в вашем случае, или ожидать нескольких вызовов одного и того же свойства, и поиск объекта, вероятно, будет дорогостоящим. Как правило, использование локальной переменной должно быть более быстрым способом обработки, поскольку может быть дорогостоящим поиск сложных свойств вместе с лучшим контролем значения этого свойства и возможной предварительной проверкой перед циклом. Тем не менее, это может быть неэффективно только в том случае, если поиск может произойти один или два раза для вызова функции, что увеличивает накладные расходы и усложняет выполнение кода.

1 голос
/ 20 марта 2011

Полагаю, это может зависеть от языка и / или компилятора; но, вообще говоря, чем меньше ваш код должен делать, тем быстрее он будет.

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


Например, в Javascript сказано, что быстрее использовать локальную переменную, а не пересчитывать доступ к объектам в несколько раз.
т.е. это:

var a = obj.a.b.c;
a.a = 10;
a.b = 20;
a.c = 30:

быстрее, чем:

obj.a.b.c.a = 10;
obj.a.b.c.b = 20;
obj.a.b.c.c = 30:
...