PHP程序优化
Php程序优化的内容比较多,下面重点介绍PHP代码优化、Session机制优化、使用缓存中间件以及PHP代码缓存系统(主要是APC加速)几个部分。
优化PHP代码
只有在掌握足够多的技巧之后,我们才能对PHP代码经行优化。当程序编码工作完成之后,我们通常会让一些比较资深的程序员来对代码进行审查,评估程序的质量并找出需要优化的点,这个过程也叫做 Code Review。下面我们来介绍一些比较常见的PHP编程技巧,以及 Code Review 过程中可能涉及到的一些优化原则。
要知道,编程语言本身也是不断发展的,新版的语言通常会包含语言自身的漏洞修补和性能优化。因此作为专业人士,我们需要定期关注新版本的出现,对于PHP来说,我们可以从官网 http://php.net/上获取到所需信息。
虽然PHP本身已经对这个问题做过一定的优化,但是在大量使用情况下有可能会造成性能的下降。这个过程可以采用安装APC加速器组件的方法来缓解。
局部变量的速度是最快的,特别是在一些循环逻辑中,我们尽可能的使用局部变量来进行运算。至于为什么不用全局变量,一方面是因为运行效率的问题,另一方面则是考虑到全局变量不易于2管理。
如果有可能我们应该尽量把函数或者方法定义成静态的,即加上 static 标记,这样有可能会让程序执行的速度提升好几倍。
不要过分的依赖PHP的内存回收机制,程序中一些用不到的变量或者资源应该及时的释放,我们可以使用 unset 方法,或者直接将其设置为 null。另外,如果遇到其他和组件相关的资源更要特别注意,比如数据库连接。
在PHP中,字符串通常使用单引号来包含,因为使用双引号可能会额外产生字符转义甚至变量解析的逻辑,单引号的执行效率要比双引号高。
为了使用方便,某些程序员喜欢使用@来屏蔽错误信息,但是这种做法会降低脚本的运行速度,不推荐使用。
为了能更好的管理代码,现在比较大型的PHP程序都更倾向使用面向对象思想(OOP)来构建程序框架,但是由于对象通常比较占用内存,类库太多还有可能产生大量的include 和 require 操作,从而造成额外的开销。因此,我们要根据实际情况合理使用OOP思想。这个问题同样可以使用APC加速组件来缓解。
在PHP中使用接口(inteerface)的成本非常高,编程时尽量避免使用。类似的逻辑封装我们通常可以使用抽象类(abstract class)来代替。
虽然,PHP语言的正则表达式功能非常强大,但我们需要知道它的执行成本同样高昂,在可能的情况下,应该尽量使用PHP的字符处理函数来代替。
任何数据的存储都需要占用系统的空间资源,所以在可能的范围内应该尽量对数据经行压缩,从而节省系统的空间资源。比如,我们保存IP地址时可以使用ip2long函数把IP地址转化为整型数据来存储,然后再通过long2ip函数还原。另外,对一些大数据还可以使用gzcompress 和 gzuncompress 进行压缩和解压。
PHP编程语句的效率也有高低之分,下面我们对其比较重要的语句进行对比,以后大家在写代码时需要注意。
PHP的函数库非常丰富,相同的功能可以使用不同的函数来完成。不过,不同函数的运行效率也有不同,我们在使用是需要注意,下面我们对一些常用函数进行对比。
虽然,对于某些逻辑不是很复杂的程序来说,也许每次代码优化的效果并不是非常明显,但是养成良好的编程习惯是非常重要的,这也是普通程序员和高级程序员之间的差别。上面所列并非所有的PHP编程技巧,况且要掌握这些技巧也不是一朝一夕所能完成的;所谓学海无涯,只有在学习和动手的过程中不断总结积累,才能让自己的编程能力更上一层楼。
PHP优化Session机制
简单来说,Session就像每个用户自带的全局变量,用于保存用户在在服务端需要保存的任何信息。实际上,Session会话的功能都可以在系统配置文件php.ini中设置,当然我们也可以使用 ini_set 函数(ini_get 获取配置)从程序上进行设置。
一般不建议启用auto_start(session.auto_start:是否自动启用) ,因为创建Session需要消耗系统资源,我们通常只会在需要用到Sesson时,才会使用session_start函数来开启Session功能。其次,Session的有效期需要根据系统的情况而定。如果太长,有可能导致会话数据太多造成负载问题;而加入太短,也有可能由于会话创建过于频繁而出现性能问题。系统默认的有效时间为1440秒,也就是24分钟,在实际项目中我们通常会将这个时间设置在1-8小时之间。此外还需注意的是,PHP Session 使用的默认存储方式是文件存储,在php.ini中我们可以通过session.save_handle选线来选择需要的存储方式,但是使用文件存储方式的效率比较低,也不利于系统架构扩展,在实际项目中经常通过session_set_save_handler方法来设置Session回调接口,用于控制Session会话的逻辑,常见的存储介质有数据库、分布式缓存服务器等。
PHP Session 的优化思路。首先,每次创建Session时都会产生资源消耗,千万不要想当然在全局配置文件中使用session_start 方法。其次,每次会话请求都需要确保带上Session ID,因为服务端获取不到Session ID的话,将会重新创建一个。另外,选择存储方式时,尽量使用快速的存储介质,比如高速缓存服务器Memcache(d)、Redis等。
使用缓存中间件
缓存中间件的出现,是为了把查询到的信息缓存在服务器内存中,来替代数据库处理大部分的查询要求,从而减轻数据的压力。目前业内比较常用的缓存中间件为 Memcache 和 Redis(两者的环境搭建和用法以及区别,读者请查找网络资源,此处不做详细介绍) 。根据实际项目中使用的效果,缓存中间件通常能极大提高服务端的查询速度。另外,Redis缓存还可作为写入队列来使用,即先把数据写入到Redis缓存中,然后再转存到数据中去。
使用APC加速
随着网络应用的不断发展,逻辑代码也变得越来越复杂,并且框架中引入庞大类库代码的资源消耗也比较高,因此再上线时。我们还需要使用一些代码级别的缓存来加速代码的执行。
APC(Alternative PHP Cache,PHP代码缓存系统)是非常好的PHP代码缓存解决方案,通过缓存和优化PHP中间码(opcode)来提高PHP的执行效率。
注:与 APC 同级别的免费的 PHP代码缓存技术还有 eAccelerator 和 XCache( 安装及区别:http://blog.csdn.net/mossader/article/details/6343354)
优化数据传输
在通信协议的通用设计原则中,通用性和间接性是最重要的。选择JSON协议作为程序应用协议的基础本身就是对系统的一种优化。
数据从服务端到客户端的过程需要通过复杂的网络,因此影响网络传输的主要因素有两个,其一网络质量,其二数据本身的大小。对于HTTP协议来说,gzip是目前的主流压缩算法之一,大部分的HTTP服务器都支持这种压缩算法(关于Apche、Nginx 配置gzip压缩功能模块,请 自行查找网络资源)
未完待续……
注:本文摘录自《Android 和 PHP 开发最佳实践》第九章:服务端优化(有删改)
以上就介绍了PHP程序优化,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。