LINUX.ORG.RU

Вопрос по перформансу

 , ,


0

1

Я неоднократно поднимал тут тему, по поводу того, зачем писать var в глобальной области, и ни разу не слышал адекватного объяснения. Сейчас я наконец сам нашел ответ. Это оптимизация. Просто переменные с var ложаться в отдельный скоп, и это позволяет сокращать время поиска, не проверяя весь глобал, переменные ищутся в первую очередь в этом скопе. По крайней мере это справедливо для ноды. Но вот ведь что забавно. Это работает только для примитивных значений, с объектами это не прокатывает, и даже, немного наоборот:



test = function(i, code, name){
   console.time(name)
    while(i--) code()
   console.timeEnd(name)
}

i = 10000000

var a = 1
b=1
global.c = 1

var o1 = {c: 1}
o2 = {c: 1}
global.o3 = {c: 1}


test(i, function(){return a}, "a")
test(i, function(){return b}, "b")
test(i, function(){return c}, "c")
test(i, function(){return o1.c}, "o1.c")
test(i, function(){return o2.c}, "o2.c")
test(i, function(){return o3.c}, "o3.c")


//>>>> a: 22ms
//>>>> b: 131ms
//>>>> c: 116ms
//>>>> o1.c: 138ms
//>>>> o2.c: 117ms
//>>>> o3.c: 118ms

Почему это, интересно?



Последнее исправление: newquestion (всего исправлений: 1)

Никакой это не перфоманс.
Область видимости var ограничивается js файлом.
Если надо, чтобы перменная была видна для всех скриптов страницы, то помещай ее в глобальный объект window, если нет, то нет.

special-k ★★★
()
Ответ на: комментарий от special-k

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

newquestion
() автор топика
Ответ на: комментарий от special-k

Область видимости var ограничивается js файлом.

Кстати, не js файлом, а модулем. В js файлах, обычных, для всех переменных, что с вар, что без, область видимости глобальна.

newquestion
() автор топика

и даже, немного наоборот:

С чего такой вывод? с разницы в пределах погрешности? Ты на RT запускал тест? У тебя на системе нет левых процессов, которые могут повлиять.

Если ты о

 
var a = 1
//>>>> a: 22ms

то скоп тут ваще непричем. ваще никак.

anonymous
()
Ответ на: комментарий от anonymous

У тебя на системе нет левых процессов, которые могут повлиять.

Вряд ли, только мелочь. И я несколько раз запускал. Попробуй у себя.

то скоп тут ваще непричем. ваще никак.

причом. Переменные с вар в отдельном скопе, с него поиск и начинается.

newquestion
() автор топика

это безумие

Производительность не там, а в данных структурах их связях и алгоритмах. И да - циклы это забавный источник тормозов. Там оптимизация везде хромает.

anonymous
()
Ответ на: комментарий от special-k

В браузере нет js модулей.

А модули, кстати, на клиенте, сделать очень просто. Просто забирай эти файлы xhr'ом, и ложи в Function, будут тебе модули.

newquestion
() автор топика

Пиши на asm.js если тебя оптимизация интересует.

anonymous
()
Ответ на: комментарий от special-k

Ок, только как это относиться к теме? Я говорю, что разница по перформансу между a = 1 и var a = 1 есть, и она ощутима, но только для примитивных значений. Вот интересно, почему это так.

newquestion
() автор топика
Ответ на: комментарий от newquestion

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

anonymous
()
Ответ на: комментарий от newquestion

как это относиться к теме?

Оба варианта не правильны.

special-k ★★★
()
Ответ на: комментарий от anonymous

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

Нода тут не причем, аналогичные результаты и в хроме. Будь ты *настоящим программистом* ты бы это понимал, и не порол бы тут чушь.

newquestion
() автор топика
Ответ на: комментарий от newquestion

Нода тут не причем, аналогичные результаты и в хроме

Ты не поверишь.

ya-betmen ★★★★★
()
Ответ на: комментарий от NeOlip

Надо же, действительно. Значит мое предположение неверно.:(

newquestion
() автор топика
Ответ на: комментарий от NeOlip

какая же срань, этот ваш говноскрипт

anonymous
()

с объектами это не прокатывает

Наверное потому, что к объектам идёт доступ по ссылке в общую кучу, а простые данные записываются прямо в слот переменной?

даже, немного наоборот

+-ничего. Недостоверно, хрен знает как там в кишках всё устроено. Может оно соптимизировало твой {c:1} и хранит 1 объект на всех, а при записи копирует.

no-such-file ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.