phpreboot / stopwatch
Stopwatch 的 PHP 工具库。用于优化和其他目的。
v1.0.2
2016-06-11 10:17 UTC
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- phpunit/phpunit: ~4.8
This package is not auto-updated.
Last update: 2024-09-14 18:20:28 UTC
README
目的
在优化过程中,我们需要检查不同操作所花费的时间。如果我们放置了很多 microtime
代码块,这很快就会变得混乱。
StopWatch 的目的是提供一种记录不同代码块所用时间的整洁方式。
支持的版本
上面的构建已经在 PHP 版本 5.3、5.4、5.5、5.6、7.0 和 HHVM 上进行了测试。详细信息请查看 .travis.yml
文件。
示例
示例文件夹中有示例。以下是几个示例
简单的计时器(文件 example/simplewatch.php)
以下示例展示了 StopWatch 的最简单用法。
<?php /* * This example shows simple use of Stopwatch. For simple use, we need just four steps: * - Create instance of StopWatch, * - Call `start()` method to start the timer, * - Call `stop()` method to stop the watch, and * - Call `getTime()` method to get the time between start and stop. */ // Load Composer auto loader require_once "../vendor/autoload.php"; use Phpreboot\Stopwatch\StopWatch; // Create an instance of StopWatch $stopWatch = new StopWatch(); // Start the watch to start timer, $stopWatch->start(); $iteration = 0; for ($i = 0; $i < 10000; $i++) { for ($j = 0; $j < 10000; $j++) { $iteration++; } } // Stop the watch. $stopWatch->stop(); // By default, it will return time in seconds $time = $stopWatch->getTime(); printf("Time taken for %d iterations was %f seconds.\n", $iteration, $time);
暂停示例(文件 example/pausedemo.php)
此示例展示了在多个时间段内测量时间。我们简单地暂停计时器以停止计时,并在稍后再次启动。此步骤可以重复多次。
<?php /* * The example shows how to pause the timer for measuring time at different stages. * Once watch is started, we can call `pause` method to pause the watch. * If watch is paused, we can start it again to start timer. In that case, time will be added to timer. */ // Load Composer auto loader require_once "../vendor/autoload.php"; use Phpreboot\Stopwatch\StopWatch; // Create an instance of StopWatch $stopWatch = new StopWatch(); $innerIterator = 0; for ($i = 1; $i <= 10; $i++) { printf("Iteration %d starting.\n", $i); $stopWatch->start(); for ($j = 0; $j < 1000; $j++) { $innerIterator++; } $stopWatch->pause(); printf("Iteration %d watch stopped, not other task is starting..\n", $i); for ($k = 0; $k < 1000; $k++) { $timeWaster = $k; } } printf("Time taken by first loop (\$j), for %d iterations was: %f seconds.\n", $innerIterator, $stopWatch->getTime());
多计时器示例(文件 example/multiDemo.php)
在多个时间段内测量时间很有用,但有时我们需要多个独立的计时器。以下示例展示了我们如何拥有多个计时器。
<?php /* * This example shows using multiple stop watches in the same program. * If we want to use multiple watches, we must provide unique name all of them. * Steps involved are: * - Add watches by any of following methods * - Call `addWatch` multiple times, with name of watch as parameter, or * - Call `addWatches` and pass an array of name of watches as parameter. * - Further operation is same as in `simplewatch` and `pauseDemo` example. However this time, we need to pass * watch name to all the methods. */ // Load Composer auto loader require_once "../vendor/autoload.php"; use Phpreboot\Stopwatch\StopWatch; // Create an instance of StopWatch $stopWatch = new StopWatch(); // Initialize the watches. $stopWatch->addWatches(["a", "b", "c"]); // We could also use // $stopWatch->addWatch("a"); // $stopWatch->addWatch("b"); // $stopWatch->addWatch("c"); $operatorA = 0; $operatorB = 0; $operatorC = 0; for ($i = 1; $i <= 10; $i++) { // Following code block represent one operation, which needs to be measured. $stopWatch->start("a"); for ($a = 0; $a < 10000; $a++) { $operatorA++; } $stopWatch->pause("a"); // Following code block represent another operation, which needs to be measured separately. $stopWatch->start("b"); for ($b = 0; $b < 10000; $b++) { $operatorB++; } $stopWatch->pause("b"); // One more operation, independent of above operations needs to be measured. $stopWatch->start("c"); for ($c = 0; $c < 10000; $c++) { $operatorC++; } $stopWatch->pause("c"); } printf("Time taken in block 'a': %f seconds.\n", $stopWatch->getTime("a")); printf("Time taken in block 'b': %f seconds.\n", $stopWatch->getTime("b")); printf("Time taken in block 'c': %f seconds.\n", $stopWatch->getTime("c"));