当前位置:网站首页>php microtime 封装工具类,计算接口运行时间(打断点)
php microtime 封装工具类,计算接口运行时间(打断点)
2022-08-03 12:04:00 【倾听岁月】
引言
当我们开发完自己负责板块的相关业务程序,然后发布到线上后出了问题。然后做问题排查的时候,发现是接口运行超时的问题。所以我们需要通过某个途径去知晓这个接口每个工作环节的执行时间。本文根据我的想法和经验,设计了一个工具类,通过这个工具类,我们可以知晓各个工作环节的运行时间。
php本身有提供一个函数microtime,通过这个函数并配合我们打断点。我们就能知道程序运行时各个地方的耗时。
样例
本样例适用于php-fpm模式或cli模式,如果你采用的swoole-work 请考虑脏数据的问题(swoole-work 常驻内存,多个线程共享内存)
封装microtime,设计一个断点类
Point.php
<?php
namespace App\Components\Util;
class Point
{
//初始时间
public float $startTime;
//StdClass 是 php当中的空类,但不是所有类的基类,相关内容请自行百度
public \StdClass $runTimes;
public function __construct()
{
//初始化当前时间
$this->startTime = microtime(true);
//初始化一个空类
$this->runTimes = new \StdClass;
}
public function addPoint(string $pointName)
{
//统计断点时间
$this->runTimes->{$pointName} = microtime(true);
}
//断点时间计算
public function calculation()
{
//初始化一个空类来统计
$data = new \StdClass;
//断点时间计算
if(!empty($this->runTimes))
{
foreach((array)$this->runTimes as $k=>$v)
{
$data->{$k} = number_format(bcsub($v , $this->startTime,4) * 1000,4) . "毫秒";
}
}
return $data;
}
}
关于断点类的使用
public function index14()
{
$runTime = new Point();
/**
* @var Test3 $test3
*/
$test3 = app()->make(Test3::class);
//断点-1
$runTime->addPoint("test3_run");
$userinfo = $test3->userService->get(867076808);
//断点-2
$runTime->addPoint("user_service_get");
$this->info($userinfo->username);
//断点-3
$runTime->addPoint("print");
//打印断点执行时间
dd($runTime->calculation());
}
输出结果
wsyUMcKjfP
{
+"test3_run": "9.8000毫秒"
+"user_service_get": "27.5000毫秒"
+"print": "27.9000毫秒"
}
一般我们常用于将这个辅助类去检测
restFule接口的耗时
某个类方法的执行耗时
mysql连接耗时
mysql CURD操作耗时
redis连接耗时
redis查询耗时
读写文件耗时
业务程序执行耗时
根据程序的执行情况,我们就知晓各个工作单元的执行时间,然后设计优化方案。
如果你觉得不错,给个关注和好评吧~
边栏推荐
猜你喜欢
随机推荐
-找树根2-
bash while loop and until loop
PC client automation testing practice based on Sikuli GUI image recognition framework
hystrix 服务熔断和服务降级
LeetCode-1796. 字符串中第二大的数字
什么是bin文件?「建议收藏」
肝完Alibaba这份面试通关宝典,我成功拿下今年第15个Offer
从零开始Blazor Server(6)--基于策略的权限验证
【MySQL功法】第4话 · 和kiko一起探索MySQL中的运算符
漫谈缺陷管理的自动化实践方案
LeetCode——1161. 最大层内元素和
矩阵的计算[通俗易懂]
永寿 永寿农特产品-苹果
码率vs.分辨率,哪一个更重要?
html网页如何获取后台数据库的数据(html + ajax + php + mysql)
解决oracle安装在linux中jdk的冲突
899. 有序队列 : 最小表示法模板题
字符串本地化和消息字典(二)
Matlab学习12-图像处理之图像增强
FE主导打造一个运营活动平台








