PHP代码优化技巧小结


Posted in PHP onSeptember 29, 2015

PHP优化的目的是花最少的代价换来最快的运行速度与最容易维护的代码。给大家提供下面这些优化技巧:

PHP代码优化技巧小结

1. echo 比 print 快。

2. 使用echo的多重参数代替字符串连接。

3. 在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。

4. 对global变量,应该用完就unset()掉。

5. 用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会。

6. 函数代替正则表达式完成相同功能。

7. 当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。

8. 使用选择分支语句(switch case)好于使用多个if,else if语句。

9. 利用var_dump进行PHP代码调试。如果你在寻找php调试技术,我必须说var_dump应该是你要找的目标,在显示php信息方面这个命令可以满足你的所有需要,而调试代码的多数情况与得到PHP中的数值有关。

10. 在包含文件时使用完整路径,解析操作系统路径所需的时间会更少。

11. 动辄创建全局数值是一种糟糕的做法,不过有时候实际情况的确又需要这么做。对于数据库表或数据库连接信息使用全局数值是一个不错的想法,但不要在你的PHP代码中频繁使用全局数值。另外,更好的一种做法是把你的全局变量存放在一个config.php文件中。

12. 如果你想知道脚本开始执行的时刻,使用$_SERVER[‘REQUEST_TIME']要好于time()。

13. 打开apache的mod_deflate模块。

14. 用@屏蔽错误消息的做法非常低效。

15. 尽量采用大量的PHP内置函数。

16. 递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。

17. 派生类中的方法运行起来要快于在基类中定义的同样的方法。

18. 仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)

19. Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。

20. 正如之前提到的,任何php网站中最重要的部分有99%的可能是数据库。因此,你需要非常熟悉如何正确的使用sql,学会关联表和更多高级的数据库技术。

21. 调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。

22. 当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。

23. 并不是所有情况都必须使用面向对象开发,面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。

24. 除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。

最后再提醒一下在代码优化的时候应该注意的事情:

1. 短代码不等于快的代码
很多人在写程序时希望将代码写的越简洁越好,但是越短的代码有时候反而需要更长的执行时间。

2. 在写程序的时候更应该注重程序的扩展性,而不是追求速度。

3. 在优化你的代码之前,先看看跟数据库有关的部分,因为大多数应用程序的瓶颈在数据库而不是代码。

4. 微优化得不偿失
什么叫做微优化?就像前面所说的将正则表达式部分的代码改用字符串函数代替。这样做有以下缺点:
(1)花费时间较长
(2)不会根本上解决性能问题
(3)很有可能会破坏以前的代码从而产生未知的错误
(4)付出大于回报

       这里还不得不提到一个误区,有些人为了让程序更加优化,在分析业务逻辑的时候便将优化考虑在内了,从而为了得到更优的代码而改动业务逻辑。这是十分愚蠢的想法,因为程序的目的便是为了处理现实中遇到的问题,我们不能本末倒置。

以上就是php代码优化的方法和一些小提示,希望能够帮助到大家更好的优化php代码

PHP 相关文章推荐
无数据库的详细域名查询程序PHP版(3)
Oct 09 PHP
如何在WIN2K下安装PHP4.04
Oct 09 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
Jun 16 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
Sep 11 PHP
wamp下修改mysql访问密码的解决方法
May 07 PHP
php操作XML、读取数据和写入数据的实现代码
Aug 15 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
Dec 11 PHP
Symfony2框架学习笔记之表单用法详解
Mar 18 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
Dec 28 PHP
Django中的cookie与session操作实例代码
Aug 17 PHP
PHP实现一个限制实例化次数的类示例
Sep 16 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
Sep 29 #PHP
PHP类的封装与继承详解
Sep 29 #PHP
PHP比较运算符的详细介绍
Sep 29 #PHP
php提高网站效率的技巧
Sep 29 #PHP
四个PHP非常实用的功能
Sep 29 #PHP
PHP实现二叉树的深度优先与广度优先遍历方法
Sep 28 #PHP
PHP+AJAX实现投票功能的方法
Sep 28 #PHP
You might like
php定时计划任务与fsockopen持续进程实例
2014/05/23 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
浅谈PHP表单提交(POST&GET&URL编/解码)
2017/04/03 PHP
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
进一步探究Python中的正则表达式
2015/04/28 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
2019/09/25 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
python和go语言的区别是什么
2020/07/20 Python
详解scrapy内置中间件的顺序
2020/09/28 Python
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
介绍java中初始化块的使用
2012/09/11 面试题
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2014/12/30 面试题
工程预算与管理应届生求职信
2013/10/06 职场文书
会计毕业生自荐信
2013/11/21 职场文书
留学生如何写好自荐信
2013/12/27 职场文书
对公司合理化的建议书
2014/03/12 职场文书
计算机专业自荐信范文
2014/05/28 职场文书
2014年社区重阳节活动策划方案
2014/09/16 职场文书