Объявление переменной и скорость выполнения (компиляция, инициализация, оптимизация)

~RA~

Одарённая.
Топикстартер
12 лет на форуме
Сообщения
11 861
Реакции
3 450
А не правильней ли вынести объявление переменной link из цикла?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 194
Реакции
10 846
А не правильней ли вынести объявление переменной link из цикла?
Зачем? Это локальная переменная данного блока кода, снаружи она нигде не используется. Идеологически верно локальные переменные держать именно внутри их области действия. Иначе можно получить путаницу с инициализированными значениями.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 194
Реакции
10 846

~RA~

Одарённая.
Топикстартер
12 лет на форуме
Сообщения
11 861
Реакции
3 450

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 194
Реакции
10 846
То есть тактов процессора
Какие такты процессора????
Это же шитый код виртуальной машины! Сейчас специально влез внутрь и проверил - все локальные относительно блока кода переменные создаются вместе с блоком кода не зависимо от места, где они в нем объявлены. Xотя, теоретически, возможно, что чем больше локальных переменных, тем медленнее блок создается. Но, с другой стороны, в каком то блоке кода все равно создаваться она должна - в яваскрипте все переменные по сути локальные к определенному блоку кода.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 194
Реакции
10 846
все локальные относительно блока кода переменные создаются вместе с блоком кода не зависимо от места, где они в нем объявлены
Причем, судя по всему, относительно главного блока кода текущей функции.
Т.е. код
JavaScript:
function main () {
    if (app.documents.length == 0) {
        return false;
    }
    var doc = app.activeDocument;
    var find = 'H:\\A-14\\3D';
    var change = 'G:\\A-14\\3-D';
    var links = doc.links.everyItem().getElements();
    for (var i = 0; i < links.length; i++) {
        var link = links[i];
и
JavaScript:
function main () {
var doc,find,change,links,i,link;
    if (app.documents.length == 0) {
        return false;
    }
    doc = app.activeDocument;
    find = 'H:\\A-14\\3D';
    change = 'G:\\A-14\\3-D';
    links = doc.links.everyItem().getElements();
    for (i = 0; i < links.length; i++) {
        link = links[i];
с точки зрения интерпретатора эквивалентен
 

andrejK

R.I.P.
Сообщения
10 300
Реакции
5 218
в индизайне все процессоры бестактные
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 194
Реакции
10 846

~RA~

Одарённая.
Топикстартер
12 лет на форуме
Сообщения
11 861
Реакции
3 450
@_MBK_, забавы ради, проверь на чистом жаваскрипте:
Цикл по И от 0 до мульона
Иницилизируем Х и присваивает ему и.
И второй вариант:
Иницилизируем Х
Цикл по И от 0 до мульона
Присваиваем иксу И.

Я с утюга средь крокодилов.
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
проверь на чистом жаваскрипте
JavaScript:
$.hiresTimer
for (var i = 0; i < 1000000000; i++) {
    var b = i;
}
$.writeln($.hiresTimer)
var b;
$.hiresTimer
for (var i = 0; i < 1000000000; i++) {
    b = i;
}
$.writeln($.hiresTimer)
Вот пример для миллиарда. На моей системе разница примерно 0,529599 секунд. Это недопустимо, простите меня, люди.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 194
Реакции
10 846
На моей системе разница примерно 0,529599 секунд.
Это более чем странно
По моей теории они вообще одинаково по времени отрабатывать должны.
Попробуй местами поменять части кода - разница сохранится?
 

~RA~

Одарённая.
Топикстартер
12 лет на форуме
Сообщения
11 861
Реакции
3 450
По моей теории они вообще одинаково по времени отрабатывать должны.
Это если умный компилятор поправит. А жаваскрипт в индизайне кто-то будет оптимизировать? Вот и я так же думаю.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 194
Реакции
10 846

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 194
Реакции
10 846
Адобовская жабаскрипт машина
По идее оба цикла должны генерить один и тот же код, локальная переменная b объявляется в самом начале вместе с созданием главного блока кода, строка var b; не должна генерировать вообще никакого кода
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 194
Реакции
10 846