前言:
当前大家对“php 性能测试”大约比较着重,同学们都需要学习一些“php 性能测试”的相关文章。那么小编同时在网上收集了一些有关“php 性能测试””的相关内容,希望你们能喜欢,大家快快来学习一下吧!你的项目中遇到性能问题了吗?遇到性能问题你是如何解决的呢?你的解决方式是否正确呢?下面就跟大家一起分享php项目的性能问题。
php在什么情况下会遇到性能问题呢?
在讨论性能问题时,我们要明白,整个项目的性能问题不仅仅包含php这一块,比如还有数据库服务、缓存服务、文件系统等,因此php性能问题在整个项目中只占一部分,在优化系统性能时要搞清楚是在优化系统整体性能还是在优化PHP单方面的性能。
首先,PHP是一门编程语言,我们知道每一门编程语言都有自己的优势及擅长的领域,所以使用php做了它不擅长的事情会很大概率遇到性能问题。再者,编码者在开发时PHP语法使用不恰当,导致php运行慢。最后,就是我们无法预估的问题,没有明确解决思路的性能问题。今天我们主要介绍PHP语言级的性能问题。
1、PHP性能检测的工具:ab
ab(apache benchmark)是由apache提供的压力测试工具,安装Apache时会自动安装此插件。
使用ab工具:
ab -n1000 -c100
-n表示请求数,后面跟数字,总共发起的请求数
-c表示并发数,后面跟数字,同一时刻的请求数
url最后跟要检测的目标地址
我们对百度进行一个检测,注意:对别的网站进行ab测试时,-n和-c后面的数字小点,不然会对目标网站造成一定的压力,然后人家发现你就把你给kill了:
这里我们只关注两个数据:
(1)、Requests per second:每秒可处理的请求数,越大越好 。
(2)、Time per request:每个请求处理耗时数,越小越好。
这样我们在每次进行过性能优化后可以通过前后这两项数据的对比确定优化有没有效果。
2、PHP语言级性能优化
(1)、多使用PHP自身携带的功能处理逻辑
如:有一个10000个用户信息的二维数组$userInfoList,要把它转为一维数组,且以uid为键名,username为键值,看多很多人写的代码都是通过foreach循环来实现,实际上这个是可以用PHP自带的数组函数来搞定的:
一般代码:
<?php$userMap = array();foreach ($userInfoList as $val) { $userMap[$val['uid']] = $val['username'];}var_dump($userMap);
php数组函数:
<?php$userMap = array_column($userInfoList, 'username', 'uid');var_dump($userMap);
这个函数就能实现这种功能,代码简单又容易理解,运行速度还比自己包装的快。
函数参数:array_column($array, $column, [$index_key]);
(2)、php内置函数的也存在快与慢的差异
比如:查找一个index是否存在于数组$array的key中,大家都能想到使用array_key_exists($index, $array),当然有的同学也想到了使用isset($array[$index])这个函数。看下面代码:
<?php$array = rang(2000, 10000)$start = time();for ($i = 0; $i < 20000; $i ++) { isset($array[$i]); //测完这个注释掉,打开下面测 //array_key_exists($i, $array); //每项要多测几次,用平均值做比较}$end = time();$time = $end - $start;echo $time;
没错,这两个函数都能实现相同的功能,然而在经过测算后发现,isset()函数的速度要快于array_key_exists()函数。所以大家平时使用内置函数时,要思考一下什么时候该使用哪个同类型的函数。
建议phper们多了解些内置函数的实现思路及函数计算的时间复杂度,大概知道了运算的时间复杂度的量级,那么在使用的时候就能够选择合适的函数。
(3)、总结几个比较常见的注意点
减少PHP魔法函数的使用,也叫魔术方法最好禁用掉PHP错误抑制符@,虽然很方便,但是最好别用减少在循环体内做大量运算使用带引号字符串做键值
好了,今天的分享就到这里了,如果喜欢我的内容,欢迎转发,留言~~
谢谢~~
标签: #php 性能测试 #php xend简单分析 #php系统检测 #php分析相同内容