首页 理论教育PHPMVC开发实战:性能调试与优化

PHPMVC开发实战:性能调试与优化

【摘要】:Debug是一个系统静态扩展类,主要用于调试程序的性能,为优化程序运行效率提供依据。例如显示块代码内存占用、块代码执行时间、区间代码性能调用等。假设需要对一个页面进行性能调试,那么首先需要在测试的代码之前加入标记,如以下代码所示。这对标记内的代码性能数据会被记录到$marker数组中。为代码添加了标记后,系统就能够识别调试区域了。

Debug是一个系统静态扩展类,主要用于调试程序的性能,为优化程序运行效率提供依据。例如显示块代码内存占用、块代码执行时间、区间代码性能调用等。此外系统还提供了快捷函数G用于简单地测试代码性能,下面分别介绍。

1.Debug类

Debug类是一系统基类,用于测试代码执行性能。该类公开可调用的静态方法分别有:mark、useTime、useMemory、getMemPeak。其中mark方法为Debug类的核心方法,后面3个方法必须以mark为统计依据才能收集到代码执行性能数据,下面分别介绍。

(1)mark

mark是Debug调试类的核心方法,该方法不参与数据收集,只用于声明调试的开始与结束标记。假设需要对一个页面进行性能调试,那么首先需要在测试的代码之前加入标记,如以下代码所示。

如上述代码所示,由于Debug是一个系统扩展类,所以需要引入扩展。关于扩展的详细使用本书第11章将有详细介绍。在此读者只需要理解即可。mark方法只需传入一个参数即可,该参数是一个可自定义的字符串。例如run与end,表示代码调试从Debug::mark('run')开始,直到Debug::mark('end')结束。这对标记内的代码性能数据会被记录到$marker数组中。

如果要对一个完整的控制器动作代码进行调试,更理想的方法是在前动作和后动作中置入mark标记,这样更有利于代码管理,如以下代码所示。

为代码添加了标记后,系统就能够识别调试区域了。其他的3种方法分别用于获取代码运行时间、代码运行占用内存及代码占用内存的峰值。

(2)useTime

useTime用于收集标记区代码的运行时间,该方法共支持3个参数,表现形式为useTime($start,$end,$decimals=6)。其中start及end参数即为mark方法中对应的开始标记及结束标记;decimals表示时间统计精度。代码如下所示。(www.chuimin.cn)

如果动作中使用了缓存,useTime能够真实地收集到缓存后的运行时间,这对于缓存优化是非常有用的。

(3)useMemory

useMemory方法用于收集区间代码所占用的系统内存。该方法共支持两个参数,表现形式为useMemory($start,$end)。start及end参数分别代码mark方法中对应的开始标记及结束标记。useMemory的实际使用如以下代码所示。

在实际应用开发中,可以根据需要换算useMemory结果值。

(4)getMemPeak

useMemory得到的结果是区间代码最低占用率值与最高占用率值之间的平均值。而getMemPeak方法用于获取区间代码内存占用率的最高值,所以getMemPeak方法更具有参考意义。getMemPeak方法与useMemory方法无论参数还是什么都是一样的,在此就不再重复相关代码演示。需要说明的是,无论是useMemory还是getMemPeak,使用的前提都是Web服务器安装并开启了memory_get_usage函数,否则将获取不到任何数据。

2.G快捷函数

G快捷函数能够简单快捷地获取区间代码性能数据。相比Debug类,G快捷函数不需要引手动引入扩展类,只需要定义开始标记即可,结束标记是可选的。G快捷函数支持3个参数,表现形式为G($start,$end='',$dec=4)。其中start表示需要传入开始标记;end是可选参数,如果为空即表示以当前动作最后一行代码为基准;dec是可选参数,该参数值为数字类型,用于设定统计精度。使用G函数比较简单,如以下代码所示。

相对Debug类而言,G函数收集的信息比较简单,收集结果只有代码运行时间。但大多数情况下,根据代码执行的时间就可以得到代码的运行情况和效率。