关于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)的错误定义所影响性能浅析
前景提要: 编写程序时,也许你不经意间,就不知不觉的定义了错误的类型,从而发生了额外的性能消耗,从而降低了效率,不要说就发生那么一次两次,如果说是程序中发生了循环.网络程序(不断请求处理的)等这些时候 ...
随机推荐
- WAKE-WIN10-SOFT-软件-Matlab配置及工具箱
1Matlab 1,1Matlab下载,安装,配置,,, 1,2 2工具箱 2,1LibSVM 必应:https://www.bing.com/search?q=libsvm&qs=n& ...
- Jerry的WebClient UI 42篇原创文章合集
我要感谢CRM On Premise, 因为在这个产品上做开发让我得以使用WebClient UI框架.有些朋友觉得这个SAP自己发明的基于HTML+ABAP的MVC框架,和现在流行的三驾马车(Ang ...
- sql 两表查询后 更新某表中部分字段
这是上一个sql更新某表字段的一个延伸,在更新表数据时,实际上会有多表数据查询场景,查询后,只需要更新某一个表中的数据,以下提供两个方法, 第一种使用update 两表查询 update api_ma ...
- 初学Pollard Rho算法
前言 \(Pollard\ Rho\)是一个著名的大数质因数分解算法,它的实现基于一个神奇的算法:\(MillerRabin\)素数测试(关于\(MillerRabin\),可以参考这篇博客:初学Mi ...
- Uva 11419 我是SAM
题目链接:https://vjudge.net/problem/UVA-11419 题意:一个网格里面有一些目标,可以从某一行,某一列发射一发子弹,可以打穿: 求最少的子弹,和在哪里打? 分析: 听说 ...
- fastJson简单实用
public class FastJsonText { @Test public void text(){ User user1 = new User(); user1.setName("健 ...
- 【洛谷P2216】[HAOI2007]理想的正方形
理想的正方形 [题目描述] 一个a*b的矩阵,从中取一个n*n的子矩阵,使所选矩阵中的最大数与最小数的差最小. 思路: 二维的滑动窗口 对于每行:用一个单调队列维护,算出每个长度为n的区间的最大值和最 ...
- HDU 1260 Tickets (普通dp)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1260 Tickets Time Limit: 2000/1000 MS (Java/Others) ...
- sql字段为datetime,插入''的时候默认为1900年
Microsoft SQL Server Database Engine 用两个 4 字节的整数内部存储 datetime 数据类型的值. 第一个 4 字节存储“基础日期”(即 1900 年 1 月 ...
- caffe convert mxnet
https://github.com/apache/incubator-mxnet/tree/430ea7bfbbda67d993996d81c7fd44d3a20ef846/tools/caffe_ ...