关于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)的错误定义所影响性能浅析
前景提要: 编写程序时,也许你不经意间,就不知不觉的定义了错误的类型,从而发生了额外的性能消耗,从而降低了效率,不要说就发生那么一次两次,如果说是程序中发生了循环.网络程序(不断请求处理的)等这些时候 ...
随机推荐
- POJ3737 UmBasketella
嘟嘟嘟 一道三分入门题. 参考二分,三分就是每一次把区间分成三段,然后舍弃一段,不断缩小范围直到一个点. 一般用于求单峰函数的最值问题. 这道题发现V和r成一次函数的关系,因此三分r. 下面给出三分板 ...
- sting.Contains()方法
作用: 返回一个值,判断给定的string对象 是否出现在指定的字符串当中 例子: if(str_arr[i].Contains(textBox1.Text)){//检查是否有匹配
- LocalDB的奇怪问题
属性 MasterDBPath 不可用于 信息“Microsoft.SqlServer.Management.Smo.Information”.该对象可能没有此属性,也可能是访问权限不足而无法检索. ...
- 43. Multiply Strings 字符串相乘
1. 原始题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2&qu ...
- 【luogu P3369 【模板】普通平衡树(Treap/SBT)】 模板 Scapegoat Tree
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> ...
- windows mysql密码设置与破解
1.设置密码 mysqladmin -uroot -p password "1234" 查看当前用户: 2.破解密码 关闭 MySQL 服务 执行 mysqld --skip-gr ...
- Tomcat 服务器体系结构
connector 监听端口,监听到以后,交给 Engine 引擎 处理,引擎会根据请求找到对应的主机,找到主机后再去找对应的应用. 如果我们将 port 改为 80,那访问的时候就不用输入端口号,因 ...
- ProjectServer如何创建时间表
默认配置的ProjectServer是没有时间表的,任务汇报的时候不能汇报工时,只能汇报任务的百分比. 但如果有企业一定要用工时来汇报的话,我们就需要开启时间表. 点击服务器设置-->时间报告阶 ...
- Swift 中关于”??”操作符
Swift 中关于”??”操作符 Swift 的语法在保证安全和健壮的基础上,又带有很多非常灵活的特性,比如 ?? 操作符就是其中一个.大家可能已经了解它,也可能有些同学不了解它,这里给大家整理了关于 ...
- Spring框架中的IOC?
Spring中的org.springframework.beans包和org.SpringframeWork.context包构成了Spring框架IOC容器的基础.BeanFactory接口提供了一 ...