SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

コードの最適化に役立つPHPスクリプトのベンチマーク

Benchmarkパッケージを使ったベンチマーク出力とグラフ表示

Benchmark_Profilerクラス

 Benchmark_Profilerクラスには、フォーマットされた測定結果を返すメソッド一式があります。このクラスで最もよく使われるメソッドのプロトタイプを次に示します。

  • void enterSection(string $name) ― コードセクションを開始します。$nameパラメータは、コードセクションの名前を示します。
  • void leaveSection(string $name) ― コードセクションを終了します。$nameパラメータは、コードセクションの名前を示します。
  • void display([string $format = 'auto']) ― フォーマットされた実行結果を返します。$formatパラメータは出力するフォーマットを表し、auto(デフォルト)、plain、またはhtmlを指定します。

 フィボナッチ数列を反復または再帰で求める処理にBenchmark_Profilerクラスを適用するコードを紹介します。

反復の場合
<?php
require_once 'Benchmark/Profiler.php';
   
//create an instance of Benchmark_Iterate class
$profiler = new Benchmark_Profiler(TRUE);
   
function fibonacci(){
   global $profiler;
   $a=0;$b=1;
   for ($i = 0; $i < 10; $i++) {    
       //Enters code section
       $profiler->enterSection('fibonacci'.$i);
      
       $s=$a+$b;
       $a=$b;
       $b=$s;
      
       //Leaves code section
       $profiler->leaveSection('fibonacci'.$i);      
   } 
   
   //Returns formatted profiling information
   $profiler->display();
   return;
}
fibonacci();
?>
再帰の場合
<?php
require_once 'Benchmark/Profiler.php';
   
//create an instance of Benchmark_Iterate class
$profiler = new Benchmark_Profiler(TRUE);
   
//this function implements the recursive solution 
//for the fibonacci problem
function fibonacci($n){
   
   if(($n>=0)and($n<2))
   {
      return 1;
   }
   else 
   {
      return fibonacci($n-1)+fibonacci($n-2);
   }
}
   
global $profiler;

for ($i = 0; $i < 10; $i++) {
   
   //Enters code section
   $profiler->enterSection('fibonacci'.$i);
   
   fibonacci($i).'<br />';
   
   //Leaves code section
   $profiler->leaveSection('fibonacci'.$i);
}
   
//Returns formatted profiling information
$profiler->display();
return;
?>

 それぞれの結果は次のとおりです。

反復の結果
Total Ex. TimeCallsPercentageCallers
fibonacci00.000252008438110351N/AGlobal (1)
fibonacci14.6968460083008E-0051N/AGlobal (1)
fibonacci23.814697265625E-0051N/AGlobal (1)
fibonacci35.1021575927734E-0051N/AGlobal (1)
fibonacci45.2928924560547E-0051N/AGlobal (1)
fibonacci55.6028366088867E-0051N/AGlobal (1)
fibonacci63.7908554077148E-0051N/AGlobal (1)
fibonacci74.0054321289063E-0051N/AGlobal (1)
fibonacci83.6954879760742E-0051N/AGlobal (1)
fibonacci90.000293016433715821N/AGlobal (1)
再帰の結果
Total Ex. TimeCallsPercentageCallers
fibonacci00.00013685226440431N/AGlobal (1)
fibonacci10.000316143035888671N/AGlobal (1)
fibonacci28.4877014160156E-0051N/AGlobal (1)
fibonacci37.9870223999023E-0051N/AGlobal (1)
fibonacci40.000118970870971681N/AGlobal (1)
fibonacci50.00012278556823731N/AGlobal (1)
fibonacci60.000164985656738281N/AGlobal (1)
fibonacci70.000385999679565431N/AGlobal (1)
fibonacci80.000369071960449221N/AGlobal (1)
fibonacci90.000570058822631841N/AGlobal (1)

次のページ
ベンチマーク結果をグラフで取得する

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Octavia Andreea Anghel(Octavia Andreea Anghel)

経験豊富なPHP開発者。現在は、国内外のソフトウェア開発コンテストに参加するプログラミングチームの主任トレーナーを務める。国レベルの教育プロジェクト開発のコンサルティングも担当している。共著書に『XML technologies?XML in Java』があり、XML部分の執筆を担当。PHPやXML...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2784 2008/07/31 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー