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

4个提高脚本性能的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_randMersenne 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版本快很多),也可以通过其他方法来提高脚本性能。如果您想亲自验证本文中提供的数据,我创建了一个包含所有测试的存储库:

我使用了Bart van Hoekelen的出色工具来衡量执行时间。

转载自:Andreas

关于4个提高脚本性能的PHP技巧的文章就分享到这,如果对你有帮助欢迎继续关注我们哦

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/40873.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
php学习php学习订阅用户
上一篇 2022年6月17日 23:43
下一篇 2022年6月17日 23:43

相关推荐

  • PHP生成缩略图有实现过,但是生成填充白边的实现过吗?-(附代码)

    PHP生成缩略图,相信很多人都实现过吧,没有的友友也看看吧。最近在坐一个生成缩略图的功能,还要要求上传的图片没有和限制的宽高的话,自动补白边,以下是自己实践过的例子,和大家分享一下,我主要用的还是larave…

    2018年8月27日
    0182
  • PHP中的HTTP请求和响应头。

    在Web开发中,HTTP请求和响应头是非常重要的概念。它们提供了在客户端和服务器之间传输数据的标准化机制。PHP作为一门流行的Web编程语言,自然也支持HTTP请求和响应。HTTP请求头是客户端(例如浏览器)发送给服务器…

    2023年5月28日
    05
  • 一分钟解读PHP是解释型还是编译型的?

    本篇文章给大家介绍一分钟解读PHP是解释型还是编译型的?有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。编译型语言使用专门的编译器(类似于Windows下的Visual Studio)、针对特定平台(操作系…

    2023年3月29日
    00
  • PHP实现邮件系统的用户管理功能。

    随着网络通信的发展,邮件已成为人们日常生活和工作中最常用的通讯工具之一。随着电子邮件的普及,相应的邮件系统不断涌现,使得我们可以轻松地进行邮件的收发、存储和管理等操作。而PHP作为一种网页开发语言,也在…

    2023年5月30日
    00
  • PHP入门指南:命名管道。

    PHP是目前应用最为广泛的Web开发语言之一,在PHP开发过程中,常见的问题就是如何在不同文件之间传递数据,命名管道便是一种解决方案。本文将介绍PHP中的命名管道以及如何使用它们来实现进程间通信。一、什么是命名…

    2023年5月23日
    02
  • php运算符的说明介绍

    说明:对操作数进行运算的符号,就是运算符。 表达式:表达式是 PHP 最重要的基石。在 PHP 中,几乎所写的任何东西都是一个表达式。简单但却最精确的定义一个表达式的方式就是"任何有值的东西"。 如:$a = 5; $a = …

    2017年12月2日
    0211
  • 如何在PHP中进行虚拟人和语音交互。

    在当今快速发展的互联网时代,虚拟人和语音交互成为了最具前景的技术热点。这些技术可以为企业提供更便捷的客户服务,也可以为用户提供更人性化的体验。而PHP作为一款广泛应用于Web开发的语言,也可以通过多种方式…

    2023年5月28日
    021
  • 微信小程序中PHP实现单选、多选和复选框的实现方法。

    随着微信小程序的日益普及,越来越多的开发者开始关注微信小程序的开发。微信小程序作为一种全新的开发模式,在实现不同功能上需要不同的技术方案。其中,实现单选、多选和复选框是微信小程序开发者经常会面临的一…

    2023年6月3日
    02

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息