Короткие переменные не более 7 символов – ускорение 15%
Как влияет длина имен переменных на скорость программы? Если использовать очень длинные переменные – очевидно, что весьма сильно. Однако и с короткими именеми не все просто:
- {$x=1;}
- {$x2=1;}
- {$x03=1;}
- {$x004=1;}
- {$x0005=1;}
- {$x00006=1;}
- {$x000007=1;}
- {$x0000008=1;}
- {$x000000010=1;}
- {$x00000000012=1;}
- {$x0000000000014=1;}
- {$x000000000000016=1;}
- {$x0000000000000000000000000000032=1;}
выдает предсказуемый результат:
счетчик | кол-во вызовов |
общее вpемя |
сpеднее вpемя |
% от min | % от max | |
test N1 | 1 | 1.7000 | 1.7000 | 00.0% | 68.5% | |
test N2 | 1 | 1.7028 | 1.7028 | 00.2% | 68.6% | |
test N3 | 1 | 1.7182 | 1.7182 | 01.1% | 69.2% | |
test N4 | 1 | 1.7228 | 1.7228 | 01.3% | 69.4% | |
test N5 | 1 | 1.7536 | 1.7536 | 03.2% | 70.6% | |
test N6 | 1 | 1.7504 | 1.7504 | 03.0% | 70.5% | |
test N7 | 1 | 1.7799 | 1.7799 | 04.7% | 71.7% | |
test N8 | 1 | 1.9604 | 1.9604 | 15.3% | 78.9% | |
test N9 | 1 | 1.9865 | 1.9865 | 16.9% | 80.0% | |
test N10 | 1 | 2.0119 | 2.0119 | 18.3% | 81.0% | |
test N11 | 1 | 2.0302 | 2.0302 | 19.4% | 81.7% | |
test N12 | 1 | 2.1288 | 2.1288 | 25.2% | 85.7% | |
test N13 | 1 | 2.4835 | 2.4835 | 46.1% | 100.0% |
Переменные от 32 символов могут тормознуть программу почти на половину.
Но если заполнять пробелами (" "), чтобы все строки “$x=1; ...” по длине занимали одно и тоже расстояние, то получается вот что:
- {$x=1; }
- {$x2=1; }
- {$x03=1; }
- {$x004=1; }
- {$x0005=1; }
- {$x00006=1; }
- {$x000007=1; }
- {$x0000008=1; }
- {$x000000010=1; }
- {$x00000000012=1; }
- {$x0000000000014=1; }
- {$x000000000000016=1; }
- {$x0000000000000000000000000000032=1; }
счетчик | кол-во вызовов |
общее вpемя |
сpеднее вpемя |
% от min | % от max | |
test N1 | 1 | 2.1167 | 2.1167 | 01.9% | 83.3% | |
test N2 | 1 | 2.0766 | 2.0766 | 00.0% | 81.7% | |
test N3 | 1 | 2.0937 | 2.0937 | 00.8% | 82.4% | |
test N4 | 1 | 2.0821 | 2.0821 | 00.3% | 81.9% | |
test N5 | 1 | 2.1145 | 2.1145 | 01.8% | 83.2% | |
test N6 | 1 | 2.0921 | 2.0921 | 00.7% | 82.3% | |
test N7 | 1 | 2.1076 | 2.1076 | 01.5% | 82.9% | |
test N8 | 1 | 2.3058 | 2.3058 | 11.0% | 90.7% | |
test N9 | 1 | 2.3046 | 2.3046 | 11.0% | 90.7% | |
test N10 | 1 | 2.3107 | 2.3107 | 11.3% | 90.9% | |
test N11 | 1 | 2.3111 | 2.3111 | 11.3% | 90.9% | |
test N12 | 1 | 2.3680 | 2.3680 | 14.0% | 93.2% | |
test N13 | 1 | 2.5418 | 2.5418 | 22.4% | 100.0% |
Уж как комментировать тест переменной из одного символа (на 2% медленне самого быстрого) – не знаю… Наверно, тесты имеют большую погрешность. Предлагаю кому-нибудь запустить тест на час (исходники теста внизу страницы).
Одно ясно – при длине переменных в 8 и более символов происходит резкое снижение производительности, до 15%! А команд, включающих названия переменных, очень много. Еще один менее резкий скачек на переменных с именем 16 символов в длину и более. А в остальных случаях – чем больше, тем дольше, весьма линейная зависимость.
Вывод – не используйте переменны из 8 и более символов, выиграете 15% скорости (вернее, сэкономите).