Я всегда (ну стараюсь) комментировать мой код. Я настроил свой сервер для удаления этих комментариев/лишнего пробела перед доставкой. Было бы лучше не иметь комментариев в коде живых систем (Javascript/php) и, следовательно, уменьшить эти накладные расходы или удалить или интерпретировать?
Ответ 2
Хотя общее предположение состоит в том, что если PHP-пережевывание через комментарии вызывает отсутствие измеримой разницы, лучше проверить его, не так ли?
(Обратите внимание: по здравому смыслу мы ожидаем, что обработка чистого запроса, управление разрешениями, управление процессом, отправка этого, делегирование этого, запуск среды выполнения PHP, управление различными кешами, ведение файлов активов, общий диск и сетевые операции ввода/вывода и т.д., oh и BTW, также выполняющие код, все это, скорее всего, намного больше, чем любое большое количество комментариев.)
Итак, я дал ему очень простой путь, чтобы мгновенно почувствовать это.
1. Настройка
Предсказание "влияния комментариев" так сложно обнаружить как нейтрино, я был преднамеренно после слегка патологической установки, пытаясь сделать разница измерима, но все же не слишком чрезмерна.
Я создал два файла. Один без комментариев, всего ~ 100 байт, прямо к точке, no-comments.php
:
<?php
function task() {
++$GLOBALS;
echo "[$GLOBALS] Lorem ipsum dolor sit amet cosectetur...\n";
}
И еще, ~ 60K (пребывание под 64K только для суеверия, связанного с кучей), comments.php
:
<?php
/* ... some 30K comments ... */
// OK, that something, but how about:
/* ... same 30K comments again ... (Phantomjs changelog, for the curious of you. :) ) */
// Finally, do something:
function task() {
++$GLOBALS; // Comments are cheap, so let me tell you how much I enjoyed this instead of properly declaring a counter. :)
echo "[$GLOBALS] Lorem ipsum with a lot of comments...\n";
}
Примечание: это, конечно, очень вероятно, что это повлияет на размер файла на самом деле, а не только на комментарии, но это всегда неотъемлемая часть "комментариев (не)", так или иначе, а также я хотел просто что-то первое. Возможно, даже это уже неизмеримо, верно?
Общая идея заключалась тогда в том, чтобы цикл task()
по-разному, всего лишь бит (или вообще ничего) изнутри одного и того же PHP-процесса, и многое из-за пределов его, посредством отдельных исполнений, чтобы принудительно переназначить, что является единственной интересной частью этого эксперимента.
Для самых быстрых результатов я сделал несколько shell:
#!/bin/bash
for (( i = 0; i < 1000; i++ ))
do
php comments.php # <-- and another batch with "no-comments.php"
done
Но это оказалось ненадежным, так как увеличение числа циклов вызвало необъяснимые и непропорциональные изменения во времени выполнения. Вместо этого я переключился на PHP-бегун, который работал более гладко:
#!/usr/bin/php
<?php
$t1 = microtime(true);
for ($i = 0; $i < 1000; ++$i ) {
system("php comments.php"); // <-- and with "no-comments.php"
}
$t2 = microtime(true);
echo "Time: ", $t2 - $t1
Для HTTP-прогонов я добавил этот index.php
:
<?php
$GLOBALS = 0; // innovative use of a dull language feature ;)
$t1 = microtime(true);
require_once (isset($_GET['no']) ? 'no-' : '') . 'comments.php';
// Played a bit with looping here, but ended up leaving it out.
// for ($i = 0; $i < 3; ++$i) {
// task();
// echo '<br>';
// }
$t2 = microtime(true);
echo "<hr>Time: ", number_format($t2 - $t1, 10);
Примечание: сначала, к сожалению, я оставил PHP Zend Opcache включенным и потратил много времени, пытаясь понять результаты...; -o Затем я отключил кеш, конечно, и повторил веб-тесты (только).
Хост - это просто ванильный Debian, Apache2 с некоторым PHP5 (я думаю, он FPM - даже не потрудился проверить, так как это должно быть ортогонально субъекту тестирования (пожалуйста, поправьте меня, если это не так).Это может даже помочь разоблачить разницу, уменьшив ненужные служебные данные запуска PHP, маскируя малейшее время разбора комментариев.)
2. Результаты - оболочка:
Запуск PHP-cli был неожиданно медленным, поэтому мне стало очень скучно, после всего лишь дюжины циклов из 1000 итераций для обоих вариантов. (Результаты в секундах.)
КОММЕНТАРИИ:
+44,2015209198
39.710990905762
42.374881982803
36.29861998558
44.764121055603
38.85772395134
42.627450942993
38.342661142349
48.539611816406
39.784120082855
50.34646987915
47.782819032669
36.974604845047
+45,692447900772
СРЕДНЕЕ: 42.592717
НЕТ КОММЕНТАРИЙ:
+45,617978811264
43.397685050964
46.341667175293
44.246716976166
40.348230838776
43.048954963684
38.57627081871
50.429704189301
41.811543226242
35.755078077316
53.086957931519
31.751699924469
48.388355970383
+49,540207862854
СРЕДНЕЕ: 43.738647
Как вы можете видеть, все это мусор... Но если мы игнорируем колебания окружающей среды, вывод заключается в использовании большего количества комментариев, это сделает ваш script быстрее!:)
3. Результаты - HTTP, Zend Opcache:
(Некоторые шумы были вырезаны из выходов ab.)
КОММЕНТАРИИ:
ab -qd -n 10000 'http://.../comments/?yes'
Server Software: Apache/2.4.10
Concurrency Level: 1
Time taken for tests: 3.158 seconds
Complete requests: 10000
Failed requests: 0
Non-2xx responses: 10000
Total transferred: 7120000 bytes
HTML transferred: 4620000 bytes
Requests per second: 3166.12 [#/sec] (mean)
Time per request: 0.316 [ms] (mean)
Transfer rate: 2201.45 [Kbytes/sec] received
НЕТ КОММЕНТАРИЙ:
ab -qd -n 10000 'http://.../comments/?no'
Server Software: Apache/2.4.10
Concurrency Level: 1
Time taken for tests: 3.367 seconds
Complete requests: 10000
Failed requests: 0
Non-2xx responses: 10000
Total transferred: 7120000 bytes
HTML transferred: 4620000 bytes
Requests per second: 2969.95 [#/sec] (mean)
Time per request: 0.337 [ms] (mean)
Transfer rate: 2065.04 [Kbytes/sec] received
Ничего себе!: -o Так же, как работает раковина!:) ОК, не веря своим глазам, я повторил это еще несколько раз, пока это не имело смысла...:) Видишь? Здесь:
Benchmarking ...<"NO COMMENTS">... (be patient).....done
Time taken for tests: 2.912 seconds
Total transferred: 7120000 bytes
HTML transferred: 4620000 bytes
Requests per second: 3433.87 [#/sec] (mean)
Time per request: 0.291 [ms] (mean)
Transfer rate: 2387.61 [Kbytes/sec] received
(BTW, не спрашивайте меня, почему ответы без 2xx. Через Интернет они были 200 OK.)
Затем, в десять раз больше итераций:
КОММЕНТАРИИ:
Time taken for tests: 32.499 seconds
Requests per second: 3077.04 [#/sec] (mean)
Time per request: 0.325 [ms] (mean)
Transfer rate: 2139.51 [Kbytes/sec] received
НЕТ КОММЕНТАРИЙ:
Time taken for tests: 28.257 seconds
Requests per second: 3538.92 [#/sec] (mean)
Time per request: 0.283 [ms] (mean)
Transfer rate: 2460.66 [Kbytes/sec] received
Фу, отлично! Комментарии - зло!;)
Ну, я все еще сделал еще пару, и я могу показать вам этот результат без комментариев, строго от записи:
Time taken for tests: 37.399 seconds
Requests per second: 2673.84 [#/sec] (mean)
Time per request: 0.374 [ms] (mean)
Transfer rate: 1859.15 [Kbytes/sec] received
4. Результаты - HTTP, Zend Opcache DISABLED:
ОК, осознав, что я оставил кеш, я прокомментировал расширение из конфигурации PHP-FPM (так, действительно, что работает здесь), перезапустил службы, проверил phpinfo()
и собрал новые результаты
КОММЕНТАРИИ:
Time taken for tests: 34.756 seconds
Requests per second: 2877.23 [#/sec] (mean)
Time per request: 0.348 [ms] (mean)
Transfer rate: 2000.58 [Kbytes/sec] received
Еще раз:
Time taken for tests: 31.170 seconds
Requests per second: 3208.24 [#/sec] (mean)
Time per request: 0.312 [ms] (mean)
Transfer rate: 2230.73 [Kbytes/sec] received
НЕТ КОММЕНТАРИЙ:
Time taken for tests: 30.060 seconds
Requests per second: 3326.70 [#/sec] (mean)
Time per request: 0.301 [ms] (mean)
Transfer rate: 2313.10 [Kbytes/sec] received
Еще раз:
Time taken for tests: 32.990 seconds
Requests per second: 3031.23 [#/sec] (mean)
Time per request: 0.330 [ms] (mean)
Transfer rate: 2107.65 [Kbytes/sec] received
Ну. Как вы можете видеть, в основном: без лишнего разницы из состояния включения/выключения opcache! Также между комментариями вкл/выкл (кроме крошечного намека, но, увидев колебания...)!: -o
5. Вывод
Итак... Наконец, цифры! Ну, бесполезный мусор, по сути, но, по крайней мере, не просто спекуляции с религиями. Чувствовать себя намного лучше, чем просто смутить, из-за разумной причины путать данные, чем с отсутствием!:)
Теперь, после того, как я, конечно, потратил больше времени на это, ответ на давний вопрос о том, "сколько комментариев стоит", остается загадкой.
Поскольку нейтрино (невероятно) были обнаружены в течение многих лет, мы можем с уверенностью начать смущаться. Кто-то в конечном итоге приведет к прорыву и, наконец, обнаружит влияние комментариев к PHP? Никто не знает...