当前位置:网站首页>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查询耗时
读写文件耗时
业务程序执行耗时
根据程序的执行情况,我们就知晓各个工作单元的执行时间,然后设计优化方案。
如果你觉得不错,给个关注和好评吧~
边栏推荐
- Five super handy phone open-source automation tools, which is suitable for you?
- R语言使用zoo包中的rollapply函数以滚动的方式、窗口移动的方式将指定函数应用于时间序列、计算时间序列的滚动标准差(设置每个窗口不重叠)
- 劝退背后。
- 【一起学Rust 基础篇】Rust基础——变量和数据类型
- pandas连接oracle数据库并拉取表中数据到dataframe中、筛选当前时间(sysdate)到一天之前的所有数据(筛选一天范围数据)
- viewstub 的详细用法_pageinfo用法
- shell编程-测试
- 小身材有大作用——光模块基础知识(一)
- 学习软件测试需要掌握哪些知识点呢?
- Vs Shortcut Keys---Explore Different Programming
猜你喜欢
随机推荐
第3章 搭建短视频App基础架构
The effects of the background and the Activiti
【一起学Rust 基础篇】Rust基础——变量和数据类型
距LiveVideoStackCon 2022 上海站开幕还有3天!
net start mysql 启动报错:发生系统错误5。拒绝访问。
Simple implementation of a high-performance clone of Redis using .NET (1)
MySQL之json数据操作
bash for循环
矩阵的计算[通俗易懂]
性能优化|从ping延时看CPU电源管理
Matlab学习11-图像处理之图像变换
4500 words sum up, a software test engineer need to master the skill books
【倒计时5天】探索音画质量提升背后的秘密,千元大礼等你来拿
R语言ggplot2可视化:使用ggpubr包的ggsummarystats函数可视化箱图(通过ggfunc参数设置)、在可视化图像的下方添加描述性统计结果表格
[深入浅出]三位数排序
PC client automation testing practice based on Sikuli GUI image recognition framework
《数字经济全景白皮书》金融数字用户篇 重磅发布!
基于SSM和Web实现的农作物生长监控系统
常用lambda表达式
JUC(三):锁核心类AQS ing








