|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
使用PHP编程的最大好处是学习这种编程语言异常轻易以及其丰富的库。即使对需要使用的函数不是十分了解,我们也能够预测出如何完成一个特定的任务。 尽管PHP异常简朴易学,但我们仍旧需要花费一点时间来学习PHP的一些编程技巧,尤其是与性能和内存占用相关的技巧。在PHP中,有许多小技巧能够使我们减少内存的占用,并提高应用程序的性能。在本篇文章中,我们将对PHP应用程序的分析、如何改变脚本代码以及比较优化前后的各种参数值进行简要的介绍。 通过在程序中设置计时的程序,并反复执行这些代码,我们可以获得有关程序执行速度的一组数据,这些数据可以可以用来发现程序中的瓶颈,以及如何进行优化,提高应用程序的性能。 也许读者曾经听说过PEAR库吧。我们将使用PEAR库创建在分析时需要使用的例子,这也是对现有的代码进行分析的最简朴的方式,它使我们无需使用商用产品就能对代码进行分析。 我们要使用的库的名字是PEAR::Benchmark,它对于对代码进行分析和性能测试异常有用。这个库提供一个名字为Benchmark_Timer()的类,能够记录一个函数调用和下一个函数调用之间的时间。在对代码的性能进行测试时,我们可以得到一个具体的脚本执行结果,它异常简朴,如下所示: include_once("Benchmark/Timer.php"); $bench->start(); // 现在处于睡眠状态几分钟 $bench->stop(); // 从计时器中获得分析信息
[1] => Array [2] => Array )
上面的数字好像是一组杂乱无章的数字,但假如程序的规模更大,这些数字就十分地有用了。 也许广大读者也能预测到,数组的第一个表目是实际调用Benchmark_Timer()类的方式,例如 $bench->start()、$bench->setMarker()和$bench->stop(),与这些表目有关的数字是相称简朴的,现在我们来仔细地研究这些数字: [0] => Array ( [name] => Start [time] => 1013214253.05751200 [diff] => - [total] => 0 ) time表目指的是何时对Benchmark_Timer()的start()方式调用的UNIX的timestamp,diff表目表示这次调用和上次调用之间的时间间隔,由于这里没有上一次,因此显示出了一个破折号,total表目指的是自测试开始到这一特定的调用之前代码运行的总的时间。下面我们来看看下一个数组的输出: [1] => Array ( [name] => Start of the script [time] => 1013214253.05761100 [diff] => 9.8943710327148E-05 [total] => 9.8943710327148E-05 ) 从上面的数字我们可以看出,在调用$bench->start()之后,程序运行了9.8943710327148E-05秒(也就是 0.0000989秒)后开始调用$bench->setMarker(....)。 一次真实的性能测试经历 尽管上面的例子不错,但在对于决定如何优化你的站点代码设计方面,它真的不能算是一个好例子。下面我将用我自己作为网站技术人员的一段亲身经历来说明如何解决性能方面存在的问题。 我并不大理解网站使用的代码,因为它是根据特别的需求,历经多年开发而成的━━其中的一个模块包括网站转变代码,另一个模块记录网站的使用情况,其他的模块也各有各的作用。我和网站的主要开发者都意识到网站的代码需要优化,但又不清晰问题出在哪儿。 为了尽快地完成任务,我开始研究网站的主要脚本代码,并在全部脚本代码以及其包含文件中添加了一些 $bench->setMarker()命令,然后分析$bench->getProfiling()的输出,并对得到的结果大吃一惊,原来问题出在一个与获得特定语言名字(例如en代表english)的转变代码的函数调用中,该函数在每个页面上都会被使用数百次。每次调用该函数时,脚本代码都会对一个MySQL数据库进行查询,从一个数据库表中获得真正的语言名字。 于是我们这一类的信息创建了一个缓冲系统。经过短短2天时间的工作,我们使系统的性能得到了很大的提高,第一周内页面的浏览量也因此而增加了40%。当然了,这只是一个有关分析代码能够提高互联网应用或互联网网站性能的例子。 性能测试函数调用 在分析一个脚本或网页(以及其包含文件)时,尽管Benchmark_Timer()特殊有用,但它并不科学,因为要获得分析的数据我们必须多次加载脚本,而且它也不是针对某个类或函数调用的。 PEAR::Benchmark库中的另一个被称作Benchmark_Iterator的类能够很好地解决这一个问题,它能够针对特定的函数或类的方式,显示其分析信息。它的用途是能够能够从测试中获得一致的结果,因为我们知道,假如运行一段脚本一次,其运行时间为10秒,并不意味着它每次的运行时间总是10秒。 In any case, let\\'s see some examples: // 连接数据库的代码 function getCreatedDate($id) >$stmt = "SELECT created_date FROM users WHERE id=$id"; include_once \\'Benchmark/Iterate.php\\'; // 运行getDate函数10次 // 打印分析信息
上面的这些数字很好理解,mean条目表示getCreatedDate()函数10次运行的平均时间。在进行实际测试时,应该至少运行1000次,但这个例子得出的结果已经足够说明问题了。 结束语 希望广大读者能够通过本篇文章把握如何快速地对PHP代码进行分析的基本方式。在这里我还还要提醒广大读者的是,对代码进行分析不是一件简朴的事儿,因为我们必须把握大量的有关该种语言的特性。在代码中添加计时用的代码有助于找出运行速度缓慢的函数,利用多次重复的方式使我们能够发现对代码进行准确优化的方式。 返回类别: 教程 上一教程: 如何在PHP中进行身份认证 下一教程: GD输出汉字的函数的分析 您可以阅读与"PHP应用程序的性能优化"相关的教程: · 使用OOP技术来优化PHP应用程序 · 用定制的PHP应用程序来获取Web服务器的状态信息 · PHP应用程序加速探索之简介 · PHP与已存在的Java应用程序集成 · PHP中通过Web执行C/C++应用程序 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |