[TOC]
* * * * *
## 1 调试源代码(thinkphp\library\think\Debug.php)
~~~
protected static $info = [];
protected static $mem = [];
~~~
~~~
public static function remark($name, $value = '')
{
// 记录时间和内存使用
self::$info[$name] = is_float($value) ? $value : microtime(true);
if ('time' != $value) {
self::$mem['mem'][$name] = is_float($value) ? $value : memory_get_usage();
self::$mem['peak'][$name] = memory_get_peak_usage();
}
}
~~~
~~~
public static function getRangeTime($start, $end, $dec = 6)
{
if (!isset(self::$info[$end])) {
self::$info[$end] = microtime(true);
}
return number_format((self::$info[$end] - self::$info[$start]), $dec);
}
~~~
~~~
public static function getUseTime($dec = 6)
{
return number_format((microtime(true) - START_TIME), $dec);
}
~~~
~~~
public static function getThroughputRate()
{
return number_format(1 / self::getUseTime(), 2) . 'req/s';
}
~~~
~~~
public static function getRangeMem($start, $end, $dec = 2)
{
if (!isset(self::$mem['mem'][$end])) {
self::$mem['mem'][$end] = memory_get_usage();
}
$size = self::$mem['mem'][$end] - self::$mem['mem'][$start];
$a = ['B', 'KB', 'MB', 'GB', 'TB'];
$pos = 0;
while ($size >= 1024) {
$size /= 1024;
$pos++;
}
return round($size, $dec) . " " . $a[$pos];
}
~~~
~~~
public static function getUseMem($dec = 2)
{
$size = memory_get_usage() - START_MEM;
$a = ['B', 'KB', 'MB', 'GB', 'TB'];
$pos = 0;
while ($size >= 1024) {
$size /= 1024;
$pos++;
}
return round($size, $dec) . " " . $a[$pos];
}
~~~
~~~
public static function getMemPeak($start, $end, $dec = 2)
{
if (!isset(self::$mem['peak'][$end])) {
self::$mem['peak'][$end] = memory_get_peak_usage();
}
$size = self::$mem['peak'][$end] - self::$mem['peak'][$start];
$a = ['B', 'KB', 'MB', 'GB', 'TB'];
$pos = 0;
while ($size >= 1024) {
$size /= 1024;
$pos++;
}
return round($size, $dec) . " " . $a[$pos];
}
~~~
~~~
public static function getFile($detail = false)
{
if ($detail) {
$files = get_included_files();
$info = [];
foreach ($files as $key => $file) {
$info[] = $file . ' ( ' . number_format(filesize($file) / 1024, 2) . ' KB )';
}
return $info;
}
return count(get_included_files());
}
~~~
~~~
public static function dump($var, $echo = true, $label = null)
{
$label = (null === $label) ? '' : rtrim($label) . ':';
ob_start();
var_dump($var);
$output = ob_get_clean();
$output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output);
if (IS_CLI) {
$output = PHP_EOL . $label . $output . PHP_EOL;
} else {
if (!extension_loaded('xdebug')) {
$output = htmlspecialchars($output, ENT_QUOTES);
}
$output = '<pre>' . $label . $output . '</pre>';
}
if ($echo) {
echo ($output);
return null;
} else {
return $output;
}
}
~~~
## 2 文件分析
1 静态变量
`$info:` 开始标签和结束标签之间的时间间隔信息
`$mem:`开始标签和结束标签之间的内存消耗信息
2 `public static function remark($name, $value = ''){}`
记录时间间隔和内存使用情况
3 `public static function getRangeTime($start, $end, $dec = 6){}`
统计某个区间的时间间隔
> $start:统计开始标签
> $end:统计结束标签
> $dec:小数位
4 `public static function getUseTime($dec = 6){}`
统计从开始(START_TIME)到当前的时间
> $dec:小数位
5 `public static function getThroughputRate(){}`
从开始到当前时间的吞吐率情况
6 `public static function getRangeMem($start, $end, $dec = 2){}`
统计某个区间的内存使用情况
> $start:统计开始标签
> $end:统计结束标签
> $dec:小数位
7 `public static function getUseMem($dec = 2)`
统计从开始到当前时间的内存使用情况
> $dec:小数位
8 `public static function getMemPeak($start, $end, $dec = 2){}`
统计某个区间的内存峰值情况
> $start:统计开始标签
> $end:统计结束标签
> $dec:小数位
9 `public static function getFile($detail = false){}`
获取文件加载信息
> $detail 是否包含详细信息
10 `public static function dump($var, $echo = true, $label = null){}`
浏览器友好变量输出
> $var 输出数据信息
> $echo 返回还是输出
> $label 标签控制
## 3 使用方法
> >1 快捷操作
helper.php辅助函数中的G()封装了调试接口,分析见另:(helper.php)辅助函数
dump() 函数调用Debug::dump(),实现了浏览器友好变量输出
>>2 全局变量
base.php文件定义了系统开始时间和内存使用情况
START_TIME 开始运行时间
START_MEM 开始内存消耗
## 4 总结
Debug.php文件在开发调试中用来统计性能。
包括时间消耗,内存消耗。
还有环境友好变量输出
- 更新记录
- 概述
- 文件索引
- 函数索引
- 章节格式
- 框架流程
- 前:章节说明
- 主:(index.php)入口
- 主:(start.php)框架引导
- 主:(App.php)应用启动
- 主:(App.php)应用调度
- C:(Controller.php)应用控制器
- M:(Model.php)数据模型
- V:(View.php)视图对象
- 附:(App.php)应用启动
- 附:(base.php)全局变量
- 附:(common.php)模式配置
- 附:(convention.php)全局配置
- 附:(Loader.php)自动加载器
- 附:(Build.php)自动生成
- 附:(Hook.php)监听回调
- 附:(Route.php)全局路由
- 附:(Response.php)数据输出
- 附:(Log.php)日志记录
- 附:(Exception.php)异常处理
- 框架工具
- 另:(helper.php)辅助函数
- 另:(Cache.php)数据缓存
- 另:(Cookie.php)cookie操作
- 另:(Console.php)控制台
- 另:(Debug.php)开发调试
- 另:(Error.php)错误处理
- 另:(Url.php)Url操作文件
- 另:(Loader.php)加载器实例化
- 另:(Input.php)数据输入
- 另:(Lang.php)语言包管理
- 另:(ORM.php)ORM基类
- 另:(Process.php)进程管理
- 另:(Session.php)session操作
- 另:(Template.php)模板解析
- 框架驱动
- D:(\config)配置解析
- D:(\controller)控制器扩展
- D:(\model)模型扩展
- D:(\db)数据库驱动
- D:(\view)模板解析
- D:(\template)模板标签库
- D:(\session)session驱动
- D:(\cache)缓存驱动
- D:(\console)控制台
- D:(\process)进程扩展
- T:(\traits)Trait目录
- D:(\exception)异常实现
- D:(\log)日志驱动
- 使用范例
- 服务器与框架的安装
- 控制器操作
- 数据模型操作
- 视图渲染控制
- MVC开发初探
- 模块开发
- 入口文件定义全局变量
- 运行模式开发
- 框架配置
- 自动生成应用
- 事件与插件注册
- 路由规则注册
- 输出控制
- 多种应用组织
- 综合应用
- tp框架整合后台auto架构快速开发
- 基础原理
- php默认全局变量
- php的魔术方法
- php命名空间
- php的自动加载
- php的composer
- php的反射
- php的trait机制
- php设计模式
- php的系统时区
- php的异常错误
- php的输出控制
- php的正则表达式
- php的闭包函数
- php的会话控制
- php的接口
- php的PDO
- php的字符串操作
- php的curl
- 框架心得
- 心:整体结构
- 心:配置详解
- 心:加载器详解
- 心:输入输出详解
- 心:url路由详解
- 心:模板详解
- 心:模型详解
- 心:日志详解
- 心:缓存详解
- 心:控制台详解
- 框架更新
- 4.20(验证类,助手函数)
- 4.27(新模型Model功能)
- 5.4(新数据库驱动)
- 7.28(自动加载)