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 相关文章推荐
FCKeditor的安装(PHP)
Jan 13 PHP
据说是雅虎的一份PHP面试题附答案
Jan 07 PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
May 07 PHP
php日历制作代码分享
Jan 20 PHP
PHP设计模式之装饰者模式代码实例
May 11 PHP
PHP 与 UTF-8 的最佳实践详细介绍
Jan 04 PHP
PHP基于Redis消息队列实现发布微博的方法
May 03 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
Jun 28 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
Laravel框架文件上传功能实现方法示例
Apr 16 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
Oct 18 PHP
Laravel手动返回错误码示例
Oct 22 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
博士208HAF收音机实习报告
2021/03/02 无线电
php模板中出现空行解决方法
2011/03/08 PHP
php的大小写敏感问题整理
2011/12/29 PHP
PHP跨时区(UTC时间)应用解决方案
2013/01/11 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
Yii使用DbTarget实现日志功能的示例代码
2020/07/21 PHP
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
2014/10/17 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
vue中改变选中当前项的显示隐藏或者状态的实现方法
2018/02/08 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
React学习之JSX与react事件实例分析
2020/01/06 Javascript
JS运算符简单用法示例
2020/01/19 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
基于Python实现的微信好友数据分析
2018/02/26 Python
python监控进程脚本
2018/04/12 Python
查看python下OpenCV版本的方法
2018/08/03 Python
Python闭包思想与用法浅析
2018/12/27 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
Python 文件数据读写的具体实现
2020/01/24 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
护理专业个人求职简历的自我评价
2013/10/13 职场文书
给排水工程师岗位职责
2013/11/21 职场文书
国培远程培训感言
2014/03/08 职场文书
园林专业毕业生自荐信
2014/07/04 职场文书