4个提高脚本性能的PHP技巧
通常,我使用明显的常规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_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>在<code>count()
get中调用) - 重置内存消耗变量
- 优先选择select语句而不是多个if语句
- 优先于require / include而不是require_once / include_once(确保适当的操作码缓存)
最后几句话:我知道有关过早优化的讨论。我同意生产中的性能取决于瓶颈,例如数据库查询,在处理性能时应重点关注。但是我认为,如果有更快的替代方法,例如在正则表达式更易于处理和维护的情况下,为什么不使用它们呢?
最后
我们已经看到,即使使用当前的PHP 7.4(已经比以前的PHP版本快很多),也可以通过其他方法来提高脚本性能。如果您想亲自验证本文中提供的数据,我创建了一个包含所有测试的存储库:
测试提高 PHP 脚本性能的不同方法
我使用了Bart van Hoekelen的出色工具来衡量执行时间。
转载自:Andreas
以上是分享4个提高脚本性能的PHP技巧的详细内容。更多信息请关注PHP中文网其他相关文章!

phpientifiesauser'ssessionusessessionSessionCookiesAndSessionIds.1)whiwSession_start()被称为,phpgeneratesainiquesesesessionIdStoredInacookInAcookInamedInAcienamedphpsessidontheuser'sbrowser'sbrowser.2)thisIdAllowSphptptpptpptpptpptortoreTessessionDataAfromtheserverMtheserver。

PHP会话的安全可以通过以下措施实现:1.使用session_regenerate_id()在用户登录或重要操作时重新生成会话ID。2.通过HTTPS协议加密传输会话ID。3.使用session_save_path()指定安全目录存储会话数据,并正确设置权限。

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

ToretrievedatafromaPHPsession,startthesessionwithsession_start()andaccessvariablesinthe$_SESSIONarray.Forexample:1)Startthesession:session_start().2)Retrievedata:$username=$_SESSION['username'];echo"Welcome,".$username;.Sessionsareserver-si

利用会话构建高效购物车系统的步骤包括:1)理解会话的定义与作用,会话是服务器端的存储机制,用于跨请求维护用户状态;2)实现基本的会话管理,如添加商品到购物车;3)扩展到高级用法,支持商品数量管理和删除;4)优化性能和安全性,通过持久化会话数据和使用安全的会话标识符。

本文讨论了PHP中的crypt()和password_hash()之间的差异,以进行密码哈希,重点介绍其实施,安全性和对现代Web应用程序的适用性。

文章讨论了通过输入验证,输出编码以及使用OWASP ESAPI和HTML净化器之类的工具来防止PHP中的跨站点脚本(XSS)。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

禅工作室 13.0.1
功能强大的PHP集成开发环境