PHP实现记录代码运行时间封装类实例教程


Posted in Javascript onMay 08, 2017

前言

本文介绍的是利用php记录代码运行时间测量的相关内容,分享给大家供大家参考学习。一般在要求性能的代码中, 会加入测试代码进行计算。不过每次都要写microtime, end ? start 未必太麻烦了, 所以简单的写了一个类去搞,下面来看看详细的介绍:

示例代码

class TimeCost
{

 private $cost = array();
 private $record = array();
 private $scale = 6;
 public function __construct($scale = 6)
 {
 $this->cost = array();
 $this->record = array();
 $this->scale = $scale;
 }

 public function __toString()
 {
 return $this->getString();
 }

 /**
 * start to cal time.
 *
 * @param mixed $key
 */
 public function addCost($key)
 {
 $this->cost[$key] = microtime(true);
 }

 /**
 * stop to cal time.
 *
 * @param mixed $key
 */
 public function closeCost($key)
 {
 $cost = bcsub(microtime(true), $this->cost[$key], $this->scale);

 if (in_array($key, array_keys($this->record))) {
  $this->record[$key] = bcadd($cost, $this->record[$key], $this->scale);
 } else {
  $this->record[$key] = $cost;
 }
 return $cost;
 }

 
 public function getString($key = null)
 {
 if ($key) {
  return "{$key}[{$this->record[$key]}]";
 }

 $str = '';
 foreach ($this->record as $k => $v) {
  $str .= "{$k}[{$v}]";
 }
 return $str;
 }
}

用法

$obj = new TimeCost();
$token = 'test_a';
$obj->addCost($token);
some_code();

$obj->closeCost($token);
$reslut = $obj->getString($token);

说明

1、时间精度: 默认是保留了6位, 已经足够了, 想要更高精度, 可以在new对象的时候指定$scale参数

2、token: token是为了表示某段代码, 对应的结果会以key(token), value的形式写入到record数组中。

所以用一个token多次进行addCost和closeClost的结果会进行累积。

3、getString: 传递token则返回token对应的结果, 默认会将record中的所有结果拼接返回。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Three.js源码阅读笔记(基础的核心Core对象)
Dec 27 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
Dec 31 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
Jun 03 Javascript
可以浮动某个物体的jquery控件用法实例
Jul 24 Javascript
jQuery实现连续动画效果实例分析
Oct 09 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
Aug 15 Javascript
原生js实现网易轮播图效果
Apr 10 Javascript
Angular学习笔记之angular的$filter服务浅析
Nov 12 Javascript
Vue数据驱动模拟实现5
Jan 13 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
Mar 27 jQuery
vue组件父与子通信详解(一)
Nov 07 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
Jan 13 Javascript
jquery平滑滚动到顶部插件使用详解
May 08 #jQuery
H5上传本地图片并预览功能
May 08 #Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
May 08 #jQuery
vue2.0实现导航菜单切换效果
May 08 #Javascript
jquery replace方法去空格
May 08 #jQuery
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
May 08 #jQuery
html5+canvas实现支持触屏的签名插件教程
May 08 #Javascript
You might like
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
jquery 插件学习(四)
2012/08/06 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
vue路由组件按需加载的几种方法小结
2018/07/12 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
2020/09/11 Javascript
[04:00]DOTA2解说界神雕侠侣 CJ第四天谷子现场过生日
2013/07/30 DOTA
Python multiprocessing模块中的Pipe管道使用实例
2015/04/11 Python
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
python读取几个G的csv文件方法
2019/01/07 Python
我用Python抓取了7000 多本电子书案例详解
2019/03/25 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
css3实现文字首尾衔接跑马灯的示例代码
2020/10/16 HTML / CSS
普师专业个人自荐信范文
2013/11/26 职场文书
文艺演出策划方案
2014/06/07 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
2015年元旦促销方案书
2014/12/09 职场文书
信仰观后感
2015/06/03 职场文书
消防演习感想
2015/08/10 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书
使用feign服务调用添加Header参数
2021/06/23 Java/Android