欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

学习PHP精粹,编写高效PHP代码之性能

程序员文章站 2022-05-27 21:08:42
...
一、采用基准测试,检测代码的性能

基准测试涉及Web应用程序时,通常指“压力测试”,即在你的代码中尽可能多地加载流量,然后衡量它的执行能力。

推荐两种基准测试的工具:ApacheBench(ab)和JMeter。

要进行压力测试,我们需要两个东西:同时在线的用户和大量的请求。使用这些工具后,很多同时运行的应用程序线程便代表了用户。因此我们只需记住:并发线程=并发用户。

1、ApacheBench超级简单,通常包含了Apache安装,或是作为Apache开发包的一部分——一个被称为简单ab的二进制文件。要使用ab,只需指定请求的总数(-n),以及并发线程的数量(-c),然后让它开始工作。

例如:我们在这里使用-n 1000 -c 20生成20个并发线程执行1000个请求。

$ ab -n 1000 -c 20 http://example.org/

ab使用参考:http://httpd.apache.org/docs/2.0/programs/ab.html

2、JMeter是另一个具备GUI的Apache项目,而且具备更多功能。若要使用JMeter,你需要创建一个测试计划,添加线程组、添加采样器、指定JMeter的配置、添加Cookie处理器这样的其他选项、增加监听器处理结果。

JMeter网站:http://jmeter.apache.org/

二、利用缓存提高代码性能

1、对于Apache服务器,利用apc实现代码缓存。

从PECL(PHP Extension Community Library,PHP扩展共享类库)中获取APC进行编译,然后安装该扩展。

$ pecl install apc

在这之后,根据设置,需要编辑php.ini文件并添加它:

extension = apc.so

重新启动Apache,然后就可以了。

apc使用参考:http://www.php.net/manual/en/book.apc.php

2、对于Windows/IIS服务器,利用微软的WinCache实现代码缓存。

WinCache网站:http://www.iis.net/downloads/microsoft/wincache-extension

3、利用memcached实现会话数据缓存,memcached是基于内存的、群集友好的键/值对存储。如果你启用memcached扩展,就可以自动使用memcached代替磁盘存储回话。

memcached网站:http://memcached.org/

memcached使用参考:http://www.php.net/manual/zh/book.memcached.php

安装memcached:

$ pecl install memcache # Install ext/memcache
$ memcached -d -m 128 # Start memcached

设置php.ini:

session.save_handler = 'memcache'
session.save_path = 'tcp://localhost:11211'

三、进行程序概要分析,寻找问题在哪里?

程序概要分析(profiling)是采用精确的时间或内存检测代码运行每个动作的行为。通过分析,找到问题的位置,然后进行优化。

我们有两个常用的profiling工具:

1、由Derick Rethans编写的可靠的Xdebug工具,并由KCachegrind或QCachegrind审核结果。

Xdebug网站:http://xdebug.org/

KCachegrind网站:http://sourceforge.jp/projects/freshmeat_kcachegrind/releases/

QCachegrind网站:http://sourceforge.jp/projects/freshmeat_kcachegrind/releases/

2、新开发的XHProf工具,是来自Facebook的一个应用,由Paul Reinheimer编写XHGui Web前段部分。

XHProf网站:http://pecl.php.net/package/xhprof

XHGui网站:https://github.com/perftools/xhgui

总结:

首先我们要解决性能下降这个最大的难题,这样便可获得整体性能的更好提升。如果一个SQL查询花费10秒,而你将它的执行速度提高了50%,这样你为自己节省了5秒;然而,如果执行一个PHP函数花费5秒,你同样将它的执行速度提高了50%,你实际上却只节省了半秒钟。在某些时候,你将受到硬件性能的绝对限制,以我们的经验你更有可能受到磁盘或网络I/O的限制,而不是CPU或RAM的限制。这时你需要开始在多台计算机上缩放应用程序。

相关标签: PHP