当前位置: 首页 > news >正文

PHP高精度计时器与性能基准

PHP高精度计时器与性能基准

性能测试需要高精度计时。PHP的microtime和hrtime可以精确到微秒和纳秒。今天说说PHP中计时和性能基准测试。

microtime的使用。

```php
$start = microtime(true);
usleep(150000);
$end = microtime(true);

echo "耗时: " . round(($end - $start) * 1000, 3) . "ms\n";

// hrtime更高精度(PHP 7.3+)
$start = hrtime(true);
usleep(150000);
$end = hrtime(true);

echo "耗时: " . round(($end - $start) / 1e6, 3) . "ms\n";
?>

性能基准测试工具。

```php
class Benchmark
{
private array $results = [];

public function add(string $name, callable $fn, int $iterations = 1000): void
{
// 预热
$fn();

$start = hrtime(true);
for ($i = 0; $i < $iterations; $i++) {
$fn();
}
$end = hrtime(true);

$totalNs = $end - $start;
$avgNs = $totalNs / $iterations;

$this->results[] = [
'name' => $name,
'iterations' => $iterations,
'total_ms' => round($totalNs / 1e6, 3),
'avg_us' => round($avgNs / 1000, 3),
];
}

public function report(): string
{
$report = "基准测试结果\n" . str_repeat('-', 60) . "\n";
$report .= sprintf("%-25s %-15s %-15s\n", '测试', '总耗时(ms)', '平均(us)');
$report .= str_repeat('-', 60) . "\n";

foreach ($this->results as $r) {
$report .= sprintf("%-25s %-15s %-15s\n", $r['name'], $r['total_ms'], $r['avg_us']);
}

return $report;
}
}

$bench = new Benchmark();

$bench->add('array_push', function () {
$arr = [];
for ($i = 0; $i < 100; $i++) array_push($arr, $i);
}, 1000);

$bench->add('arr[]=', function () {
$arr = [];
for ($i = 0; $i < 100; $i++) $arr[] = $i;
}, 1000);

$bench->add('implode', function () {
implode(',', range(0, 99));
}, 1000);

echo $bench->report();
?>

性能对比测试。

```php
function benchmarkComparison(): void
{
$data = range(1, 10000);
$target = 9999;

// in_array
$start = hrtime(true);
for ($i = 0; $i < 100; $i++) in_array($target, $data);
echo "in_array: " . round((hrtime(true) - $start) / 1e6, 2) . "ms\n";

// array_flip + isset
$flipped = array_flip($data);
$start = hrtime(true);
for ($i = 0; $i < 100; $i++) isset($flipped[$target]);
echo "isset: " . round((hrtime(true) - $start) / 1e6, 2) . "ms\n";
}

benchmarkComparison();
?>

时间单位转换。

```php
function formatDuration(float $seconds): string
{
if ($seconds < 0.001) return round($seconds * 1000000, 2) . 'μs';
if ($seconds < 1) return round($seconds * 1000, 2) . 'ms';
if ($seconds < 60) return round($seconds, 2) . 's';
return floor($seconds / 60) . 'm ' . round($seconds % 60, 2) . 's';
}

echo formatDuration(0.00015) . "\n";
echo formatDuration(0.5) . "\n";
echo formatDuration(125.5) . "\n";
?>

PHP的高精度计时器在性能测试中很重要。microtime精确到微秒,hrtime精确到纳秒。基准测试要预热让OPcache生效,多次测试取平均值。对比测试选择合适的数据结构。

http://www.jsqmd.com/news/973347/

相关文章:

  • 智慧农业AI+DeepSeek的病虫害检测与环境监测一体化智能云平台
  • 别再搞混了!Android布局中margin和padding的实战避坑指南(附ConstraintLayout案例)
  • 用两个HC-05蓝牙模块搭建无线串口,给你的Arduino/STM32项目做个无线调试器
  • 从零到精通:保姆级Illustrator 2024入门教程(附B站宝藏视频清单)
  • 告别环境冲突:用PyCharm 2023.1创建项目时,如何正确选择并配置Python 3.10解释器?
  • 当无人机装上‘动态视觉神经’:事件相机在四旋翼避障与电力线巡检中的实战解析
  • 保姆级教程:新版Dubbo-Admin在Windows 10/11上的完整安装与配置(含Maven打包避坑指南)
  • 别再死记硬背TCP了!从RDT 1.0到3.0,手把手带你理解可靠传输的底层逻辑
  • 模板驱动型文档自动化:告别填空式写作的工程化实践
  • 2026年6月7日当周国内AI编程新发展:从工具革新到生态重构
  • Chrome浏览器里点几下就能自动干活的插件,录个操作就能批量填表、抓数据、跳页面
  • 别再对着空白画布发愁了!用Altium Designer 18快速搞定STM32F103C8T6最小系统原理图(附完整库文件)
  • HC-05蓝牙模块玩转无线PID调参:一个SerialPlot,让你的STM32小车/机械臂调试效率翻倍
  • 用ESP32和ADC做个智能花盆:土壤湿度监测与自动浇水系统(Arduino框架)
  • TMS320F280049 GPIO输入消抖实战:采样窗口配置与按键防抖应用
  • 别再复制粘贴了!手把手教你解析CMSIS-DAP下载算法里的神秘32字节头文件
  • 2026年临沂三体系审核员外审员CCAA众智商学院报名资料试听课班期咨询官网400冯老师 - 众智商学院职业教育
  • 家庭网络拓扑图是怎么画出来的?聊聊IEEE 1905.1协议里的邻居发现与查询机制
  • Parallels Desktop 17 虚拟机网络配置:手把手教你给CentOS 7设置固定IP,告别每次启动IP都变
  • 不止是输入框:用微信小程序input玩转搜索框、验证码和密码强度检测
  • 告别故障码盲猜:手把手教你用OBD诊断仪读取动力总成冻结帧数据(ISO15031 $02服务实战)
  • MATLAB环境下的Kriging代理模型构建工具包,集成LHS采样、多项式趋势项拟合与残差诊断功能
  • Action100M:视频动作识别的大规模数据集与开放词汇技术
  • 别再到处找了!9个遥感目标检测数据集(UCAS-AOD/DOTA/FAIR1M等)的下载、标注格式与实战加载指南
  • MuleSoft+LLM企业级AI编排实战:安全、可治理的智能集成
  • PHP面向对象SOLID原则
  • 光子电路交换技术突破分布式ML通信瓶颈
  • MATLAB处理GeoTIFF踩坑实录:从读取、显示到批量导出,一篇搞定所有地理信息问题
  • 2026年6月市面上口碑好的防腐板批发厂家推荐,阻燃型防腐板/耐候型防腐板/采光板/防腐板,防腐板源头厂家口碑推荐 - 品牌推荐师
  • IHO-3000高安版刷机实录:用TTL绕过限制,免费搞定悦ME系统