2013-02-23 13 views
5
// 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.1s。シャットダウン機能時。それは普通ですか? 1秒はどこで失われますか?シャットダウン機能前のPHPプロファイリングの遅延

スクリプトは、DB接続を使用していない、純粋なPHPである、などWAMPサーバでのテスト(PHPのV 5.3.9はApache 2.2.21)

+0

私はつもりはこれを自分自身を実行し、結果を参照してくださいよ:

これらは私がXDebugのために使用する設定です。 –

+0

最後の 'var_dump'の後にスクリプトの最後で' exit() 'を明示的に呼び出すとどうなりますか? –

+0

あなたのセッションは保存されていますか?多分DBで?あなたはセッションハンドラを上書きしますか? – Oden

答えて

0

私はあなたが投稿よりも、これに多くのコードがあると仮定しています - その場合、出力をクライアントに転送する場合、に送信されるまで、スクリプトはシャットダウンされません。

追加のシャットダウン機能が登録されている可能性があります。これらのコメントは、コメントに記載されているように気付かない場合があります。

その他すべてが失敗した場合は、...を代用しなくても投稿した行だけを隔離し、コマンドラインとWebサーバーから実行したスクリプトを比較してみてください。サーバー固有のオーバーヘッドが発生することがあります。

0

シャットダウン機能は、一部の接続が閉じられてクリーンアップが完了した後、通常のスタックから使い果たされます。遅延は、あなたがこの機能で前にやったことに応じて、この機能の性質の種類として常に発生します。

マニュアルには言いませんが、DEBUGGING機能であり、このように扱う必要があります。

通常の操作では、決して使用しないでください。利点はありません。スクリプト終了時にシャットダウン機能を手動で呼び出し、予期しないシャットダウンのためにハンドラを残すことができます。

0

他にも言及したように、他のシャットダウン機能があるかもしれません。さらに、スコープ外に出たときに呼び出されるオブジェクトのデストラクタもあります(グローバルスコープの場合)。

特に、トレースファイルを使用している場合、XDebugモジュール(http://xdebug.org/)を使用してこのすべてを詳細に見ることができます。 XDebugをインストールして設定したら、あなたのURLに?XDEBUG_TRACE = 1を追加して、各行のタイミング情報を含め、ページの実行全体に対する完全な呼び出しスタックを見ることができます。

適切なオプションを使用すると、パラメータ、戻り値、および割り当ての割り当て、名前、値を確認することもできます。これは非常に強力で便利なツールです。

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 
関連する問題