В настоящее время я использую эту функцию для сравнения некоторых сценариев 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('mdY 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>'; } } ?>
Хотя я не уверен, что правильно ответил на вопрос, все начинается с 0.0, все в порядке. Итак, вы должны смотреть, как аскетит работает на 0,1 больше
просто чтобы реорганизовать ваш код немного, чтобы сделать его менее древним.
//at the beginning $start_time = microtime(1); /at the end $cpu_time = microtime(1) - $start_time; $data = date('mdY H:m')."\t".$cpu_time."\t".$_SERVER['SERVER_NAME']."\t".$_SERVER['PHP_SELF']."\t".$_SERVER['REMOTE_ADDR']."\n"); file_put_contents('/home/mcbeav/cpu_usage.log',$data,FILE_APPEND);
Вы можете использовать microtime(TRUE);
и получить целое число назад, в эти дни. Нет необходимости в взрыве () и добавлении.
Что касается вашего времени, вы должны смотреть на довольно низкое время выполнения для сценария, подобного этому (при условии, что это все, что на самом деле делает скрипт). Однако выполнение может занять некоторое время в зависимости от нагрузки ввода-вывода в системе. Судя по данному сценарию и времени выполнения, я предполагаю, что система, в которую вы пытаетесь сделать это, может делать справедливую бит работы ввода-вывода, и вы не можете сделать это, чтобы улучшить ее из своего скрипта PHP ,
Я не уверен, прав ли я, но мне кажется, что вы в принципе не знаете, есть ли у вас проблемы с производительностью или нет, правильно? Если так – вы этого не сделаете. Не нужно тратить время на создание бессмысленных контрольных показателей. Сосредоточьтесь на реальном коде. Вернитесь к профилированию, когда приложение начинает чувствовать себя медленным.