php xml转数组_分享4个提高脚本性能的PHP技巧

54e8f8734011d09c721c5d8b086ce518.png

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

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

10年架构师领你架构-成长之路-(附面试题(含答案))

程序猿的生活:(腾讯T3-T4)打造互联网PHP架构师教程目录大全,只要你看完,薪资立马提升2倍(持续更新)​zhuanlan.zhihu.com
7341309b7c5d65dfd452be7e0f853db8.png

点击与我交流企鹅群.

1.删除重复项


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

常规

array_unique($array);

替代

array_keys(array_flip($array));

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

6c269d13542032628843112e2a2733a4.png

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

感谢大家一直来支持,这是我准备的1000粉丝福利

程序猿的生活:【1000粉丝福利】10年架构师分享PHP进阶架构资料,助力大家都能30K​zhuanlan.zhihu.com
f394e116c4362faab5067fd60543ea52.png

点击与我交流企鹅群.

2.获取随机数组记录
您有一个很大的数组,想要从中选择一个随机值。

常规

array_rand($array);

替代

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

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

01c8686de754ae32287d81238d71d670.png

替代方法是此测量速度快27.3倍(96.33%)。平均而言,速度提高了约8倍(87%)。这个结果特别令人惊讶,因为mt_randMersenne Twister随机数生成器的实现也是如此,并且自PHP 7.1起,内部随机化算法已更改为使用完全相同的算法。

3.测试字母数字字符
您有一个字符串,要测试,如果它仅包含字母数字字符。

常规

preg_match('/^[a-zA-Z0-9]+$/', $string);

替代

ctype_alnum($string);

表现
我创建了一个包含100k以上字母数字和非字母数字字符串的数组。这是最佳结果:

26d4402e790ee6d10f10499a6b062f5d.png

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

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

常规

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

替代

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

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

94890c04afdbf73954918ddf1aa7b1ba.png

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

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

首选JSON比XML

在循环之前而不是在循环的每个迭代中声明变量

避免在循环头中进行函数调用(在每次迭代中均for ($i=0; $i重置内存消耗变量

优先选择select语句而不是多个if语句

优先于require / include而不是require_once / include_once(确保适当的操作码缓存)

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

大厂2000道面试题(含答案)

程序猿的生活:PHP面试题汇总,看完这些面试题助力你面试成功,工资必有20-25K​zhuanlan.zhihu.com
27fbdc2d37c4fb8cb5ec7cee13677629.png

点击与我交流企鹅群.

喜欢我的文章就关注我吧,持续更新中.....

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以点击进入暗号:知乎。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值