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

  • Автор темы Автор темы ~RA~
  • Дата начала Дата начала

~RA~

Одарённая истеричка.
Топикстартер
15 лет на форуме
Сообщения
13 017
Реакции
3 862
А не правильней ли вынести объявление переменной link из цикла?
 
А не правильней ли вынести объявление переменной link из цикла?
Зачем? Это локальная переменная данного блока кода, снаружи она нигде не используется. Идеологически верно локальные переменные держать именно внутри их области действия. Иначе можно получить путаницу с инициализированными значениями.
 
То есть тактов процессора
Какие такты процессора????
Это же шитый код виртуальной машины! Сейчас специально влез внутрь и проверил - все локальные относительно блока кода переменные создаются вместе с блоком кода не зависимо от места, где они в нем объявлены. Xотя, теоретически, возможно, что чем больше локальных переменных, тем медленнее блок создается. Но, с другой стороны, в каком то блоке кода все равно создаваться она должна - в яваскрипте все переменные по сути локальные к определенному блоку кода.
 
все локальные относительно блока кода переменные создаются вместе с блоком кода не зависимо от места, где они в нем объявлены
Причем, судя по всему, относительно главного блока кода текущей функции.
Т.е. код
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];
с точки зрения интерпретатора эквивалентен
 
в индизайне все процессоры бестактные
 
@_MBK_, забавы ради, проверь на чистом жаваскрипте:
Цикл по И от 0 до мульона
Иницилизируем Х и присваивает ему и.
И второй вариант:
Иницилизируем Х
Цикл по И от 0 до мульона
Присваиваем иксу И.

Я с утюга средь крокодилов.
 
проверь на чистом жаваскрипте
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 секунд. Это недопустимо, простите меня, люди.
 
На моей системе разница примерно 0,529599 секунд.
Это более чем странно
По моей теории они вообще одинаково по времени отрабатывать должны.
Попробуй местами поменять части кода - разница сохранится?
 
По моей теории они вообще одинаково по времени отрабатывать должны.
Это если умный компилятор поправит. А жаваскрипт в индизайне кто-то будет оптимизировать? Вот и я так же думаю.
 
Адобовская жабаскрипт машина
По идее оба цикла должны генерить один и тот же код, локальная переменная b объявляется в самом начале вместе с созданием главного блока кода, строка var b; не должна генерировать вообще никакого кода
 
Последнее редактирование: