2013-06-11 3 views
2

Это может быть очевидный вопрос, но мне было интересно, существует ли разница в эффективности между объявлением чего-то в одноразовой используемой переменной или просто выполнением кода один раз (а затем его сохранение, а затем его использование). НапримерОбъявление переменной одноразового использования Javascript

var rowId = 3, 
updateStuff(rowId); 

В.С.

updateStuff(3); 
+0

Если вы не собираетесь использовать это значение после передачи его в 'updateStuff', сначала не помещайте его в переменную. Преимущество, которое я вижу, это то, что оно более читаемо, используя переменную. Он может быть захвачен закрытием и, возможно, никогда не выпущен/GC'ed. Но это, и эффективность ** этого **, не должно быть проблемой – Ian

+0

, если есть разница, это незначительно. вам следует больше беспокоиться о повторном использовании и удобочитаемости кода в зависимости от того, что вы делаете. если rowID всегда установлен в 3 и никогда не используется нигде, то нет смысла использовать для него переменную. однако, если вы планируете расширить свой код в будущем и можете захотеть изменить/повторно использовать rowID, я бы использовал переменную. –

+0

Я просеиваю большую базу кода, которая делает это повсюду (без намерения расширить эти разделы), поэтому мне было просто любопытно, стоит ли чистить. – user1882953

ответ

1

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

Если вы действительно обеспокоены оптимизацией, сведение к минимуму кода с помощью чего-то вроде Google Closure поможет; у него есть много инструментов, которые помогут вам сделать ваш код более эффективным.

-2

EDIT:

delete не относится к не-объектов, поэтому мой первоначальный ответ был ошибочным. Furtermore, поскольку переменная rowId объявлена ​​с флагом var, она будет очищена сборкой мусора. С другой стороны, если бы она была определена без нее, она будет жить на протяжении всей страницы/приложения.

источник: http://lostechies.com/derickbailey/2012/03/19/backbone-js-and-javascript-garbage-collection/


Переменная RowId будет храниться в памяти и не будет выпущен сборщиком мусора, так как он ссылается на. Если вы не отпустите его, как ниже, он будет там до конца жизни программы. Также помните, что потребуется время, чтобы создать переменную (минимальное, но вы просили)

var rowId = 3 
    updateStuff(rowId); 
    delete rowId 

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

OBS. Некоторые языки оптимизируют код как таковой и просто удаляют последовательность, но я сильно сомневаюсь, что JavaScript делает это.

+2

Вы не можете удалить свойства объектов только для vars. – Lloyd

+1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete –

+0

Он будет выпущен до тех пор, пока ничего в 'updateStuff' не будет ссылаться на него (или после того, как эти ссылки будут выпущен) – Ian

0

Если вы использовали компиляцию google, и если вы аннотировали var как константу (как показано в вашем примере), я подозреваю, что компилятор удалит константу и заменит ее на литерал.

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

И объявления var требуют времени, и если вы добавили это var в глобальное пространство имен, то есть еще одна вещь, которую будут искать при разрешении имен.

0

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

Даже со старым браузером, если есть разница, не о чем беспокоиться.

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