欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP程序优化

程序员文章站 2022-05-19 09:46:23
...
PHP程序优化

Php程序优化的内容比较多,下面重点介绍PHP代码优化、Session机制优化、使用缓存中间件以及PHP代码缓存系统(主要是APC加速)几个部分。

优化PHP代码

只有在掌握足够多的技巧之后,我们才能对PHP代码经行优化。当程序编码工作完成之后,我们通常会让一些比较资深的程序员来对代码进行审查,评估程序的质量并找出需要优化的点,这个过程也叫做 Code Review。下面我们来介绍一些比较常见的PHP编程技巧,以及 Code Review 过程中可能涉及到的一些优化原则。

1、升级到最新的PHP版本

要知道,编程语言本身也是不断发展的,新版的语言通常会包含语言自身的漏洞修补和性能优化。因此作为专业人士,我们需要定期关注新版本的出现,对于PHP来说,我们可以从官网 http://php.net/上获取到所需信息。

2、减少include 和 require

虽然PHP本身已经对这个问题做过一定的优化,但是在大量使用情况下有可能会造成性能的下降。这个过程可以采用安装APC加速器组件的方法来缓解。

3、使用局部变量代替全局变量

局部变量的速度是最快的,特别是在一些循环逻辑中,我们尽可能的使用局部变量来进行运算。至于为什么不用全局变量,一方面是因为运行效率的问题,另一方面则是考虑到全局变量不易于2管理。

4、尽量使用静态函数或方法

如果有可能我们应该尽量把函数或者方法定义成静态的,即加上 static 标记,这样有可能会让程序执行的速度提升好几倍。

5、释放那些不用的变量或者资源

不要过分的依赖PHP的内存回收机制,程序中一些用不到的变量或者资源应该及时的释放,我们可以使用 unset 方法,或者直接将其设置为 null。另外,如果遇到其他和组件相关的资源更要特别注意,比如数据库连接。

6、使用单引号替代双引号来包含字符串

在PHP中,字符串通常使用单引号来包含,因为使用双引号可能会额外产生字符转义甚至变量解析的逻辑,单引号的执行效率要比双引号高。

7、使用@符号屏蔽错误会降低脚本运行速度

为了使用方便,某些程序员喜欢使用@来屏蔽错误信息,但是这种做法会降低脚本的运行速度,不推荐使用。

8、不要过度使用PHP的 OOP

为了能更好的管理代码,现在比较大型的PHP程序都更倾向使用面向对象思想(OOP)来构建程序框架,但是由于对象通常比较占用内存,类库太多还有可能产生大量的include 和 require 操作,从而造成额外的开销。因此,我们要根据实际情况合理使用OOP思想。这个问题同样可以使用APC加速组件来缓解。

9、使用抽象类代替接口

在PHP中使用接口(inteerface)的成本非常高,编程时尽量避免使用。类似的逻辑封装我们通常可以使用抽象类(abstract class)来代替。

10、使用正则表达式代价昂贵

虽然,PHP语言的正则表达式功能非常强大,但我们需要知道它的执行成本同样高昂,在可能的情况下,应该尽量使用PHP的字符处理函数来代替。

11、尽可能的压缩需要存储的数据

任何数据的存储都需要占用系统的空间资源,所以在可能的范围内应该尽量对数据经行压缩,从而节省系统的空间资源。比如,我们保存IP地址时可以使用ip2long函数把IP地址转化为整型数据来存储,然后再通过long2ip函数还原。另外,对一些大数据还可以使用gzcompress 和 gzuncompress 进行压缩和解压。

12、使用更高效的语句

PHP编程语句的效率也有高低之分,下面我们对其比较重要的语句进行对比,以后大家在写代码时需要注意。

  • 分支语句中 switch...case 的效率高于 if...elseif...else
  • 循环语句中 foreach 的效率最高,for 其次,while 最低
  • 叠加语句语句中 ++$i(前缀) 的写法快于 $i++(后缀)

13、使用更高效的函数

PHP的函数库非常丰富,相同的功能可以使用不同的函数来完成。不过,不同函数的运行效率也有不同,我们在使用是需要注意,下面我们对一些常用函数进行对比。

  • 字符打印函数 echo 快于 print
  • 字符替换函数 strtr 效率最高,str_replace 其次,prea_replace 正则替换最低
  • 数组查询函数 array_key_exists 最快,inset 其次,in_array 最低
  • 获取远程网络文件 cUrl 效率和可操作性、灵活性最高,fsockopen 次之,file_get_contents 和 fopen 最低

虽然,对于某些逻辑不是很复杂的程序来说,也许每次代码优化的效果并不是非常明显,但是养成良好的编程习惯是非常重要的,这也是普通程序员和高级程序员之间的差别。上面所列并非所有的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)

优化数据传输

1、优化json协议

在通信协议的通用设计原则中,通用性和间接性是最重要的。选择JSON协议作为程序应用协议的基础本身就是对系统的一种优化。

2、使用gzip压缩

数据从服务端到客户端的过程需要通过复杂的网络,因此影响网络传输的主要因素有两个,其一网络质量,其二数据本身的大小。对于HTTP协议来说,gzip是目前的主流压缩算法之一,大部分的HTTP服务器都支持这种压缩算法(关于Apche、Nginx 配置gzip压缩功能模块,请 自行查找网络资源)

未完待续……

注:本文摘录自《Android 和 PHP 开发最佳实践》第九章:服务端优化(有删改)

以上就介绍了PHP程序优化,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。