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

                                                       

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

通常,我使用明显的常规php函数编写代码来解决相应的问题。但是对于其中的一些问题,我遇到了一些替代解决方案,这些解决方案特别提高了性能。

推荐:《PHP视频教程》

在本文中,我想介绍一些替代方案。如果您正在寻找可能减少生产中执行时间的可能性,这将很有用。让我们看看,哪种PHP方法可能会被性能更高的方法所取代,以及是否存在成本或折衷的问题。

1.删除重复项

您有一个包含重复项的大型数组,并且希望删除它们,使其仅具有唯一值的数组。

常规

array_unique($array);

登录后复制

替代

array_keys(array_flip($array));

登录后复制

表现

我创建了一个数组,其中包含超过400万个元素和300万个重复项。这是最佳结果:

立即学习“PHP免费学习笔记(深入)”;

方法 执行时间处理时间

array_unique787.31毫秒array_keys array_flip434.03毫秒

替代方法在此测量中快1.8倍(44.87%)。平均而言,速度提高了约1.5倍(30%)。权衡:这仅适用于简单的一维数组,因为array_flip用值替换了键。

2.获取随机数组记录

您有一个很大的数组,想要从中选择一个随机值。

常规

array_rand($array);

登录后复制

替代

$array[mt_rand(0, count($array) - 1)];

登录后复制

表现

我创建了一个包含500万个元素的数组。这是最佳结果:

方法 执行时间处理时间

array_rand25.99微秒mt_rand0.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_match15.39毫秒ctype_alnum2.06毫秒

在此测量中,替代方法快了7.5倍(86.59%)。平均而言,速度提高了约4倍(76%)。可以将相同的内容应用于ctype_alpha()(检查字母字符)和ctype_digit()(检查数字字符)。

4.替换子字符串

您有一个字符串,想要用另一个子字符串替换它的一部分。

常规

str_replace('a', 'b', $string);

登录后复制

替代

strtr($string, 'a', 'b');

登录后复制

表现

我创建了一个包含500万个随机字符串的数组。这是最佳结果:

方法 执行时间处理时间

str_replace676.59毫秒strtr305.59毫秒

另一种方法是2.2倍(54.83%)在该测量更快。平均而言,速度提高了约2倍(51%)。

其他性能改进

这是我整合到我的编码约定中的一些其他要点,发现它们可以稍微改善性能(如果适用):

首选JSON比XML在循环之前而不是在循环的每个迭代中声明变量避免在循环头中进行函数调用(在每次迭代中均for ($i=0; $i重置内存消耗变量优先选择select语句而不是多个if语句优先于require / include而不是require_once / include_once(确保适当的操作码缓存)

最后几句话:我知道有关过早优化的讨论。我同意生产中的性能取决于瓶颈,例如数据库查询,在处理性能时应重点关注。但是我认为,如果有更快的替代方法,例如在正则表达式更易于处理和维护的情况下,为什么不使用它们呢?

最后

我们已经看到,即使使用当前的PHP 7.4(已经比以前的PHP版本快很多),也可以通过其他方法来提高脚本性能。如果您想亲自验证本文中提供的数据,我创建了一个包含所有测试的存储库:

devmount / faster-php测试提高 PHP 脚本性能的不同方法

我使用了Bart van Hoekelen的PHP视频教程来衡量执行时间。

转载自:Andreas

以上就是分享4个提高脚本性能的PHP技巧的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3160702.html

(0)
上一篇 2025年3月30日 10:47:17
下一篇 2025年2月25日 08:16:17

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 示例php+mysql查询实现无限下级分类树输出

    本文实例讲述了php+mysql查询实现无限下级分类树输出。分享给大家供大家参考,具体如下: 这里介绍的php结合mysql查询无限下级树输出,其实就是无限分类。给各位整理了几个php无限分类的例子. 【相关学习推荐:php编程(视频),p…

    2025年3月30日
    100
  • 21个php常用方法汇总

    php常用方法汇总 1. PHP可阅读随机字符串   立即学习“PHP免费学习笔记(深入)”;   此代码将创建一个可阅读的字符串,使其更接近词典中的单词,实用且具有密码验证功能。   立即学习“PHP免费学习笔记(深入)”; /*****…

    2025年3月30日
    100
  • 数组转json后的结果是数组还是对象? (踩坑记录)

                                                            推荐:《php视频教程》 最近工作中经常遇到这些问题,因此记录一下~ 这里要说明一下啊,json_encode 后,结果都是 s…

    编程技术 2025年3月30日
    100
  • PHP开发api接口

    推荐:《php视频教程》                                                         php的api接口 在实际工作中,使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链…

    2025年3月30日
    100
  • PHP+MySQL+LayUI分页查询显示

        html构建前端样式,ajax异步请求数据,再使用layui.table数据表格的方法渲染,这样就完成了分页查询显示。     html构建前端样式  AJAX异步请求数据     使用layui.table数据表格的方法渲染。 1…

    2025年3月30日
    100
  • php变量与json格式数据相互转换

    上篇文章我们介绍了《掌握php中的array数组(附代码解析)》,本篇文章我们来介绍json,json是一种轻量级的数据交换格式,已经被绝大数语言广泛使用,在php中与前端进行数据交换便使用json格式的数据,那么如何在php中将变量与js…

    编程技术 2025年3月30日
    100
  • 详解PHP中如何安装和使用GraphQL

    本篇文章带大家了解一下graphql,并详细介绍php中安装和使用graphql的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 关于 GraphQL GraphQL 是一种现代化的 HTTP API 接口构建方式,…

    2025年3月30日 编程技术
    100
  • 你知道Laravel Collection的实际使用场景有哪些吗?

    下面由laravel教程栏目给大家介绍laravel collection的实际使用场景,希望对需要的朋友有所帮助! Laravel Collection 实际使用 laravel 1, ‘user_id’ => 1, ‘number…

    编程技术 2025年3月30日
    100
  • 五步搞定Laravel Migrations的使用

    本文由laravel教程栏目给大家介绍,主要内容是“laravel如何使用migrations”,希望对需要的朋友有所帮助! Laravel:使用Migrations 1、首先利用artisan创建一个可迁移的数据表模板,该命令运行后会在d…

    编程技术 2025年3月30日
    100
  • 聊聊PHP中与JSON相关的函数

     php中要怎么操作json?本篇文章带大家深入学习一下php中与json相关的函数,介绍一下使用这些函数需要注意的一些地方,希望对大家有所帮助! 在我们当年刚刚上班的那个年代,还全是 XML 的天下,但现在 JSON 数据格式已经是各种应…

    2025年3月30日
    100

发表回复

登录后才能评论