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

 更新时间:2020年08月18日 15:10:45   作者:大步点点  
这篇文章主要介绍了php提高脚本性能的4个技巧,有助于提高程序的运行速度,感兴趣的朋友可以了解下

通常,我使用明显的常规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使用for语句输出三角形的方法

    php使用for语句输出三角形的方法

    这篇文章主要介绍了php使用for语句输出三角形的方法,可实现php之用一个for语句即可实现三角形的输出,需要的朋友可以参考下
    2015-06-06
  • PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例

    PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例

    这篇文章主要介绍了PHP实现获取ip地址的5种方法,以及插入用户登录日志操作,结合实例形式总结分析了php获取访客IP地址的5种常见操作方法,以及将用户登陆信息写入登陆日志数据库相关操作技巧,需要的朋友可以参考下
    2019-02-02
  • PHP的反射动态获取类方法、属性、参数操作示例

    PHP的反射动态获取类方法、属性、参数操作示例

    这篇文章主要介绍了PHP的反射动态获取类方法、属性、参数操作,结合实例形式分析了PHP反射的功能、原理及基于反射动态获取类方法、属性、参数相关操作技巧,需要的朋友可以参考下
    2020-03-03
  • php+ajax实时输入自动搜索匹配的方法

    php+ajax实时输入自动搜索匹配的方法

    这篇文章主要介绍了php+ajax实时输入自动搜索匹配的方法,实例分析了两种实现方法,是非常实用的技巧,需要的朋友可以参考下
    2014-12-12
  • PHP中对数组的一些常用的增、删、插操作函数总结

    PHP中对数组的一些常用的增、删、插操作函数总结

    这篇文章主要介绍了PHP中对数组的一些常用的增、删、插操作函数总结,数组的操作是PHP入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • 修改WordPress中文章编辑器的样式的方法详解

    修改WordPress中文章编辑器的样式的方法详解

    这篇文章主要介绍了修改WordPress中文章编辑器的样式的方法详解,同时文中也推荐了两款取代默认文章编辑器的插件,需要的朋友可以参考下
    2015-12-12
  • php表单提交与$_POST实例分析

    php表单提交与$_POST实例分析

    这篇文章主要介绍了php表单提交与$_POST,实例分析了表单提交中$_POST变量的具体内容形式,有助于更好的掌握表单提交中的数据操作技巧,需要的朋友可以参考下
    2015-01-01
  • PHP中的命名空间详细介绍

    PHP中的命名空间详细介绍

    这篇文章主要介绍了PHP中的命名空间详细介绍,本文讲解了命名空间(namespace)的概念、正在使用命名空间、定义命名空间、子命名空间、从命名空间中调用代码等内容,需要的朋友可以参考下
    2015-07-07
  • php常量详细解析

    php常量详细解析

    这篇文章主要介绍了php常量,常量的语法分析,区分常量和变量的不同之处,以及什么是预定义常量,对这方面感兴趣的朋友可以借鉴借鉴。
    2015-10-10
  • php的access操作类

    php的access操作类

    Access数据库操作类实现代码
    2008-04-04

最新评论