欢迎来到天天文库
浏览记录
ID:30427598
大小:84.23 KB
页数:15页
时间:2018-12-29
《php应用程序以查找、诊断和加速运行缓慢的代码》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、PHP应用程序以查找、诊断和加速运行缓慢的代码用Xdebug分析PHP应用程序以查找、诊断和加速运行缓慢的代码2011-06-2114:26From:如果PHP应用程序运行缓慢,可以使用分析器找出应用程序究竟在哪些方面浪费了时间。可以将语句、循环、函数、类或者是运行缓慢的库作为分析目标。如果不是时间而是内存使用出现了问题,那么一个优秀的分析器还可以显示组件的内存占用情况。"为PHP应用提速、提速、再提速!"系列文章的第1部分演示了如何使用XCache(PHP操作码缓存)加速整个站点。XCache(仅是少数几种缓存包中的一种)保留了编译过程的输出,去掉了其他冗余的工作。只要页面没有发生变
2、化,缓存后的页面就能够胜任代理的作用。当页面发生变化时,缓存后的页面就会变为无效并被替换掉。操作码缓存--以及一个操作码优化器,通常由相同的包提供--是一种加快站点响应的低成本技术。很多缓存包是免费的,并且是开源的,无需改变任何代码即可从中受益。当然,在某些应用程序中,相比较实际的执行时间,将PHP源代码文件翻译为其相应的操作码所需的时间微不足道。连接到远程数据库服务器,使用低效的SQL语句进行查询,以及其他大量解析和操作数据的工作都非常的繁琐,也因此增加了开销,甚至产生浪费。良好的网络设计和灵巧的数据库结构可以使时间冗长和查询缓慢的情况有所改善,如果需要的话还可以向友好的专家请求帮助
3、。但是,如果代码运行缓慢,您可能更希望自己处理。但是从何开始呢?正如人们普遍认为的,在代码完成前调试代码的做法很不明智--因为代码的首次实现可能会非常的迅速。当代码正确且能实现相应的功能时,不管其表面上看起来运行缓慢还是实际如此,首先要做的就是对其性能进行测试或基准测试。不执行这样的诊断而尝试去优化代码无疑是在黑暗中摸索。一个简单的性能指标是挂钟时间(wallclocktime),或测量页面请求与完成呈现之间的实际延迟。对于某些情况--比如在您自己的工作站本地运行的Web服务器、数据库和浏览器--挂钟时间能够提供信息。然而,挂钟时间对于其他大多数情况而言并无实际意义,比如网络延迟时间、
4、活动的Web服务器或者活动的数据库。一种更精确的测量--甚至可以测量运行单个源代码语句的时间--可以采用代码分析器。分析器通常被实现为PHP运行时引擎的扩展,记录语句开始和结束的delta、记录程序开始和结束之间的delta并捕获对来到的请求形成响应的总时间。有了这种垂直度,就可以将语句、循环、函数、类或者是运行缓慢的库作为分析目标。如果不是时间而是内存使用出现了问题,那么一个优秀的分析器还可以显示组件的内存占用情况。PHP的一个较流行的分析器是Xdebug,它还为交互地调试PHP应用程序提供了服务器挂钩(hook)。(参见"调试的更好方法"以了解更多信息。该系列的另一部分将探讨高级交
5、互式调试。)Xdebug很容易从源代码构建,将其作为Zend扩展进行安装也非常简单。(现在已有针对某些平台的二进制文件。)当就绪后,对基于PHP页面的每个请求都将生成可在KCacheGrind中查看的数据集。如果具备了PHP实用工具phpize和php-config,而且具有对系统的php.ini配置文件的访问权,那么安装和设置Xdebug只需几分钟的时间。下面给出的指导说明针对Linux,不过在MacOSX上的安装步骤实际上与此类似。(您可以从XdebugWeb站点找到针对MicrosoftWindows的Xdebug预编译版本。)Xdebug的最新版本为V2.0.0RC3(最终版本
6、V2.0.0在您阅读此文时也许已经可用)。下载并解包tarball,然后切换到源代码的子目录。确保phpize和php-config位于shell的PATH,准备使用phpize进行构建。$wgettarxzfxdebug-2.0.0RC3.tgz$cdxdebug-2.0.0RC3/xdebug-2.0.0RC3$phpizeConfiguringfor:PHPApiVersion:20020918ZendModuleApiNo:20020429ZendExtensionApiNo:20050606phpize的产品是一个脚本--名为配置--它对余下的构建过程进行配置。要构建Xdeb
7、ug,在make后紧接着输入./configure即可。$./configurecheckingbuildsystemtype.i686-apple-darwin8.8.1checkinghostsystemtype.i686-apple-darwin8.8.1checkingforegrep.grep-E.$make.Buildcomplete.(Itissafetoignorewarningsabouttempnamandtmpnam).m
此文档下载收益归作者所有