4 个常见的 PHP 代码性能对比 迷南。 2022-12-17 13:00 118阅读 0赞 通常我会使用常规的、显而易见的 PHP 函数来编写代码来解决相应的问题。但对于其中一些问题,我遇到了特别提高性能的替代解决方案。 在本文中,我想介绍其中的一些替代方案。如果你正在寻找在生产中进一步减少执行时间的可能性,这将非常有用。让我们来看看哪些 PHP 方法可能会被性能更好的方法取代,以及是否有任何成本或权衡。 > 所有这些方法都在本地 Web 服务器上使用 PHP 7.4 进行了测试 > 欢迎加入 **[我的官方群][Link 1]** ## 1. 删除重复项 ## 你有一个包含重复项的大型数组,并且希望删除它们,以便只有一个具有唯一值的数组。 常规 array_unique($array); 其他方式 array_keys(array_flip($array)); ### 性能 ### 我创建了一个 400 万的数组,其中有 300 万个重复项,这是最好的优化结果: ![2193f702eaf7803569d370a002f073f2.png][] 其他方式比常规方式 快了 **1.8**倍 (44.87%) . 平均也有大约 1.5 倍 (30%) 的提升。总结:这仅适用于一维数组,因为`array_flip`会反转键和值. ## 2. 获取随机的数组元素 ## 你想从一个大数组中获取一个随机值 ### 常规 ### array_rand($array); ### 其他方式 ### $array[mt_rand(0, count($array) - 1)]; ### 性能 ### 我创建了一个包含 500 万个元素的数组,这是最佳结果: ![4a630d47c665121898781792d14a094b.png][] 替代方法在此测量中快**27.3 倍**(96.33%)。平均快 8 倍 (87%)。这个结果特别令人惊讶,因为`mt_rand`是 MersenneTwister 随机数生成器的实现,而且从 PHP7.1 开始,内部随机化算法[已更改][Link 2]为使用完全相同的算法。 ## 3. 字母数字字符测试 ## 如果你有一个字符串,并且希望测试它是否只包含字母数字字符。 ### 常规 ### preg_match('/[a-zA-Z0-9]+/', $string); ### 其他方式 ### ctype_alnum($string); ### 性能 ### 我创建了一个包含超过 100k 字母数字和非字母数字字符串的数组。以下是排名靠前的结果: ![4c9cc2a04bbf8e2d5da91adc8737edfb.png][] 替代方法在此测量中快 7.5 倍 (86.59%)。 平均而言,它快了约 4 倍 (76%)。 同样的道理也可以应用于 ctype\_alpha() 命令 (检查字母字符) 和 ctype\_digit() 命令 (检查数字字符)。 ## 4. 替换子字符串 ## 你有一个字符串,并且希望用另一个子字符串替换它的一部分。 ### 常规 ### str_replace('a', 'b', $string); ### 其他方式 ### strtr($string, 'a', 'b'); ### 性能 ### 我创建了一个包含 500 万个随机字符串的数组。以下是排名靠前的结果: ![b33766d6c744a6a306050b3487c749ae.png][] 替代方法在此测量中快**2.2 倍**(54.83%)。平均快 2 倍 (51%)。 ## 额外的性能改进 ## 以下是我在编码约定中搜集的一些附加方法,我发现它们可以略微提高性能 (如果适用): * 更喜欢 JSON 而不是 XML * 在之前声明变量,而不是在循环的每次迭代中声明变量 * 避免循环头部中的函数调用 (在每次迭代中调用的 for ($i=0; $i<count($array); $i) 中的 count() 中) * 注销消耗内存变量 * 首选 select 语句而不是多个 if 语句 * 优先选择 require/include 而不是 require\_once/include\_once (确保正确的操作码缓存) 最后一句话:我知道关于过早优化的讨论。我同意,生产中的性能取决于诸如数据库查询之类的瓶颈,在处理性能时应该重点关注这些瓶颈。但我认为,如果有更快的替代方案,例如,在 regex 更容易处理和维护的情况下,为什么不使用它们呢? ## 总结 ## 我们已经看到,即使使用当前的 PHP 7.4 (已经比以前的 PHP 版本快得多),也有可能使用其他方法进一步提高脚本性能。如果你希望自己验证本文中提供的数字,我创建了一个包含所有测试的存储库: > GitHub Repo [faster-php][] ### 测试提高 PHP 脚本性能的不同方法 ### 我用 Bart van Hoekelen 的[伟大工具][Link 3]来衡量执行时间。 如果你知道提高某些 PHP 函数性能的方法,请不要犹豫在这里发表评论或在上面的 repo 中[创建 issue][issue]/PR 。 原文地址:[https://dev.to/devmount/4-php-tricks-to-...][https_dev.to_devmount_4-php-tricks-to-...] 译文地址:[https://learnku.com/php/t/50861][https_learnku.com_php_t_50861] ![584f7c4a174abcd3a933724a51e0a803.png][] 很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了迷茫没方向,不知道该从哪儿入手去提升自己。→→管理整理了一些**资料**,有 腾讯 等一线大厂进阶知识体系 可供参考**(相关学习资料以及笔面试题)** 覆盖各个技术栈:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货欢迎加入**[我的官方群][Link 1]啊[点击此处][Link 4]** [Link 1]: https://link.zhihu.com/?target=https%3A//jq.qq.com/%3F_wv%3D1027%26k%3DSFr4C0W3 [2193f702eaf7803569d370a002f073f2.png]: /images/20221122/15bec1df63b3474fbe709e8c8da1c0d1.png [4a630d47c665121898781792d14a094b.png]: /images/20221122/cafafc237f1747ce966f5bdc80263bfd.png [Link 2]: https://link.zhihu.com/?target=https%3A//www.php.net/manual/en/migration71.incompatible.php%23migration71.incompatible.rand-srand-aliases [4c9cc2a04bbf8e2d5da91adc8737edfb.png]: /images/20221122/4f0c1f83c3134bac857694cc8f15324b.png [b33766d6c744a6a306050b3487c749ae.png]: /images/20221122/96dafa66fef344558e27725761b31481.png [faster-php]: https://link.zhihu.com/?target=https%3A//github.com/devmount/faster-php [Link 3]: https://link.zhihu.com/?target=https%3A//github.com/bvanhoekelen/performance [issue]: https://link.zhihu.com/?target=https%3A//github.com/devmount/faster-php/issues/new [https_dev.to_devmount_4-php-tricks-to-...]: https://link.zhihu.com/?target=https%3A//dev.to/devmount/4-php-tricks-to-boost-script-performance-ol1 [https_learnku.com_php_t_50861]: https://link.zhihu.com/?target=https%3A//learnku.com/php/t/50861 [584f7c4a174abcd3a933724a51e0a803.png]: /images/20221122/b0f00d51858d4716b44f523699f7d90e.png [Link 4]: https://link.zhihu.com/?target=https%3A//jq.qq.com/%3F_wv%3D1027%26k%3DpPPRwVd6
相关 常见误区解析:Java字符串连接性能对比 在Java编程中,关于字符串连接的性能确实存在一些误解。以下是一些常见的误区解析: 1. **使用+操作符**: - 误认为:`String str1 = "Hello 我会带着你远行/ 2024年10月25日 17:00/ 0 赞/ 30 阅读
相关 性能优化:Java代码中常见的性能瓶颈 在Java编程中,常见的性能瓶颈主要集中在以下几个方面: 1. **循环效率**:过多的循环和迭代会导致性能下降。尽量减少循环次数,并利用多线程提高并发执行能力。 2. * 谁践踏了优雅/ 2024年09月11日 05:00/ 0 赞/ 74 阅读
相关 谢华亮 php,谢华亮: PHP4和PHP5性能测试和对比 PHP 4到今年年底PHP Group将不再对其进行支持了,所以为了让大家更有信心的转移到PHP 5平台上,我特别做了这个测试,看看我们PHP 4.x 是否真的性能比我们的PH 傷城~/ 2023年01月17日 15:55/ 0 赞/ 98 阅读
相关 swoole 对比php fpm,测试一下nginx+php-fpm和swoole http服务器性能对比 服务器vm虚拟机 1核1G 环境 :nginx/1.13.8 + php7.2.1 + mysql 5.7.2 环境 :swoole 2.0.12 这是nginx 矫情吗;*/ 2023年01月15日 02:18/ 0 赞/ 141 阅读
相关 4 个常见的 PHP 代码性能对比 通常我会使用常规的、显而易见的 PHP 函数来编写代码来解决相应的问题。但对于其中一些问题,我遇到了特别提高性能的替代解决方案。 在本文中,我想介绍其中的一些替代方案。如果你 迷南。/ 2022年12月17日 13:00/ 0 赞/ 119 阅读
相关 常见排序算法的性能对比 <table> <thead> <tr> <th></th> <th>时间复杂度</th> <th>空间复杂度</th> <th al r囧r小猫/ 2022年10月25日 14:28/ 0 赞/ 148 阅读
相关 PHP 7 vs HHVM性能对比 来源:http://www.ttlsa.com/php/php7-vs-hhvm/ [PHP][] 是最流行的用于 web 开发的脚本语言之一。PHP 的最新版本, ゝ一世哀愁。/ 2022年05月29日 04:51/ 0 赞/ 223 阅读
相关 yii、yaf、ci等php框架性能对比 [为什么80%的码农都做不了架构师?>>> ][80_] ![hot3.png][] 刚和朋友的聊天过程中,认识到yaf,yaf是远程c写的框架,整个php框架写成了扩展。 ゝ一纸荒年。/ 2022年01月16日 23:53/ 0 赞/ 268 阅读
相关 php_mod模式与php_fcgid模式 性能对比 apache2+php\_fcgid +php-cgi 模式(默认配置未进行优化处理) apache2默认进程数及内存占用情况如下: root 1057 ゝ一纸荒年。/ 2021年10月23日 12:50/ 0 赞/ 325 阅读
还没有评论,来说两句吧...