关于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)的错误定义所影响性能浅析
前景提要: 编写程序时,也许你不经意间,就不知不觉的定义了错误的类型,从而发生了额外的性能消耗,从而降低了效率,不要说就发生那么一次两次,如果说是程序中发生了循环.网络程序(不断请求处理的)等这些时候 ...
随机推荐
- VSCode cpptools 插件在Centos 7下不能正确显示符号列表的解决办法
vscode 的插件cpptools 0.9.3 需要glibc 2.18的版本,但是Centos 7 下没有这个版本的GLIBC,所以导致链接库丢失,后台服务不能正常运行.按以下步骤操作可修复此问题 ...
- makefile中的循环控制
GNU make的foreach函数 foreach函数仅GNU make支持: 下面的代码中使用了函数foreach和shell files=main.exe a.exe b.exe all: ec ...
- ACM-ICPC 2018 徐州赛区网络预赛 G. Trace【树状数组维护区间最大值】
任意门:https://nanti.jisuanke.com/t/31459 There's a beach in the first quadrant. And from time to time, ...
- @WebListener 注解方式实现监听(eclipse和idea)
eclipse进行演示: 1.创建 Dynamic Web Project ,Dynamic Web module version选择3.0 2.在自动生成 的web.xml配置,增加 metadat ...
- 【洛谷P1039】侦探推理
侦探推理 题目链接 这是一道恶心至极的模拟题 我们可以枚举罪犯是谁,今天是星期几,从而判断每个人说的话是真是假 若每个人说的话的真假一致,且说谎话的人数<=k且说真话的人数<=m-k,就是 ...
- data-ng-model 指令
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- 整理 45 道 CSS 基础面试题(附答案)
1.介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的? 标准盒子模型:宽度=内容的宽度(content)+ border + padding + margin低版本IE盒子模型:宽度 ...
- 菜鸟笔记 -- Chapter 4.7 代码注释与编码规范
4.7 代码注释与编码规范 在程序代码中适当的添加注释可以提高程序的可读性和可维护性.好的编码规范可以使程序更易阅读和理解.下面我们将介绍几种代码注释,以及应该注意的编码规范. 4.7.1 代码注释 ...
- jzoj100029. 【NOIP2017提高A组模拟7.8】陪审团(贪心,排序)
Description 陪审团制度历来是司法研究中的一个热议话题,由于陪审团的成员组成会对案件最终的结果产生巨大的影响,诉讼双方往往围绕陪审团由哪些人组成这一议题激烈争夺. 小 W 提出了一个甲乙双方 ...
- chromium之pickle
pickle谷歌翻译成泡菜 醉了,看一下头文件的说明 // This class provides facilities for basic binary value packing and unpa ...