我目前正在使用这个函数来对一些 php 脚本进行基准测试,脚本获取执行所需的微时间,并将其写入服务器上的日志中,但我遇到的问题是我不知道什么是合适的时间。下面的脚本是我的一些时间,任何人都可以告诉我我想要在什么样的时间范围内吗?
置于页面开头
global $start_time; $start_time = microtime();
放置在页面末尾
global $start_time;
$ra_start = explode(' ', $start_time);
$ra_end = explode(' ', microtime());
$cpu_time = ($ra_end[1]+$ra_end[0]) - ($ra_start[1]+$ra_start[0]);
$f = fopen('/home/mcbeav/cpu_usage.log', 'a', 1);
// time seconds request by_ip
fwrite($f, date('m-d-Y H:m')."\t".$cpu_time."\t".$_SERVER['SERVER_NAME']."\t".$_SERVER['PHP_SELF']."\t".$_SERVER['REMOTE_ADDR']."\n");
fclose($f);
同一页面的结果
0.10285401344299
0.021783828735352
0.018580913543701
0.042204856872559
这取决于你在做什么。发生了很多事情吗?
这是我很久以前制作的一个基准测试课程。您可以使用静态方法在代码中的任意位置(开始、结束等)制作标记,然后使用另一个静态方法在页面底部打印出报告。还跟踪内存使用情况。这有点混乱,因为它使用静态方法。更好的办法可能是使用 XDebug 分析您的代码:
<?php
// time and memory benchmarking library
class benchmark {
// benchmark marker array
protected static $benchmark_markers = array();
// benchmark total duration
protected static $total_duration = 0;
// prevents new implimentation
protected function __construct() {}
// create new benchmark marker
public static function create_benchmark_marker($marker_name) {
$current_time = self::get_microtime();
// get duration since last marker
$duration = 0;
if (self::$benchmark_markers) {
$last_time = end(self::$benchmark_markers);
$duration = $current_time - $last_time['end_time'];
}
// add to total duration
self::$total_duration += $duration;
// add benchmark marker to static array
self::$benchmark_markers[] = array('name' => $marker_name, 'end_time' => $current_time, 'duration' => $duration, 'memory' => memory_get_usage());
}
// report benchmarking
public static function print_report() {
self::print_report_head();
// output each marker line
foreach (self::$benchmark_markers as $marker_values) {
if ($marker_values['duration']) {
self::print_marker($marker_values, $last_marker_name);
}
$last_marker_name = $marker_values['name'];
}
self::print_report_foot();
}
// get high-precision microtime
protected static function get_microtime() {
return preg_replace('/^0(.+?) (.+?)$/', '$2$1', microtime());
}
protected static function print_report_head() {
echo '<table style="clear: both; border-style: none; border-spacing: 1px; background-color: #ccc; font-family: Arial, Helvetica, sans-serif; font-size: 12px;">
<tr>
<th style="background-color: #ddd;">Benchmark Range</th>
<th style="background-color: #ddd;">Seconds</th>
<th style="background-color: #ddd;">% of Total</th>
<th style="background-color: #ddd;">Memory Usage</th>
</tr>';
}
protected static function print_marker($marker_values, $last_marker_name) {
echo '<tr>
<td style="background-color: #eee;">' . $last_marker_name . ' -> ' . $marker_values['name'] . '</td>
<td style="text-align: right; background-color: #eee;">' . round($marker_values['duration'], 6) . '</td>
<td style="text-align: right; background-color: #eee;">' . round(($marker_values['duration'] / self::$total_duration) * 100, 2) . '%</td>
<td style="text-align: right; background-color: #eee;">' . number_format($marker_values['memory']) . '</td>
</tr>';
}
protected static function print_report_foot() {
echo '<tr>
<td style="background-color: #eee;">Total/Peak</td>
<td style="text-align: right; background-color: #eee;">' . round(self::$total_duration, 6) . '</td>
<td style="text-align: right; background-color: #eee;">100%</td>
<td style="text-align: right; background-color: #eee;">' . number_format(memory_get_peak_usage()) . '</td>
</tr>
</table>';
}
}
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)