php 生成动态键值 数组_你的PHP项目遇到性能问题了吗?看完这篇性能分析恍然大悟...

你的项目中遇到性能问题了吗?遇到性能问题你是如何解决的呢?你的解决方式是否正确呢?下面就跟大家一起分享php项目的性能问题。

a9a4a7a4bc6cc503c5bd596adf58b968.png

PHP语言级性能分析

php在什么情况下会遇到性能问题呢?

在讨论性能问题时,我们要明白,整个项目的性能问题不仅仅包含php这一块,比如还有数据库服务、缓存服务、文件系统等,因此php性能问题在整个项目中只占一部分,在优化系统性能时要搞清楚是在优化系统整体性能还是在优化PHP单方面的性能。

首先,PHP是一门编程语言,我们知道每一门编程语言都有自己的优势及擅长的领域,所以使用php做了它不擅长的事情会很大概率遇到性能问题。再者,编码者在开发时PHP语法使用不恰当,导致php运行慢。最后,就是我们无法预估的问题,没有明确解决思路的性能问题。今天我们主要介绍PHP语言级的性能问题。

1、PHP性能检测的工具:ab

ab(apache benchmark)是由apache提供的压力测试工具,安装Apache时会自动安装此插件。

使用ab工具:

ab -n1000 -c100 https://www.test.com

-n表示请求数,后面跟数字,总共发起的请求数

-c表示并发数,后面跟数字,同一时刻的请求数

url最后跟要检测的目标地址

我们对百度进行一个检测,注意:对别的网站进行ab测试时,-n和-c后面的数字小点,不然会对目标网站造成一定的压力,然后人家发现你就把你给kill了:

53c69619ea9074db9cf83cee3258eb85.png

ab压测结果

ab7e0a49a5e0ca0bd43cf9c03f48ce1b.png

ab压测结果

这里我们只关注两个数据:

(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错误抑制符@,虽然很方便,但是最好别用
  • 减少在循环体内做大量运算
  • 使用带引号字符串做键值

好了,今天的分享就到这里了,如果喜欢我的内容,欢迎转发,留言~~

谢谢~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值