Задержка профилирования PHP перед отключением

// VERY BEGIN OF SCRIPT $_SERVER['HX_startTime'] = microtime(true); ... // MY SHUTDOWN FUNCTION register_shutdown_function('HX_shutdownFn'); function HX_shutdownFn() { // formatTimeSpan is simple time to string conversion function var_dump(formatTimeSpan(microtime(true) - $_SERVER['HX_startTime'])); } ... // VERY END OF SCRIPT var_dump(formatTimeSpan(microtime(true) - $_SERVER['HX_startTime'])); 

У меня 0.0005s . в конце скрипта и 1.1 . при выключении. Это нормально? Где потеряно 1 секунда?

Скрипт – это чистый php, не использует соединение db и т. Д. Тестирование на сервере WAMP (php v 5.3.9, apache 2.2.21)

Я предполагаю, что для этого есть больше кода, чем вы опубликовали – в этом случае, если вы передаете какой-либо вывод клиенту, сценарий не будет завершен, пока он не будет отправлен .

Также могут быть зарегистрированы дополнительные функции выключения, о которых вы, возможно, не знаете, как указано в комментариях.

Если все остальное не удается, попробуйте изолировать этот скрипт (так что ТОЛЬКО строки, которые вы разместили, даже без замены) ... и сравните его запуск из командной строки и вашего веб-сервера. Могут быть некоторые связанные с сервером служебные данные.

Функция завершения работы закончится из нормального стека после закрытия какого-либо соединения и очистки. Задержка будет всегда возникать как вид характера этой функции, в зависимости от того, что вы делали раньше или пытаетесь сделать в этой функции.

В руководстве не говорится, но это функция DEBUGGING, и ее также следует рассматривать.

При нормальной работе его никогда не следует использовать. Нет никакого преимущества. Вы можете вызвать функцию выключения в конце скрипта вручную и оставить обработчик для неожиданных выходов.

Как отмечали другие, могут быть другие функции останова. Кроме того, существуют деструкторы объектов, вызываемые при выходе из области видимости (если в глобальном масштабе).

Вы можете увидеть все это в славных деталях с помощью модуля XDebug ( http://xdebug.org/ ), особенно при использовании файлов трассировки. После установки и настройки XDebug вы можете добавить XDEBUG_TRACE = 1 к своему URL-адресу и просмотреть полный стек вызовов для всего выполнения вашей страницы, включая информацию о времени для каждой строки.

С соответствующими параметрами вы также можете увидеть распределения, имена и значения параметров, возвращаемых значений и присвоений. Это очень мощный и полезный инструмент.

Это настройки, которые я использую для XDebug:

 xdebug.default_enable=1 xdebug.profiler_enable=0 xdebug.profiler_enable_trigger=1 xdebug.profiler_append=On xdebug.auto_trace=Off xdebug.show_mem_delta=On xdebug.collect_return=On xdebug.collect_params=4 xdebug.profiler_output_dir = /tmp xdebug.profiler_output_name = profile.%H.%t.%p xdebug.var_display_max_children = 999 xdebug.var_display_max_data = 99999 xdebug.var_display_max_depth = 100 xdebug.remote_enable=1 xdebug.cli_color=1 xdebug.show_local_vars=1 xdebug.show_mem_delta=1 xdebug.collect_return=1 xdebug.collect_assignments=1 xdebug.collect_params=4 xdebug.collect_includes=1 xdebug.trace_enable_trigger=1 xdebug.trace_output_dir=/tmp xdebug.trace_output_name=trace.%t.%R.%p