分享4个提高足天性能的PHP技巧
4个提高足天性能的PHP技巧
平常,我使用明显的常规PHP函数编写代码来解决响应的问题。但是关于其中的一些问题,我碰到了一些替换解决方案,这些解决方案特殊提高了机能。
引荐:《PHP视频教程》
在本文中,我想介绍一些替换方案。假如您正在寻觅大概减少生产中施行时间的大概性,这将很有用。让我们看看,哪种PHP办法大概会被机能更高的办法所代替,乃至可否存在成本或折衷的问题。
1.删除反复项
您有一个包括反复项的大型数组,并且但愿删除它们,使其仅具有独一值的数组。
常规
array_unique($array);
替换
array_keys(array_flip($array));
展现
我创立了一个数组,其中包括超越400万个元素和300万个反复项。这是最好结果:
办法 | 施行时间处置时间 |
---|---|
array_unique | 787.31毫秒 |
array_keys array_flip | 434.03毫秒 |
替换办法在此测量中快1.8倍(44.87%)。均匀而言,速度提高了约1.5倍(30%)。权衡:这仅适用于简便的一维数组,由于array_flip
用值更换了键。
2.猎取随机数组记载
您有一个很大的数组,想要从中选中一个随机值。
常规
array_rand($array);
替换
$array[mt_rand(0, count($array) - 1)];
展现
我创立了一个包括500万个元素的数组。这是最好结果:
办法 | 施行时间处置时间 |
---|---|
array_rand | 25.99微秒 |
mt_rand | 0.95微秒 |
替换办法是此测量速度快27.3倍(96.33%)。均匀而言,速度提高了约8倍(87%)。这个结果特殊令人惊奇,由于mt_rand
Mersenne Twister随机数生成器的实现也是如此,并且自PHP 7.1起,内部随机化算法已更换为使用完全雷同的算法。
3.测试字母数字字符
您有一个字符串,要测试,假如它仅包括字母数字字符。
常规
preg_match('/^[a-zA-Z0-9]+$/', $string);
替换
ctype_alnum($string);
展现
我创立了一个包括100k以上字母数字和非字母数字字符串的数组。这是最好结果:
办法 | 施行时间处置时间 |
---|---|
preg_match | 15.39毫秒 |
ctype_alnum | 2.06毫秒 |
在此测量中,替换办法快了7.5倍(86.59%)。均匀而言,速度提高了约4倍(76%)。可以将雷同的内容利用于ctype_alpha()
(检查字母字符)和ctype_digit()
(检查数字字符)。
4.更换子字符串
您有一个字符串,想要用另一个子字符串更换它的一部分。
常规
str_replace('a', 'b', $string);
替换
strtr($string, 'a', 'b');
展现
我创立了一个包括500万个随机字符串的数组。这是最好结果:
办法 | 施行时间处置时间 |
---|---|
str_replace | 676.59毫秒 |
strtr | 305.59毫秒 |
另一种办法是2.2倍(54.83%)在该测量更快。均匀而言,速度提高了约2倍(51%)。
其他机能改善
这是我整合到我的编码约定中的一些其他要点,发明它们可以轻微改善机能(假如适用):
- 首选JSON比XML
- 在轮回此前而不是在轮回的每个迭代中声明变量
- 幸免在轮回头中停止函数调取(在每次迭代中均
for ($i=0; $i<count($array); $i)
在count()
get中调取) - 重置内存耗损变量
- 优先选中select语句而不是多个if语句
- 优先于require / include而不是require_once / include_once(确保恰当的操纵码缓存)
最后几句话:我知道有关过早优化的计议。我赞成生产中的机能取决于瓶颈,例如数据库查询,在处置机能时应重点关注。但是我认为,假如有更快的替换办法,例如在正则表达式更易于处置和保护的状况下,为什么不使用它们呢?
最后
我们已经看到,即便使用当前的PHP 7.4(已经比之前的PHP版本快许多),也可以通过其他办法来提高足天性能。假如您想亲自验证本文中供给的数据,我创立了一个包括所有测试的储备库:
devmount / faster-php
测试提高 PHP 足天性能的不一样办法
我使用了Bart van Hoekelen的杰出工具来衡量施行时间。
转载自:Andreas
以上就是分享4个提高足天性能的PHP技巧的具体内容,更多请关注百分百源码网其它相关文章!