2014-01-11 3 views
0

Он получает много сказан, что локальные переменные быстрее, чем глобал в JavaScript, например:Локальные переменные Javascript - стоит ли их использовать?

function() 
{ 
    // Local variable 
    var a = 9 
} 

Например, я думал о альясинге глобального объекта Math локального переменного Mathl или в качестве альтернативы наложения конкретного (много) использует локальную переменную/функцию, например Mathround(), вместо использования Math.round().

Теперь вещи, которые я собираюсь сделать с помощью (например, Math.round()), можно использовать много раз на анимационный кадр (50ish), и может быть 60 кадров в секунду. Поэтому, если я это сделаю, можно избежать многих поисков. - и это всего лишь один пример того, с чем я мог бы это сделать. Было бы много похожих переменных, которые я мог бы использовать.

Так что мой вопрос - это действительно стоит? Является ли разница ощутимой, когда так много поисков избегают?

+2

Вы можете измерить разницу. Сделай эксперимент! – Trojan

+3

Вы должны ** не ** предполагать, что 'x.y()' будет работать так же, как 'a = x.y; a(); ' –

+6

Это не вопрос медленного и быстрого. Это вопрос глобального и местного, и в 99% случаев вы хотите, чтобы местные жители, поэтому я бы не стал беспокоиться об этом. – elclanrs

ответ

0

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

Не так редко можно увидеть, что document является псевдонимом локальной переменной.

Посмотрите на this part библиотеки ExtJS, например.

(function() { 
    var DOC = document, 

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

E.g.

var log = console.log; 

log('test'); //TypeError: Illegal invocation 

//you could use bind however 
log = console.log.bind(console); 
+1

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

+0

Правильно, назначение псевдонимов в этом фрагменте кода - это минимизация, а не производительность. –

+0

@EvanTrimboli У этого также есть влияние производительности. – plalx

1

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

Трудно написать четкий, удобный для чтения код, когда вы отправляетесь писать то, что люди могут понять. Это намного сложнее, если вы попытаетесь написать что-то, что компьютеры могут выполнить быстрее (прежде чем вы даже знаете, что быстрее означает с точки зрения вашего приложения). Сосредоточьтесь на ясности и проблем с производительностью при возникновении проблем.

Что касается вашего конкретного примера. Если вы умираете, чтобы узнать ответ, then test it.

0

Скажем, у вас есть этот код:

for(...) { 
    someFunc(); 
    var y = Math.cos(x); 
    ... 
} 

Для выполнения Math.cos(x) на JS VM должен а) вычислить местоположение глобального объекта Math и б) получить cos свойство этого. Только в случае, если кто-то внутри, что someFunc() не делать сумасшедшие вещи, как это, например:

Math = {}; 

В целом в JS доступа к локальной переменной похож (если не точно), чтобы получить доступ к элементу массива с помощью известного индекса. Доступ к глобальным объектам почти всегда осуществляется с помощью ключа на картах.

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