Я пытаюсь получить некоторые точные сравнения времени выполнения PHP и Python (и, возможно, любого другого языка, который я должен включить). Время в сценарии не является моей проблемой, но время в сценарии не учитывает все, начиная с момента запроса на запуск сценария для вывода.
1) Is it actually worth taking such things into account?
2) Assuming it is worth taking it into account, how do I do this?
Я использую Mac, поэтому у меня есть доступ к командам Linux, и я не боюсь скомпилировать / создать команду, чтобы помочь мне, я просто не знаю, как написать такую команду.
Если ваша идея состоит в том, чтобы сравнить языки, я бы сказал, что все, что находится за их пределами, не актуально для целей сравнения.
Тем не менее, вы можете использовать команду time, чтобы все измерить и сравнить со временем в скрипте.
Так:
$ time script.php
HI!
real 0m3.218s
user 0m0.080s
sys 0m0.064s
Он предоставит вам время часов, время пользователя (интерпретатор PHP) и системное время (время ОС)
Если вы думаете о сети, то это становится намного сложнее, потому что вы будете смешивать накладные расходы веб-сервера, и это не всегда легко сравнивать, если, скажем, вы используете WSGI v / s mod_php. Затем вам нужно будет подключить зонды к веб-сервисным частям цепочки.
При оптимизации кода стоит учитывать скорость. Обычно вы должны знать, почему вы оптимизируете код (например, конкретная задача в существующей кодовой базе занимает слишком много времени, а не «Я слышал, что PHP медленнее, чем Python»). Стоит учитывать скорость нет, если вы на самом деле не планируете переключать языки. То, что один крошечный модуль делает что-то немного быстрее, не означает, что переписать приложение на другом языке - хорошая идея. Помимо скорости, есть много других факторов, влияющих на выбор языка.
Вы, конечно, тестируете. Выполните две кодовые базы несколько раз и сравните время. Вы можете использовать команду время, если оба сценария выполняются из оболочки, или использовать соответствующие функции тестирования для каждого языка; последний случай, естественно, сильно зависит от реального языка.
Что ж, вы можете использовать команду "time", чтобы помочь:
you@yourmachine:~$ time echo "hello world"
hello world
real 0m0.000s
user 0m0.000s
sys 0m0.000s
you@yourmachine:~$
И это позволит избежать времени за пределами окружающей среды.
Что касается того, нужно ли вам на самом деле выделять время для этой дополнительной работы ... это полностью зависит от того, что вы делаете. Я предполагаю, что это для какого-то веб-приложения, поэтому это зависит от того, как на самом деле работает используемая вами структура ... кэширует ли она какую-то скомпилированную (или проанализированную) версию скрипта? Если это так, то время запуска не будет иметь никакого значения (поскольку первое попадание будет единственным, в котором существует время запуска).
Кроме того, не забудьте запустить тесты в цикле, чтобы вы могли не учитывать первый запуск (и, если хотите, включить стоимость первого запуска в отчет). Я провел несколько тестов на Java, и первый запуск всегда самый медленный из-за того, что JIT выполняет свою работу (и такое же попадание может существовать в PHP, Python и любых других языках, которые вы пробуете).