-
- /**
- * class EfficiencyTester
- * 効率テスター、関数の実行時間をテストします
- * @version 1.0 2013.04.13
- * @author Kross
- */
- class EfficiencyTester {
- /**
- * var $testTimes
- * テスト数
- */
- private $testTimes = 1000;
- /**
- * function getTime()
- * 時間モードに従ってタイムスタンプを取得します
- * @param $timeModel 時間モード、デフォルト: マイクロ秒
- * @return int timestamp
- */
- private function getTime($timeModel = 'MS') {
- if ($timeModel == 'MS') {
- return microtime();
- } else if ($timeModel == 'S') {
- return time();
- } else {
- return microtime();
- }
- }
- /**
- * function testOnce()
- * ターゲット関数を 1 回テストし、実行時間を返します
- * @param $functionName ターゲット関数名
- * @param $timeModel 時間モード、デフォルト: マイクロ秒
- * @return double ターゲット関数の時間1 回実行 (非常にランダム)
- */
- public function testOnce($functionName, $timeModel = 'MS') {
- $startMicroTime = $this->getTime($timeModel );
- $functionName();
- $endMicroTime = $this->getTime($timeModel);
- $costMicroTime = $endMicroTime - $startMicroTime;
- return $costMicroTime;
- }
- /**
- * function test()
- * ターゲット関数を複数回テストし、実行時間(平均値)を返します
- * @param $functionName ターゲット関数名
- * @param $timeModel 時間モード、デフォルト: マイクロ秒
- * @return double Target機能実行時間
- */
- public function test($functionName, $timeModel = 'MS') {
- $totalMicroTimes = 0;
- for ($i = 1; $i testTimes; $i++) {
- $totalMicroTimes += $this->testOnce($functionName);
- }
- return $totalMicroTimes / $this->testTimes;
- }
- }
- ?>
复制發
测试代:
-
- require_once('../class/EfficiencyTester.class.php');
- $e = new EfficiencyTester();
- echo $e->test('rand');
- ?>
-
复制コード
最初はmicrotime()を直接使用して取得時間、その後検討して結果想获を取得する単位は秒の実行時間、これを写就不够多态了、その後就写了一个getTime() の関数は、さまざまな単位の時間を取得します。
この現象と同様の関数の実行時間が長くなったのは、getTime() 関数の判断が時間の一部を占めていたためである可能性があります。
|