質問
私は、PHP と Python (および、含める必要がある他の言語) の正確なランタイム比較を取得しようとしています。スクリプト内のタイミングは私の問題ではありませんが、スクリプト内のタイミングは、スクリプトの実行リクエストが行われた瞬間から出力までのすべてを考慮しているわけではありません。
1) 実際にそのようなことを考慮する価値はあるのでしょうか?
2) 考慮する価値があると仮定すると、どうすればよいでしょうか?
私は Mac を使用しているので、Linux コマンドにアクセスでき、役立つコマンドをコンパイル/作成することを恐れていません。ただ、そのようなコマンドの書き方がわかりません。
解決
言語を比較することが目的である場合、その言語以外のものは比較目的には関係ないと思います。
それでも、time コマンドを使用してすべてを測定し、スクリプト内のタイミングと比較することができます。
このような:
$ time script.php
HI!
real 0m3.218s
user 0m0.080s
sys 0m0.064s
クロック時間、ユーザー時間 (php インタープリター)、sys 時間 (OS 時間) が表示されます。
Web について考えている場合、Web サーバーのオーバーヘッドが混在することになるため、非常に難しくなります。また、たとえば WSGI と mod_php を使用している場合には、比較するのが必ずしも簡単ではありません。次に、チェーンの Web サービング部分にもプローブをフックする必要があります。
他のヒント
コードを最適化する場合は、速度を考慮する価値があります。通常、コードを最適化する理由を理解しておく必要があります (次のように)。既存のコードベースの特定のタスクに時間がかかりすぎています。「PHP は Python より遅いと聞いた」ということではありません。その ない 実際に言語を切り替える予定がない場合は、速度を考慮する価値があります。1 つの小さなモジュールが何かをわずかに高速に実行するからといって、アプリを別の言語で書き直すことが良いアイデアであることを意味するわけではありません。言語を選択するには速度以外にも多くの要素があります。
もちろん、ベンチマークを行います。2 つのコードベースを複数回実行し、タイミングを比較します。使用できます 時間 両方のスクリプトがシェルから実行可能である場合、または各言語のそれぞれのベンチマーク機能を使用する場合はコマンド。後者の場合は、当然ながら実際の言語に大きく依存します。
「time」コマンドを使用すると、次のことが役に立ちます。
you@yourmachine:~$ time echo "hello world"
hello world
real 0m0.000s
user 0m0.000s
sys 0m0.000s
you@yourmachine:~$
そして、これは環境の外でタイミングを回避することになります。
実際にその余分な作業の時間を計る必要があるかどうかについては...それは完全にあなたが何をしているかによって決まります。これはある種のWebアプリケーション用だと思うので、使用するフレームワークが実際にどのように機能するかによって異なります...スクリプトの何らかのコンパイル (または解析) バージョンをキャッシュしますか?そうであれば、起動時間はまったく無関係になります (起動時間が存在するのは最初のヒットだけであるため)。
また、最初の実行を割引できるように、テストを必ずループで実行してください (必要に応じて、最初の実行のコストをレポートに含めます)。Java でいくつかのテストを実行しましたが、JIT がその仕事をしているため、最初の実行は常に最も遅くなります (そして、同じ種類のヒットが PHP、Python、および試した他の言語でも存在する可能性があります)。