关于PHP性能提升踩过的一些坑
性能这个东西,在网站规模到达一定程度后,会是一个永恒的主题。关于这方面,本人有一些拙见,现在拿出来,大家一起探讨下。
1、编码过程中,传递参数时,尽量少使用‘引用传参’。这是一个巨坑啊。。。我们要了解,PHP所以来的技术模型是什么?写时复制(copy-on-write)好吧啦。当你使用‘引用传参’的时候,你的那个什么变量啊啥的都会再重新复制一份,知道了不。然而当你直接传参一个巨大的变量给某个函数的时候,并不会对你的性能造成多大影响。所以嘞,当你的程序出现性能问题的时候,不妨看看是否使用了‘引用传参’这个鬼吧。
2、在使用for循环之前。$i<count()。。。等一系列计算书组或者字符串的长度的函数尽量不要使用。数组小一点的话影响不大,数据量一多,嘿嘿,结果就不言而喻了。因为你每一次循环都要使用这个函数来计算长度。十次百次无所谓,十万次百万次就感觉出来差距了。
3、使用isset函数的时候要注意你所检测的变量,可不可以设置为null。这是一个比较隐秘的坑。因为isset对变量未设置和变量为null返回的值是一样的。所以尽量注意下喽。这个对你的性能提升的不大,但是,会反映出来你的程序的严谨性。所以嘞,仁者见仁智者见智,多注意下总不会错的。
4、还是循环。我们通常会用循环来做一些事情,比如:组合、检测、替换数据等等。。。但是我们又没有想过,当我们循环完毕后会留下数组的引用。这就是个麻烦事情了。这些引用,会占用我们的运行内存,对下面的编码也会有一定的影响。所以嘞,最好的做法就是,每次循环完事之后,使用unset来清一下这些残留。有备无患,相信性能方面会有那么一丢丢的提升的。
5、尽量不要在循环中使用查询。这个就很明显了。每循环一次就调用一次数据库效率高,还是只执行一次查询效率高,诸君应该都清楚。哪怕是一次查询的数据量大,我们还可以分段查询或者分批次查询。总是会比多次调用要好一点的。
6、正则的问题相信大家应该知道。尽量少使用吧,多使用PHP的内置函数。这才是明智之道。但是内置函数也是有快慢之分的哈。最慢的应该就是魔术变量之类的了,可能不准确,大家编码的时候注意下。
7、用少量的代码实现功能。正常人的思维么,尽量把业务逻辑分析清楚之后再开始编码。这点如果做到的话,关于PHP的性能优化基本上就完成了一大部分了。这里的什么可读性啦啥的在下就不啰嗦了,就是提一下。
8、再来就是PHP的配置文件php.ini了。比如什么分配内存啦,执行时间长短的设置啦,Zend OPcache的配置啦,缓存输出,等等。这些东西在我的博客上有文章,大家有时间可以简单看下。这些东西本来是该运维来搞的,但是嘞,谁让我们是万能的PHPer呢,所以了解下总没有错的。
9、这是最后一点了。那就是万事按照你的需求来做。在保证解决你的需求的大前提下,你可以使用一些优化的小技巧,比如什么引入文件的消耗大小啦,echo的性能比print好啦,种种。但是有一个前提,就是完成需求。别的都是废话。还有就是面向对象也不必时时刻刻都考虑这个东西,该用的时候要用,别客气,先完成功能再说。
好啦,这次写的就到这里了,时间不多哈,见谅。。。
如果感觉不错的话,请多多点赞支持哦。。。
关于PHP性能提升踩过的一些坑的更多相关文章
- SQL Server 2014里的性能提升
在这篇文章里我想小结下SQL Server 2014引入各种惊艳性能提升!! 缓存池扩展(Buffer Pool Extensions) 缓存池扩展的想法非常简单:把页文件存储在非常快的存储上,例如S ...
- mapreduce性能提升2
mapreduce性能提升2mapreduce性能提升2mapreduce性能提升2
- YbSoftwareFactory 代码生成插件【二十一】:Web Api及MVC性能提升的几个小技巧
最近在进行 YbSoftwareFactory 的流程功能升级,目前已经基本完成,现将用到的一些关于 Web Api 及 MVC 性能提升的一些小技巧进行了总结,这些技巧在使用.配置上也相当的简单,但 ...
- 在PYTHON中使用StringIO的性能提升实测(更新list-join对比)
刚开始学习PYTHON,感觉到这个语言真的是很好用,可以快速完成功能实现. 最近试着用它完成工作中的一个任务:在Linux服务器中完成对.xml.gz文件的解析,生成.csv文件,以供SqlServe ...
- 揭秘Sql2014新特性-tempdb性能提升
一直以来,在高负载,复杂的生产环境中,tempdb的压力是成为整个实例瓶颈的重要因素之一.微软的工程师们也在各个版本中不断优化它的使用.到了Sql Server2014又有了新的特性使其性能得temp ...
- paip.cache 缓存架构以及性能提升总结
paip.cache 缓存架构以及性能提升总结 1 缓存架构以及性能(贯穿读出式(LookThrough) 旁路读出式(LookAside) 写穿式(WriteThrough) 回写式 ...
- C# 程序性能提升篇-1、装箱和拆箱,枚举的ToString浅析
前景提要: 编写程序时,也许你不经意间,就不知不觉的使程序代码,发生了装箱和拆箱,从而降低了效率,不要说就发生那么一次两次,如果说是程序中发生了循环.网络程序(不断请求处理的)等这些时候,减少装箱和拆 ...
- 天天动听MP3解码器性能提升50%
天天动听今日升级提醒,发现有一句 “使用新的MP3解码器,性能提升50%”,太惊讶了. 之前版本的MP3解码器使用libmpg123,效果已经是MP3解码器中非常不错的了. 50%的提升,应该不仅仅是 ...
- C# 程序性能提升篇-2、类型(字段类型、class和struct)的错误定义所影响性能浅析
前景提要: 编写程序时,也许你不经意间,就不知不觉的定义了错误的类型,从而发生了额外的性能消耗,从而降低了效率,不要说就发生那么一次两次,如果说是程序中发生了循环.网络程序(不断请求处理的)等这些时候 ...
随机推荐
- 基于配置的Spring AOP
前面几篇学习了Spring的依赖注入,这篇开始学习另一个核心功能——面向切面编程AOP. 通过本文,你可以了解到: 1 Spring xml规范 2 通过配置文件实现面向切面编程 3 对比与传统AOP ...
- 2018中国大学生程序设计竞赛 - 网络选拔赛 1001 - Buy and Resell 【优先队列维护最小堆+贪心】
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6438 Buy and Resell Time Limit: 2000/1000 MS (Java/O ...
- CF821E 【Okabe and El Psy Kongroo】
首先我们从最简单的dp开始 \(dp[i][j]=dp[i-1][j]+dp[i-1][j+1]+dp[i-1][j-1]\) 然后这是一个O(NM)的做法,肯定行不通,然后我们考虑使用矩阵加速 \( ...
- 【luogu P2002 消息扩散】 题解
题目链接:https://www.luogu.org/problemnew/show/P2002 缩点把原图变为DAG,再在DAG上判断找入度为0的点的个数. 注意一点出度为0的点的个数不等于入度为0 ...
- EJB 配置多个数据源
1.修改jboss-6.simple\server\default\deploy\transaction-jboss-beans.xml 配置文件 <bean name="CoreEn ...
- Android学习笔记_4_单元测试
在实际开发中,开发android软件的过程需要不断地进行测试.而使用Junit测试框架,侧是正规Android开发的必用技术,在Junit中可以得到组件,可以模拟发送事件和检测程序处理的正确性. 1. ...
- wubiuefi-支持新版本ubuntu的wubi
由于某些原因,ubuntu官方不再提供新版的wubi 这就使得部分想快速且安全尝试新版ubuntu的用户望而却步 最近在外文网站找到了wubi的新版本wubiuefi,支持最新版的ubuntu 目前支 ...
- bzoj3895: 取石子(博弈论,记忆化搜索)
3895: 取石子 Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 361 Solved: 177[Submit][Status][Discuss] D ...
- Java 的标识接口作用
原文地址:标识接口 作用作者:feisong 时间:2019-01-2315:49:35 标识接口是没有任何方法和属性的接口.标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定 ...
- mysql的密码忘记了,怎么办, 来来来.
尤其是在学习的过程, 也是天天和数据库打交道, 难免会有脑子短路的时候, 比如root密码忘记了, 你说怎么办~~~, 没关系, 往下看 mysql提供了一种跳过用户认证的配置, 参数, 你配置上这个 ...