php提高脚本性能的4个技巧


Posted in PHP onAugust 18, 2020

通常,我使用明显的常规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的出色工具来衡量执行时间。

以上就是php提高脚本性能的4个技巧的详细内容,更多关于php提高脚本性能的资料请关注三水点靠木其它相关文章!

PHP 相关文章推荐
第1次亲密接触PHP5(2)
Oct 09 PHP
基于mysql的论坛(4)
Oct 09 PHP
让PHP支持页面回退的两种方法
Jan 10 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
Jun 03 PHP
Laravel框架路由配置总结、设置技巧大全
Sep 03 PHP
php实现压缩多个CSS与JS文件的方法
Nov 11 PHP
Docker 如何布置PHP开发环境
Jun 21 PHP
PHP中文字符串截断无乱码解决方法
Oct 10 PHP
浅谈PHP的反射机制
Dec 15 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
Aug 25 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
Sep 29 PHP
Laravel相关的一些故障解决
Aug 19 PHP
php判断IP地址是否在多个IP段内
Aug 18 #PHP
PHP 8新特性简介
Aug 18 #PHP
PHP大文件及断点续传下载实现代码
Aug 18 #PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
Aug 17 #PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
Aug 17 #PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
Aug 17 #PHP
PHP unset函数原理及使用方法解析
Aug 14 #PHP
You might like
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
php实现的Timer页面运行时间监测类
2014/09/24 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
javascript实现的动态文字变换
2007/07/28 Javascript
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
js禁止页面复制功能禁用页面右键菜单示例代码
2013/08/29 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
浅析Bootstrip的select控件绑定数据的问题
2016/05/10 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
简单谈谈Vue 模板各类数据绑定
2016/09/25 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
2018/10/28 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
js中apply和call的理解与使用方法
2019/11/27 Javascript
Python实现统计文本文件字数的方法
2017/05/05 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
Python callable()函数用法实例分析
2018/03/17 Python
python实现指定文件夹下的指定文件移动到指定位置
2018/09/17 Python
详解Python是如何实现issubclass的
2019/07/24 Python
python的slice notation的特殊用法详解
2019/12/27 Python
Python API len函数操作过程解析
2020/03/05 Python
Python unittest单元测试框架实现参数化
2020/04/29 Python
Java程序员综合测试题
2014/04/25 面试题
酒店总经理欢迎词
2014/01/15 职场文书
书法比赛获奖感言
2014/02/10 职场文书
大学军训感想
2014/02/12 职场文书
《中彩那天》教学反思
2014/02/22 职场文书
协议书范本
2014/04/23 职场文书
2014年度党员自我评议
2014/09/13 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
入党现实表现材料
2014/12/23 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
班委竞选稿范文
2015/11/21 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript