<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES--> “为 PHP 应用提速、提速、再提速!” 系列文章的 第 1 部分 演示了如何使用 XCache(PHP 操作码缓存) 加速整个站点。XCache(仅是少数几种缓存包中的一种)保留了编译过程的输出,去掉了其他冗余的工作。只要页面没有发生变化,缓存后的页面就能够胜任代理的作用。当页面发生变化时,缓存后的页面就会变为无效并被替换掉。
操作码缓存 —— 以及一个操作码优化器,通常由相同的包提供 —— 是一种加快站点响应的低成本技术。很多缓存包是免费的,并且是开源的,无需改变任何代码即可从中受益。
当然,在某些应用程序中,相比较实际的执行时间,将 PHP 源代码文件翻译为其相应的操作码所需的时间微不足道。连接到远程数据库服务器,使用低效的 SQL 语句进行查询,以及其他大量解析和操作数据的工作都非常的繁琐,也因此增加了开销,甚至产生浪费。良好的网络设计和灵巧的数据库结构可以使时间冗长和查询缓慢的情况有所改善,如果需要的话还可以向友好的专家请求帮助。但是,如果代码运行缓慢,您可能更希望自己处理。
但是从何开始呢?正如人们普遍认为的,在代码完成前调试代码的做法很不明智 —— 因为代码的首次实现可能会非常的迅速。当代码正确且能实现相应的功能时,不管其表面上看起来运行缓慢还是实际如此,首先要做的就是对其性能进行测试或基准测试。不执行这样的诊断而尝试去优化代码无疑是在黑暗中摸索。
一个简单的性能指标是挂钟时间(wall clock time),或测量页面请求与完成呈现之间的实际延迟。对于某些情况 —— 比如在您自己的工作站本地运行的 Web 服务器、数据库和浏览器 —— 挂钟时间能够提供信息。然而,挂钟时间对于其他大多数情况而言并无实际意义,比如网络延迟时间、活动的 Web 服务器或者活动的数据库。
一种更精确的测量 —— 甚至可以测量运行单个源代码语句的时间 —— 可以采用代码分析器。分析器通常被实现为 PHP 运行时引擎的扩展,记录语句开始和结束的 delta、记录程序开始和结束之间的 delta 并捕获对来到的请求形成响应的总时间。有了这种垂直度,就可以将语句、循环、函数、类或者是运行缓慢的库作为分析目标。如果不是时间而是内存使用出现了问题,那么一个优秀的分析器还可以显示组件的内存占用情况。
PHP 的一个较流行的分析器是 Xdebug,它还为交互地调试 PHP 应用程序提供了服务器挂钩(hook)。(参见“调试的更好方法”以了解更多信息。该系列的另一部分将探讨高级交互式调试。) Xdebug 很容易从源代码构建,将其作为 Zend 扩展进行安装也非常简单。(现在已有针对某些平台的二进制文件。)当就绪后,对基于 PHP 页面的每个请求都将生成可在 KCacheGrind 中查看的数据集。
构建并安装 Xdebug
如果具备了 PHP 实用工具 phpize 和 php-config,而且具有对系统的 php.ini 配置文件的访问权,那么安装和设置 Xdebug 只需几分钟的时间。下面给出的指导说明针对 Linux®,不过在 Mac OS X 上的安装步骤实际上与此类似。(您可以从 Xdebug Web 站点找到针对 Microsoft® Windows® 的 Xdebug 预编译版本。)
Xdebug 的最新版本为 V2.0.0RC3(最终版本 V2.0.0 在您阅读此文时也许已经可用)。下载并解包 tarball,然后切换到源代码的子目录。确保 phpize 和 php-config 位于 shell 的 PATH,准备使用 phpize 进行构建。
清单 1. 设置 Xdebug
$ wget http://www.xdebug.org/files/xdebug-2.0.0RC3.tgz$ tar xzf xdebug-2.0.0RC3.tgz$ cd xdebug-2.0.0RC3/xdebug-2.0.0RC3$ phpizeConfiguring for:PHP Api Version: 20020918Zend Module Api No: 20020429Zend Extension Api No: 20050606
$ ./configurechecking build system type... i686-apple-darwin8.8.1checking host system type... i686-apple-darwin8.8.1checking for egrep... grep -E...$ make...Build complete.(It is safe to ignore warnings about tempnam and tmpnam).
make 命令生成 Xdebug 扩展,xdebug.so。剩下的工作就是使用 sudo make install 进行安装。
$ sudo make installInstalling shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20020429/
注: 如果在终端窗口中运行最后一个命令,请选择并复制最后一步中发出的目录。在下一个步骤中将会用到它。
最后,要使配置数据可视化,必须使用 KCacheGrind 和 GraphViz。包含 K Desktop Environment (KDE)的 Linux 发行版很可能已经含有了 KCacheGrind 和 GraphViz。如果没有包含,适合您所使用的 Linux 的那些版本也不难找到。Debian 用户可以使用 Advanced Packaging Tool (APT) 快速安装 KCacheGrind 和 GraphViz 以及所有包的依赖关系。
清单 3. 安装 KCacheGrind
$ apt-cache search kcachegrindvalgrind-callgrind - call-graph skin for valgrindkcachegrind - visualisation tool for valgrind profiling outputkcachegrind-converters - format converters for KCachegrind profiling visualisation tool$ apt-cache search graphvizgraphviz - rich set of graph drawing toolsgraphviz-dev - graphviz Libs and Headers against which to build applicationsgraphviz-doc - additional documentation for graphvizlibdeps-renderer-dot-perl - DEPS renderer plugin using GraphViz/dot...$ sudo apt-get install kcachegrind graphviz ...
如果没有将 KDE 安装到系统中,KCacheGrind、GraphViz 以及所有必要的内容将占用大约 90 MB 的磁盘空间。
<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES--> “为 PHP 应用提速、提速、再提速!” 系列文章的 第 1 部分 演示了如何使用 XCache(PHP 操作码缓存) 加速整个站点。XCache(仅是少数几种缓存包中的一种)保留了编译过程的输出,去掉了其他冗余的工作。只要页面没有发生变化,缓存后的页面就能够胜任代理的作用。当页面发生变化时,缓存后的页面就会变为无效并被替换掉。
操作码缓存 —— 以及一个操作码优化器,通常由相同的包提供 —— 是一种加快站点响应的低成本技术。很多缓存包是免费的,并且是开源的,无需改变任何代码即可从中受益。
当然,在某些应用程序中,相比较实际的执行时间,将 PHP 源代码文件翻译为其相应的操作码所需的时间微不足道。连接到远程数据库服务器,使用低效的 SQL 语句进行查询,以及其他大量解析和操作数据的工作都非常的繁琐,也因此增加了开销,甚至产生浪费。良好的网络设计和灵巧的数据库结构可以使时间冗长和查询缓慢的情况有所改善,如果需要的话还可以向友好的专家请求帮助。但是,如果代码运行缓慢,您可能更希望自己处理。
但是从何开始呢?正如人们普遍认为的,在代码完成前调试代码的做法很不明智 —— 因为代码的首次实现可能会非常的迅速。当代码正确且能实现相应的功能时,不管其表面上看起来运行缓慢还是实际如此,首先要做的就是对其性能进行测试或基准测试。不执行这样的诊断而尝试去优化代码无疑是在黑暗中摸索。
一个简单的性能指标是挂钟时间(wall clock time),或测量页面请求与完成呈现之间的实际延迟。对于某些情况 —— 比如在您自己的工作站本地运行的 Web 服务器、数据库和浏览器 —— 挂钟时间能够提供信息。然而,挂钟时间对于其他大多数情况而言并无实际意义,比如网络延迟时间、活动的 Web 服务器或者活动的数据库。
一种更精确的测量 —— 甚至可以测量运行单个源代码语句的时间 —— 可以采用代码分析器。分析器通常被实现为 PHP 运行时引擎的扩展,记录语句开始和结束的 delta、记录程序开始和结束之间的 delta 并捕获对来到的请求形成响应的总时间。有了这种垂直度,就可以将语句、循环、函数、类或者是运行缓慢的库作为分析目标。如果不是时间而是内存使用出现了问题,那么一个优秀的分析器还可以显示组件的内存占用情况。
PHP 的一个较流行的分析器是 Xdebug,它还为交互地调试 PHP 应用程序提供了服务器挂钩(hook)。(参见“调试的更好方法”以了解更多信息。该系列的另一部分将探讨高级交互式调试。) Xdebug 很容易从源代码构建,将其作为 Zend 扩展进行安装也非常简单。(现在已有针对某些平台的二进制文件。)当就绪后,对基于 PHP 页面的每个请求都将生成可在 KCacheGrind 中查看的数据集。
构建并安装 Xdebug
如果具备了 PHP 实用工具 phpize 和 php-config,而且具有对系统的 php.ini 配置文件的访问权,那么安装和设置 Xdebug 只需几分钟的时间。下面给出的指导说明针对 Linux®,不过在 Mac OS X 上的安装步骤实际上与此类似。(您可以从 Xdebug Web 站点找到针对 Microsoft® Windows® 的 Xdebug 预编译版本。)
Xdebug 的最新版本为 V2.0.0RC3(最终版本 V2.0.0 在您阅读此文时也许已经可用)。下载并解包 tarball,然后切换到源代码的子目录。确保 phpize 和 php-config 位于 shell 的 PATH,准备使用 phpize 进行构建。
清单 1. 设置 Xdebug
$ wget http://www.xdebug.org/files/xdebug-2.0.0RC3.tgz$ tar xzf xdebug-2.0.0RC3.tgz$ cd xdebug-2.0.0RC3/xdebug-2.0.0RC3$ phpizeConfiguring for:PHP Api Version: 20020918Zend Module Api No: 20020429Zend Extension Api No: 20050606
$ ./configurechecking build system type... i686-apple-darwin8.8.1checking host system type... i686-apple-darwin8.8.1checking for egrep... grep -E...$ make...Build complete.(It is safe to ignore warnings about tempnam and tmpnam).
make 命令生成 Xdebug 扩展,xdebug.so。剩下的工作就是使用 sudo make install 进行安装。
$ sudo make installInstalling shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20020429/
注: 如果在终端窗口中运行最后一个命令,请选择并复制最后一步中发出的目录。在下一个步骤中将会用到它。
最后,要使配置数据可视化,必须使用 KCacheGrind 和 GraphViz。包含 K Desktop Environment (KDE)的 Linux 发行版很可能已经含有了 KCacheGrind 和 GraphViz。如果没有包含,适合您所使用的 Linux 的那些版本也不难找到。Debian 用户可以使用 Advanced Packaging Tool (APT) 快速安装 KCacheGrind 和 GraphViz 以及所有包的依赖关系。
清单 3. 安装 KCacheGrind
$ apt-cache search kcachegrindvalgrind-callgrind - call-graph skin for valgrindkcachegrind - visualisation tool for valgrind profiling outputkcachegrind-converters - format converters for KCachegrind profiling visualisation tool$ apt-cache search graphvizgraphviz - rich set of graph drawing toolsgraphviz-dev - graphviz Libs and Headers against which to build applicationsgraphviz-doc - additional documentation for graphvizlibdeps-renderer-dot-perl - DEPS renderer plugin using GraphViz/dot...$ sudo apt-get install kcachegrind graphviz ...
如果没有将 KDE 安装到系统中,KCacheGrind、GraphViz 以及所有必要的内容将占用大约 90 MB 的磁盘空间。
<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES--> “为 PHP 应用提速、提速、再提速!” 系列文章的 第 1 部分 演示了如何使用 XCache(PHP 操作码缓存) 加速整个站点。XCache(仅是少数几种缓存包中的一种)保留了编译过程的输出,去掉了其他冗余的工作。只要页面没有发生变化,缓存后的页面就能够胜任代理的作用。当页面发生变化时,缓存后的页面就会变为无效并被替换掉。
操作码缓存 —— 以及一个操作码优化器,通常由相同的包提供 —— 是一种加快站点响应的低成本技术。很多缓存包是免费的,并且是开源的,无需改变任何代码即可从中受益。
当然,在某些应用程序中,相比较实际的执行时间,将 PHP 源代码文件翻译为其相应的操作码所需的时间微不足道。连接到远程数据库服务器,使用低效的 SQL 语句进行查询,以及其他大量解析和操作数据的工作都非常的繁琐,也因此增加了开销,甚至产生浪费。良好的网络设计和灵巧的数据库结构可以使时间冗长和查询缓慢的情况有所改善,如果需要的话还可以向友好的专家请求帮助。但是,如果代码运行缓慢,您可能更希望自己处理。
但是从何开始呢?正如人们普遍认为的,在代码完成前调试代码的做法很不明智 —— 因为代码的首次实现可能会非常的迅速。当代码正确且能实现相应的功能时,不管其表面上看起来运行缓慢还是实际如此,首先要做的就是对其性能进行测试或基准测试。不执行这样的诊断而尝试去优化代码无疑是在黑暗中摸索。
一个简单的性能指标是挂钟时间(wall clock time),或测量页面请求与完成呈现之间的实际延迟。对于某些情况 —— 比如在您自己的工作站本地运行的 Web 服务器、数据库和浏览器 —— 挂钟时间能够提供信息。然而,挂钟时间对于其他大多数情况而言并无实际意义,比如网络延迟时间、活动的 Web 服务器或者活动的数据库。
一种更精确的测量 —— 甚至可以测量运行单个源代码语句的时间 —— 可以采用代码分析器。分析器通常被实现为 PHP 运行时引擎的扩展,记录语句开始和结束的 delta、记录程序开始和结束之间的 delta 并捕获对来到的请求形成响应的总时间。有了这种垂直度,就可以将语句、循环、函数、类或者是运行缓慢的库作为分析目标。如果不是时间而是内存使用出现了问题,那么一个优秀的分析器还可以显示组件的内存占用情况。
PHP 的一个较流行的分析器是 Xdebug,它还为交互地调试 PHP 应用程序提供了服务器挂钩(hook)。(参见“调试的更好方法”以了解更多信息。该系列的另一部分将探讨高级交互式调试。) Xdebug 很容易从源代码构建,将其作为 Zend 扩展进行安装也非常简单。(现在已有针对某些平台的二进制文件。)当就绪后,对基于 PHP 页面的每个请求都将生成可在 KCacheGrind 中查看的数据集。
构建并安装 Xdebug
如果具备了 PHP 实用工具 phpize 和 php-config,而且具有对系统的 php.ini 配置文件的访问权,那么安装和设置 Xdebug 只需几分钟的时间。下面给出的指导说明针对 Linux®,不过在 Mac OS X 上的安装步骤实际上与此类似。(您可以从 Xdebug Web 站点找到针对 Microsoft® Windows® 的 Xdebug 预编译版本。)
Xdebug 的最新版本为 V2.0.0RC3(最终版本 V2.0.0 在您阅读此文时也许已经可用)。下载并解包 tarball,然后切换到源代码的子目录。确保 phpize 和 php-config 位于 shell 的 PATH,准备使用 phpize 进行构建。
清单 1. 设置 Xdebug
$ wget http://www.xdebug.org/files/xdebug-2.0.0RC3.tgz$ tar xzf xdebug-2.0.0RC3.tgz$ cd xdebug-2.0.0RC3/xdebug-2.0.0RC3$ phpizeConfiguring for:PHP Api Version: 20020918Zend Module Api No: 20020429Zend Extension Api No: 20050606
$ ./configurechecking build system type... i686-apple-darwin8.8.1checking host system type... i686-apple-darwin8.8.1checking for egrep... grep -E...$ make...Build complete.(It is safe to ignore warnings about tempnam and tmpnam).
make 命令生成 Xdebug 扩展,xdebug.so。剩下的工作就是使用 sudo make install 进行安装。
$ sudo make installInstalling shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20020429/
注: 如果在终端窗口中运行最后一个命令,请选择并复制最后一步中发出的目录。在下一个步骤中将会用到它。
最后,要使配置数据可视化,必须使用 KCacheGrind 和 GraphViz。包含 K Desktop Environment (KDE)的 Linux 发行版很可能已经含有了 KCacheGrind 和 GraphViz。如果没有包含,适合您所使用的 Linux 的那些版本也不难找到。Debian 用户可以使用 Advanced Packaging Tool (APT) 快速安装 KCacheGrind 和 GraphViz 以及所有包的依赖关系。
清单 3. 安装 KCacheGrind
$ apt-cache search kcachegrindvalgrind-callgrind - call-graph skin for valgrindkcachegrind - visualisation tool for valgrind profiling outputkcachegrind-converters - format converters for KCachegrind profiling visualisation tool$ apt-cache search graphvizgraphviz - rich set of graph drawing toolsgraphviz-dev - graphviz Libs and Headers against which to build applicationsgraphviz-doc - additional documentation for graphvizlibdeps-renderer-dot-perl - DEPS renderer plugin using GraphViz/dot...$ sudo apt-get install kcachegrind graphviz ...
如果没有将 KDE 安装到系统中,KCacheGrind、GraphViz 以及所有必要的内容将占用大约 90 MB 的磁盘空间。
<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES--> “为 PHP 应用提速、提速、再提速!” 系列文章的 第 1 部分 演示了如何使用 XCache(PHP 操作码缓存) 加速整个站点。XCache(仅是少数几种缓存包中的一种)保留了编译过程的输出,去掉了其他冗余的工作。只要页面没有发生变化,缓存后的页面就能够胜任代理的作用。当页面发生变化时,缓存后的页面就会变为无效并被替换掉。
操作码缓存 —— 以及一个操作码优化器,通常由相同的包提供 —— 是一种加快站点响应的低成本技术。很多缓存包是免费的,并且是开源的,无需改变任何代码即可从中受益。
当然,在某些应用程序中,相比较实际的执行时间,将 PHP 源代码文件翻译为其相应的操作码所需的时间微不足道。连接到远程数据库服务器,使用低效的 SQL 语句进行查询,以及其他大量解析和操作数据的工作都非常的繁琐,也因此增加了开销,甚至产生浪费。良好的网络设计和灵巧的数据库结构可以使时间冗长和查询缓慢的情况有所改善,如果需要的话还可以向友好的专家请求帮助。但是,如果代码运行缓慢,您可能更希望自己处理。
但是从何开始呢?正如人们普遍认为的,在代码完成前调试代码的做法很不明智 —— 因为代码的首次实现可能会非常的迅速。当代码正确且能实现相应的功能时,不管其表面上看起来运行缓慢还是实际如此,首先要做的就是对其性能进行测试或基准测试。不执行这样的诊断而尝试去优化代码无疑是在黑暗中摸索。
一个简单的性能指标是挂钟时间(wall clock time),或测量页面请求与完成呈现之间的实际延迟。对于某些情况 —— 比如在您自己的工作站本地运行的 Web 服务器、数据库和浏览器 —— 挂钟时间能够提供信息。然而,挂钟时间对于其他大多数情况而言并无实际意义,比如网络延迟时间、活动的 Web 服务器或者活动的数据库。
一种更精确的测量 —— 甚至可以测量运行单个源代码语句的时间 —— 可以采用代码分析器。分析器通常被实现为 PHP 运行时引擎的扩展,记录语句开始和结束的 delta、记录程序开始和结束之间的 delta 并捕获对来到的请求形成响应的总时间。有了这种垂直度,就可以将语句、循环、函数、类或者是运行缓慢的库作为分析目标。如果不是时间而是内存使用出现了问题,那么一个优秀的分析器还可以显示组件的内存占用情况。
PHP 的一个较流行的分析器是 Xdebug,它还为交互地调试 PHP 应用程序提供了服务器挂钩(hook)。(参见“调试的更好方法”以了解更多信息。该系列的另一部分将探讨高级交互式调试。) Xdebug 很容易从源代码构建,将其作为 Zend 扩展进行安装也非常简单。(现在已有针对某些平台的二进制文件。)当就绪后,对基于 PHP 页面的每个请求都将生成可在 KCacheGrind 中查看的数据集。
构建并安装 Xdebug
如果具备了 PHP 实用工具 phpize 和 php-config,而且具有对系统的 php.ini 配置文件的访问权,那么安装和设置 Xdebug 只需几分钟的时间。下面给出的指导说明针对 Linux®,不过在 Mac OS X 上的安装步骤实际上与此类似。(您可以从 Xdebug Web 站点找到针对 Microsoft® Windows® 的 Xdebug 预编译版本。)
Xdebug 的最新版本为 V2.0.0RC3(最终版本 V2.0.0 在您阅读此文时也许已经可用)。下载并解包 tarball,然后切换到源代码的子目录。确保 phpize 和 php-config 位于 shell 的 PATH,准备使用 phpize 进行构建。
清单 1. 设置 Xdebug
$ wget http://www.xdebug.org/files/xdebug-2.0.0RC3.tgz$ tar xzf xdebug-2.0.0RC3.tgz$ cd xdebug-2.0.0RC3/xdebug-2.0.0RC3$ phpizeConfiguring for:PHP Api Version: 20020918Zend Module Api No: 20020429Zend Extension Api No: 20050606
$ ./configurechecking build system type... i686-apple-darwin8.8.1checking host system type... i686-apple-darwin8.8.1checking for egrep... grep -E...$ make...Build complete.(It is safe to ignore warnings about tempnam and tmpnam).
make 命令生成 Xdebug 扩展,xdebug.so。剩下的工作就是使用 sudo make install 进行安装。
$ sudo make installInstalling shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20020429/
注: 如果在终端窗口中运行最后一个命令,请选择并复制最后一步中发出的目录。在下一个步骤中将会用到它。
最后,要使配置数据可视化,必须使用 KCacheGrind 和 GraphViz。包含 K Desktop Environment (KDE)的 Linux 发行版很可能已经含有了 KCacheGrind 和 GraphViz。如果没有包含,适合您所使用的 Linux 的那些版本也不难找到。Debian 用户可以使用 Advanced Packaging Tool (APT) 快速安装 KCacheGrind 和 GraphViz 以及所有包的依赖关系。
清单 3. 安装 KCacheGrind
$ apt-cache search kcachegrindvalgrind-callgrind - call-graph skin for valgrindkcachegrind - visualisation tool for valgrind profiling outputkcachegrind-converters - format converters for KCachegrind profiling visualisation tool$ apt-cache search graphvizgraphviz - rich set of graph drawing toolsgraphviz-dev - graphviz Libs and Headers against which to build applicationsgraphviz-doc - additional documentation for graphvizlibdeps-renderer-dot-perl - DEPS renderer plugin using GraphViz/dot...$ sudo apt-get install kcachegrind graphviz ...
如果没有将 KDE 安装到系统中,KCacheGrind、GraphViz 以及所有必要的内容将占用大约 90 MB 的磁盘空间。
要学习关于 PHP 的更多内容,请访问 IBM developerWorks 的 PHP 项目资源中心。
要收听针对软件开发人员的有趣访谈和讨论,请查看 developerWorks podcasts。
随时关注 developerWorks 的 技术活动和网络广播。
查看最近将在全球范围举办的面向 IBM 开放源码开发人员的研讨会、商业展览、网络广播和其他 活动。
访问 developerWorks Open source 专区 以获得大量的 how-to 信息、工具和项目更新,帮助您使用开源技术进行开发并与 IBM 产品结合使用。
访问 Safari Books Online 获得开源技术的大量参考资料。
获得产品和技术
下载 Xdebug 软件。
使用 IBM 试用软件 改进您的下一个开源开发项目,这些软件可下载或从 DVD 获得。
讨论
通过参与 developerWorks blog 加入 developerWorks 社区。
参与 developerWorks PHP Developer 论坛。
关于作者
Martin Streicher 是 Linux Magazine 的主编。他从普度大学获得了计算机科学硕士学位,从 1982 年开始用 Pascal、C、Perl、Java 和(最近)Ruby 编程语言编写类 UNIX 的系统。
From: http://www.ibm.com/developerworks/cn/opensource/os-php-fastapps2/index.html
REQUEST['n']
Martin Streicher (mstreicher@linux-mag.com), 主编, Linux Magazine
<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES--> “为 PHP 应用提速、提速、再提速!” 系列文章的 第 1 部分 演示了如何使用 XCache(PHP 操作码缓存) 加速整个站点。XCache(仅是少数几种缓存包中的一种)保留了编译过程的输出,去掉了其他冗余的工作。只要页面没有发生变化,缓存后的页面就能够胜任代理的作用。当页面发生变化时,缓存后的页面就会变为无效并被替换掉。
操作码缓存 —— 以及一个操作码优化器,通常由相同的包提供 —— 是一种加快站点响应的低成本技术。很多缓存包是免费的,并且是开源的,无需改变任何代码即可从中受益。
当然,在某些应用程序中,相比较实际的执行时间,将 PHP 源代码文件翻译为其相应的操作码所需的时间微不足道。连接到远程数据库服务器,使用低效的 SQL 语句进行查询,以及其他大量解析和操作数据的工作都非常的繁琐,也因此增加了开销,甚至产生浪费。良好的网络设计和灵巧的数据库结构可以使时间冗长和查询缓慢的情况有所改善,如果需要的话还可以向友好的专家请求帮助。但是,如果代码运行缓慢,您可能更希望自己处理。
但是从何开始呢?正如人们普遍认为的,在代码完成前调试代码的做法很不明智 —— 因为代码的首次实现可能会非常的迅速。当代码正确且能实现相应的功能时,不管其表面上看起来运行缓慢还是实际如此,首先要做的就是对其性能进行测试或基准测试。不执行这样的诊断而尝试去优化代码无疑是在黑暗中摸索。
一个简单的性能指标是挂钟时间(wall clock time),或测量页面请求与完成呈现之间的实际延迟。对于某些情况 —— 比如在您自己的工作站本地运行的 Web 服务器、数据库和浏览器 —— 挂钟时间能够提供信息。然而,挂钟时间对于其他大多数情况而言并无实际意义,比如网络延迟时间、活动的 Web 服务器或者活动的数据库。
一种更精确的测量 —— 甚至可以测量运行单个源代码语句的时间 —— 可以采用代码分析器。分析器通常被实现为 PHP 运行时引擎的扩展,记录语句开始和结束的 delta、记录程序开始和结束之间的 delta 并捕获对来到的请求形成响应的总时间。有了这种垂直度,就可以将语句、循环、函数、类或者是运行缓慢的库作为分析目标。如果不是时间而是内存使用出现了问题,那么一个优秀的分析器还可以显示组件的内存占用情况。
PHP 的一个较流行的分析器是 Xdebug,它还为交互地调试 PHP 应用程序提供了服务器挂钩(hook)。(参见“调试的更好方法”以了解更多信息。该系列的另一部分将探讨高级交互式调试。) Xdebug 很容易从源代码构建,将其作为 Zend 扩展进行安装也非常简单。(现在已有针对某些平台的二进制文件。)当就绪后,对基于 PHP 页面的每个请求都将生成可在 KCacheGrind 中查看的数据集。
构建并安装 Xdebug
如果具备了 PHP 实用工具 phpize 和 php-config,而且具有对系统的 php.ini 配置文件的访问权,那么安装和设置 Xdebug 只需几分钟的时间。下面给出的指导说明针对 Linux®,不过在 Mac OS X 上的安装步骤实际上与此类似。(您可以从 Xdebug Web 站点找到针对 Microsoft® Windows® 的 Xdebug 预编译版本。)
Xdebug 的最新版本为 V2.0.0RC3(最终版本 V2.0.0 在您阅读此文时也许已经可用)。下载并解包 tarball,然后切换到源代码的子目录。确保 phpize 和 php-config 位于 shell 的 PATH,准备使用 phpize 进行构建。
清单 1. 设置 Xdebug
$ wget http://www.xdebug.org/files/xdebug-2.0.0RC3.tgz$ tar xzf xdebug-2.0.0RC3.tgz$ cd xdebug-2.0.0RC3/xdebug-2.0.0RC3$ phpizeConfiguring for:PHP Api Version: 20020918Zend Module Api No: 20020429Zend Extension Api No: 20050606
$ ./configurechecking build system type... i686-apple-darwin8.8.1checking host system type... i686-apple-darwin8.8.1checking for egrep... grep -E...$ make...Build complete.(It is safe to ignore warnings about tempnam and tmpnam).
make 命令生成 Xdebug 扩展,xdebug.so。剩下的工作就是使用 sudo make install 进行安装。
$ sudo make installInstalling shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20020429/
注: 如果在终端窗口中运行最后一个命令,请选择并复制最后一步中发出的目录。在下一个步骤中将会用到它。
最后,要使配置数据可视化,必须使用 KCacheGrind 和 GraphViz。包含 K Desktop Environment (KDE)的 Linux 发行版很可能已经含有了 KCacheGrind 和 GraphViz。如果没有包含,适合您所使用的 Linux 的那些版本也不难找到。Debian 用户可以使用 Advanced Packaging Tool (APT) 快速安装 KCacheGrind 和 GraphViz 以及所有包的依赖关系。
清单 3. 安装 KCacheGrind
$ apt-cache search kcachegrindvalgrind-callgrind - call-graph skin for valgrindkcachegrind - visualisation tool for valgrind profiling outputkcachegrind-converters - format converters for KCachegrind profiling visualisation tool$ apt-cache search graphvizgraphviz - rich set of graph drawing toolsgraphviz-dev - graphviz Libs and Headers against which to build applicationsgraphviz-doc - additional documentation for graphvizlibdeps-renderer-dot-perl - DEPS renderer plugin using GraphViz/dot...$ sudo apt-get install kcachegrind graphviz ...
如果没有将 KDE 安装到系统中,KCacheGrind、GraphViz 以及所有必要的内容将占用大约 90 MB 的磁盘空间。
<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES--> “为 PHP 应用提速、提速、再提速!” 系列文章的 第 1 部分 演示了如何使用 XCache(PHP 操作码缓存) 加速整个站点。XCache(仅是少数几种缓存包中的一种)保留了编译过程的输出,去掉了其他冗余的工作。只要页面没有发生变化,缓存后的页面就能够胜任代理的作用。当页面发生变化时,缓存后的页面就会变为无效并被替换掉。
操作码缓存 —— 以及一个操作码优化器,通常由相同的包提供 —— 是一种加快站点响应的低成本技术。很多缓存包是免费的,并且是开源的,无需改变任何代码即可从中受益。
当然,在某些应用程序中,相比较实际的执行时间,将 PHP 源代码文件翻译为其相应的操作码所需的时间微不足道。连接到远程数据库服务器,使用低效的 SQL 语句进行查询,以及其他大量解析和操作数据的工作都非常的繁琐,也因此增加了开销,甚至产生浪费。良好的网络设计和灵巧的数据库结构可以使时间冗长和查询缓慢的情况有所改善,如果需要的话还可以向友好的专家请求帮助。但是,如果代码运行缓慢,您可能更希望自己处理。
但是从何开始呢?正如人们普遍认为的,在代码完成前调试代码的做法很不明智 —— 因为代码的首次实现可能会非常的迅速。当代码正确且能实现相应的功能时,不管其表面上看起来运行缓慢还是实际如此,首先要做的就是对其性能进行测试或基准测试。不执行这样的诊断而尝试去优化代码无疑是在黑暗中摸索。
一个简单的性能指标是挂钟时间(wall clock time),或测量页面请求与完成呈现之间的实际延迟。对于某些情况 —— 比如在您自己的工作站本地运行的 Web 服务器、数据库和浏览器 —— 挂钟时间能够提供信息。然而,挂钟时间对于其他大多数情况而言并无实际意义,比如网络延迟时间、活动的 Web 服务器或者活动的数据库。
一种更精确的测量 —— 甚至可以测量运行单个源代码语句的时间 —— 可以采用代码分析器。分析器通常被实现为 PHP 运行时引擎的扩展,记录语句开始和结束的 delta、记录程序开始和结束之间的 delta 并捕获对来到的请求形成响应的总时间。有了这种垂直度,就可以将语句、循环、函数、类或者是运行缓慢的库作为分析目标。如果不是时间而是内存使用出现了问题,那么一个优秀的分析器还可以显示组件的内存占用情况。
PHP 的一个较流行的分析器是 Xdebug,它还为交互地调试 PHP 应用程序提供了服务器挂钩(hook)。(参见“调试的更好方法”以了解更多信息。该系列的另一部分将探讨高级交互式调试。) Xdebug 很容易从源代码构建,将其作为 Zend 扩展进行安装也非常简单。(现在已有针对某些平台的二进制文件。)当就绪后,对基于 PHP 页面的每个请求都将生成可在 KCacheGrind 中查看的数据集。
构建并安装 Xdebug
如果具备了 PHP 实用工具 phpize 和 php-config,而且具有对系统的 php.ini 配置文件的访问权,那么安装和设置 Xdebug 只需几分钟的时间。下面给出的指导说明针对 Linux®,不过在 Mac OS X 上的安装步骤实际上与此类似。(您可以从 Xdebug Web 站点找到针对 Microsoft® Windows® 的 Xdebug 预编译版本。)
Xdebug 的最新版本为 V2.0.0RC3(最终版本 V2.0.0 在您阅读此文时也许已经可用)。下载并解包 tarball,然后切换到源代码的子目录。确保 phpize 和 php-config 位于 shell 的 PATH,准备使用 phpize 进行构建。
清单 1. 设置 Xdebug
$ wget http://www.xdebug.org/files/xdebug-2.0.0RC3.tgz$ tar xzf xdebug-2.0.0RC3.tgz$ cd xdebug-2.0.0RC3/xdebug-2.0.0RC3$ phpizeConfiguring for:PHP Api Version: 20020918Zend Module Api No: 20020429Zend Extension Api No: 20050606
$ ./configurechecking build system type... i686-apple-darwin8.8.1checking host system type... i686-apple-darwin8.8.1checking for egrep... grep -E...$ make...Build complete.(It is safe to ignore warnings about tempnam and tmpnam).
make 命令生成 Xdebug 扩展,xdebug.so。剩下的工作就是使用 sudo make install 进行安装。
$ sudo make installInstalling shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20020429/
注: 如果在终端窗口中运行最后一个命令,请选择并复制最后一步中发出的目录。在下一个步骤中将会用到它。
最后,要使配置数据可视化,必须使用 KCacheGrind 和 GraphViz。包含 K Desktop Environment (KDE)的 Linux 发行版很可能已经含有了 KCacheGrind 和 GraphViz。如果没有包含,适合您所使用的 Linux 的那些版本也不难找到。Debian 用户可以使用 Advanced Packaging Tool (APT) 快速安装 KCacheGrind 和 GraphViz 以及所有包的依赖关系。
清单 3. 安装 KCacheGrind
$ apt-cache search kcachegrindvalgrind-callgrind - call-graph skin for valgrindkcachegrind - visualisation tool for valgrind profiling outputkcachegrind-converters - format converters for KCachegrind profiling visualisation tool$ apt-cache search graphvizgraphviz - rich set of graph drawing toolsgraphviz-dev - graphviz Libs and Headers against which to build applicationsgraphviz-doc - additional documentation for graphvizlibdeps-renderer-dot-perl - DEPS renderer plugin using GraphViz/dot...$ sudo apt-get install kcachegrind graphviz ...
如果没有将 KDE 安装到系统中,KCacheGrind、GraphViz 以及所有必要的内容将占用大约 90 MB 的磁盘空间。
<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES--> “为 PHP 应用提速、提速、再提速!” 系列文章的 第 1 部分 演示了如何使用 XCache(PHP 操作码缓存) 加速整个站点。XCache(仅是少数几种缓存包中的一种)保留了编译过程的输出,去掉了其他冗余的工作。只要页面没有发生变化,缓存后的页面就能够胜任代理的作用。当页面发生变化时,缓存后的页面就会变为无效并被替换掉。
操作码缓存 —— 以及一个操作码优化器,通常由相同的包提供 —— 是一种加快站点响应的低成本技术。很多缓存包是免费的,并且是开源的,无需改变任何代码即可从中受益。
当然,在某些应用程序中,相比较实际的执行时间,将 PHP 源代码文件翻译为其相应的操作码所需的时间微不足道。连接到远程数据库服务器,使用低效的 SQL 语句进行查询,以及其他大量解析和操作数据的工作都非常的繁琐,也因此增加了开销,甚至产生浪费。良好的网络设计和灵巧的数据库结构可以使时间冗长和查询缓慢的情况有所改善,如果需要的话还可以向友好的专家请求帮助。但是,如果代码运行缓慢,您可能更希望自己处理。
但是从何开始呢?正如人们普遍认为的,在代码完成前调试代码的做法很不明智 —— 因为代码的首次实现可能会非常的迅速。当代码正确且能实现相应的功能时,不管其表面上看起来运行缓慢还是实际如此,首先要做的就是对其性能进行测试或基准测试。不执行这样的诊断而尝试去优化代码无疑是在黑暗中摸索。
一个简单的性能指标是挂钟时间(wall clock time),或测量页面请求与完成呈现之间的实际延迟。对于某些情况 —— 比如在您自己的工作站本地运行的 Web 服务器、数据库和浏览器 —— 挂钟时间能够提供信息。然而,挂钟时间对于其他大多数情况而言并无实际意义,比如网络延迟时间、活动的 Web 服务器或者活动的数据库。
一种更精确的测量 —— 甚至可以测量运行单个源代码语句的时间 —— 可以采用代码分析器。分析器通常被实现为 PHP 运行时引擎的扩展,记录语句开始和结束的 delta、记录程序开始和结束之间的 delta 并捕获对来到的请求形成响应的总时间。有了这种垂直度,就可以将语句、循环、函数、类或者是运行缓慢的库作为分析目标。如果不是时间而是内存使用出现了问题,那么一个优秀的分析器还可以显示组件的内存占用情况。
PHP 的一个较流行的分析器是 Xdebug,它还为交互地调试 PHP 应用程序提供了服务器挂钩(hook)。(参见“调试的更好方法”以了解更多信息。该系列的另一部分将探讨高级交互式调试。) Xdebug 很容易从源代码构建,将其作为 Zend 扩展进行安装也非常简单。(现在已有针对某些平台的二进制文件。)当就绪后,对基于 PHP 页面的每个请求都将生成可在 KCacheGrind 中查看的数据集。
构建并安装 Xdebug
如果具备了 PHP 实用工具 phpize 和 php-config,而且具有对系统的 php.ini 配置文件的访问权,那么安装和设置 Xdebug 只需几分钟的时间。下面给出的指导说明针对 Linux®,不过在 Mac OS X 上的安装步骤实际上与此类似。(您可以从 Xdebug Web 站点找到针对 Microsoft® Windows® 的 Xdebug 预编译版本。)
Xdebug 的最新版本为 V2.0.0RC3(最终版本 V2.0.0 在您阅读此文时也许已经可用)。下载并解包 tarball,然后切换到源代码的子目录。确保 phpize 和 php-config 位于 shell 的 PATH,准备使用 phpize 进行构建。
清单 1. 设置 Xdebug
$ wget http://www.xdebug.org/files/xdebug-2.0.0RC3.tgz$ tar xzf xdebug-2.0.0RC3.tgz$ cd xdebug-2.0.0RC3/xdebug-2.0.0RC3$ phpizeConfiguring for:PHP Api Version: 20020918Zend Module Api No: 20020429Zend Extension Api No: 20050606
$ ./configurechecking build system type... i686-apple-darwin8.8.1checking host system type... i686-apple-darwin8.8.1checking for egrep... grep -E...$ make...Build complete.(It is safe to ignore warnings about tempnam and tmpnam).
make 命令生成 Xdebug 扩展,xdebug.so。剩下的工作就是使用 sudo make install 进行安装。
$ sudo make installInstalling shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20020429/
注: 如果在终端窗口中运行最后一个命令,请选择并复制最后一步中发出的目录。在下一个步骤中将会用到它。
最后,要使配置数据可视化,必须使用 KCacheGrind 和 GraphViz。包含 K Desktop Environment (KDE)的 Linux 发行版很可能已经含有了 KCacheGrind 和 GraphViz。如果没有包含,适合您所使用的 Linux 的那些版本也不难找到。Debian 用户可以使用 Advanced Packaging Tool (APT) 快速安装 KCacheGrind 和 GraphViz 以及所有包的依赖关系。
清单 3. 安装 KCacheGrind
$ apt-cache search kcachegrindvalgrind-callgrind - call-graph skin for valgrindkcachegrind - visualisation tool for valgrind profiling outputkcachegrind-converters - format converters for KCachegrind profiling visualisation tool$ apt-cache search graphvizgraphviz - rich set of graph drawing toolsgraphviz-dev - graphviz Libs and Headers against which to build applicationsgraphviz-doc - additional documentation for graphvizlibdeps-renderer-dot-perl - DEPS renderer plugin using GraphViz/dot...$ sudo apt-get install kcachegrind graphviz ...
如果没有将 KDE 安装到系统中,KCacheGrind、GraphViz 以及所有必要的内容将占用大约 90 MB 的磁盘空间。