0

すべてのphp関数の実行コストを示す参照表はありますか?

時間の実行は多くの要因に制限されており、一意の値を決定することは不可能であることは知っていますが、「イデオロギー」テーブルを探しています。

例えば、

is_dir() = cost 3
is_file() = cost 2

(例として取り上げてください;)

私が悪いことを覚えていない場合、Cには、すべての操作に必要なCPUサイクルのテーブルがあります..

編集:あなたのコメントをすべて読んだので、私のニーズに合ったテーブルがあります。

とにかく、私はそれを知っています

is_dir('/');//is faster than
is_dir('/a/very/long/path/to/check/');

しかし、私はこの状況を受け入れるのに少し苦労しています(あなたの言葉を正しく理解していれば、それは可能です)。

$a = '/';
$b = '/a/very/long/path/to/check/';
is_dir($a);  //time execution 0.003
is_file($a); //time execution 0.005
//so suppose is_dir is faster than is_file
//(still example, function names and number are random ;)
is_dir($b);  //time execution 0.013
is_file($b); //time execution 0.009
//wow, now is faster is_file()....?
4

7 に答える 7

4

そのようなチャートは役に立たず、正確でもありません。あなたの例では、関数のタイミングはローカル ファイリング システムの詳細に大きく依存し、すぐに無意味になります。

パフォーマンスを測定する唯一の真の方法は、コードをビルドして時間を計ることです。for は while よりも高速ですか? 内部のコードに固有のあらゆる種類の要因に応じて、ある状況では一方が他方よりも優れている可能性があり、別の状況では他方が高速になる場合があります。

プロファイラーを使用してコードの時間を計測し、サーバー環境上のプロジェクトにとって正確な意味のあるデータを取得します。

于 2009-07-24T12:20:47.047 に答える
1

私はそのようなテーブルを知りません。

関数のコストは、入力によって大きく異なります。

array_unique() によって処理される 1000 アイテムの配列は、5 アイテムの入力配列を使用した同じ関数よりも時間がかかります。

アプリケーションのチューニングに関心がある場合は、マイクロタイムを使用して各関数呼び出しの実行時間を計ることができます。

それはこのように見えるでしょう

$starttime = microtime();
is_dir('/var/foo');
$stoptime = microtime();
echo "is_dir cost: ".($stoptime-$startime);
于 2009-07-24T12:17:48.310 に答える
1

とにかくそのようなテーブルが存在することはあり得ないと思います。

まず、時間は入力に大きく依存します。しかし、さまざまな機能についてはそれほど問題ではありません。アルゴリズムの複雑さを指摘できます: O(n^2)、O(n log(n)) など。私たちは、そのようなことを処理するための優れた数学的装置を持っています。

それよりも大事なのは環境です。すべての環境を知っているわけではないため、機能がどれくらいの期間機能するかを予測できませんでした。NFS ボリューム上の file_exists() は、ローカルの ext3 ボリュームほど高速ではありません。リクエストが MySQL サーバーに転送される時間などを予測できませんでした。

だからあなたがすべきことは、測定、測定、測定です。独自の測定値と環境のみに依存してください。それが唯一の方法です。

于 2009-07-24T12:33:08.970 に答える
0

最も近いのは、 Vulcan Logic Disassembler(PECLリンク)と呼ばれていたVulcan Logic Dumper(作成者のWebページ/プロジェクトのホームページリンク)を介したOpCode分析です。Sarah Golemonは、彼女のブログにこのようなものに関するいくつかの素晴らしい情報を持っています。

于 2010-07-07T18:20:10.000 に答える
0

同じ関数でもコンテキストによってコストが大きく異なる可能性があるため、関数コスト テーブルなどは存在しないと思います。

例(ただし、例として取り上げてください!):

is_dir('/'); //will be very fast
is_dir('/symbolic_link/symbolic_link_on_a_remote_fs/'); //will be way slower

そうは言っても、関数呼び出しのコストを評価することは、最適化への非常に優れたアプローチになる可能性があります。

プロファイラーを使用すると、コード内の特定の関数呼び出しが思ったよりも遅いことに気付くことができます。これらの部分を再考/再作成すると、速度が大幅に向上する可能性があります。

于 2009-07-24T12:32:20.437 に答える
0

register_tick_function と declare(ticks=1) を使用します。これらは PHP4 から存在し、低レベルの命令カウントを提供します。これは、PHP オペコードの解釈および実行中に生成された命令をカウントすることによって達成されると想像するつもりです。

于 2012-01-04T16:39:08.997 に答える
0

PHP では、そのような「命令カウント」はできません。C であっても、libc の実装に依存します。

于 2009-07-24T12:14:06.983 に答える