PHP性能如何实现全面优化?

Post Time:2018-02-12 11:59:29 Views:572

性能是网站运行是否良好的关键因素,网站的性能与效率影响着公司的运营成本及长远发展,编写出高质高效的代码是我们每个开发人员必备的素质,也是我们良好的职业素养。如何优化PHP性能呢?

一.变量(重要)

1.变量大小,注意变量大小是节约内存的最有效手段,对于来自用户表单.数据库和文件缓存的数据都需要控制变量的大小。因为cpu要处理的数据是来源于内存

2.变量有效期,使用unset()函数注销不需要的变量是一种良好的习惯,将一些不需要的变量立即注销可提高内存的使用率。

3.复制变量,尽量不要复制变量,否则就会带来1倍的内存消耗,即使复制变量也应该要立即注销原有变量。

4.变量类型,初始化变量请注意其变量类型,一个变量在执行过程中最好只有一种类型状态。对于数组变量,请初始化声明,如下:$a=array();

5.临时变量,是处理业务逻辑的临时存储,这些都是需要消耗内存的。如果临时变量使用结束请立即注销,特别是在一些过程式代码的执行流程中,对于一些函数,如果业务非常复杂,同样需要立即注销临时变量

6.静态变量,对于一些需要由复杂业务产生的变量,如果在程序的执行过程中多次产生并使用,可考虑使用静态变量,减少程序的cpu执行次数

7.变量的性能:局部变量>全局变量>类属性>未定义的变量。

二.循环(重要)

1.尽量减少循环的次数。

2.尽量减少循环的潜逃的层次,不要超过三层。

3.避免在循环内有过多的业务逻辑。

4.不要循环包含文件

5.不要循环执行数据库操作。

6.优先使用foreach,它比for/while效率高

7.不要把count/strlen/sizeof放到for循环的条件语句中For($i=0,$count=count($array);$i<$count;$i++){}不要使用for($i=0;$i<count($array);$i++){};

8.for($i=$total;$i>0;$i–){}性能好于for($i=0;$i<$total;$–){} 9.保持循环体内的业务逻辑清晰

三.函数(重要)

本帖隐藏的内容

1.函数职责清晰,一个函数只干一件事,不要杂揉过多的业务逻辑

2.函数代码体不要超过20行,反之,考虑拆分。

3.优先使用php内置函数

4.常量与函数同时能干一件事,优先使用常量。 例如:

phpversion() < PHP_VERSION
get_class() < __CLASS__
is_null() < NULL

5.echo的性能好于print,输入多个变量的时候用echo$str,$str1,不用.连接符

6.$_SERVER[REQUEST_TIME]替换time();

7.字符串替换strtr()->str_replace()->preg_replace()->epreg();

8.发挥trim最大功效,替换substr。$filepath=trim($filename,'/').'/';

9.Isset/empty虽然两个函数功能有所差异,但在同样的情况下推荐使用empty()

10.isfile/file_exist两个函数的功能有所不同,file_exist既可判断文件是否存在,也可以判断目录是否存在,在同样的情况下推荐使用is_file

四.文件(重要)

1.减少文件包含数,减少磁盘IO

2.使用完整路径,或者容易转换的相对路径。避免在include_path查找

3.文件的代码行数不要超过2000行

4.Require_once/include_once效率低于require/include,需要额外的去查看系统是否已经调用过这个文件.因为它们在一个opcode缓存下的调用非常慢

5.程序执行文件用requie/require_once,缓存文件用include/include_once。Include效率好于require

6.优化spl中的文件自动加载机制,可参靠yii

7.类库文件加载,是否考虑类是否已经实例化,可考虑采用设计模式之单例模式

8.文件读写的并发性

五.面向对象(重要)

本帖隐藏的内容 1.控制实例的创建的数量

2.优先使用常量.类常量

3.优先例用静态变量,静态属性

4.类的结构合理

5.面象接口编程

6.封装变化点

7.依赖于抽象,不依赖于细节

8.优先使用静态成员

9.类的接口清晰稳定,类的职责单一,类与类的通信合理

10.使用常量的好处编译时解析,没有额外开销杂凑表更小,所以内部查找更快类常量仅存在于特定「命名空间」,所以杂凑名更短代码更干净,使除错更方便

六.字符串

1.用单引号替代双引号引用字符串;避免检索字符串中的变量

七.运算

1.用i+=1代替i=i+1。符合c/c++的习惯,效率还高

2.++$i的效率高于++$i,–$i同理[/hide]

八.数组

1.多维数组尽量不要循环嵌套赋值;

2.使用$array['name']方式访问数组,禁止$array[name]/$array[“name”]

九.判断(重要)

1.逻辑判断请优先使用switch的方式,对于业务逻辑相对较多的情况请选择if/else,提高代码的可读性

2.尽量控制if/else判断的个数,如果太多请考虑功能优化或代码优化

3.尽量使用恒等用于比较判断,恒等的效率高于等于,而且还能避免一些类型强制转换的错误

4.if/else与_&&,单条语句判断请选择&&的形式,&&的效率高于if/else,如下:

if($a==1){
$b=2;
}

可选择为($a==1)&&$b=2;

十.缓存

1.使用php加速器,缓冲opcode

2.例用memcache/nosql

3.使用内存数据库.

4.使用文件缓存

5.缓冲功能

十一.其它

1.少用符号,严重影响性能

2.适时关闭远程资源连接如数据库,ftp.socket等,适时的清理这些资源

十二.数据库优化(重要)

本帖隐藏的内容 1.合理的商业需情

2.数据库schema架构优化

3.垂直与水平分库分表

4.索引优化,查询优化

5.第三方开源检索工具(sphinx)

6.主从数据库服务器的使用。 详情可查看传智PHP公开视频《大型网站优化核心技术-mysql》

十三.前端优化

1.合理的html结构

2.合理html与css的同时,考虑Css设计合理,减少http请求

3.合理html与java script的同时,考虑拆分是否合理,减少http请求

4.优化java script代码,让用户有良好的体验

5.根据http协议,优化高并发请求

十四.性能检测工具(重要)

本帖隐藏的内容 只要在百度上搜索“xxx如何检网站性能”即可。 1.Web Server

2.ab

3.http_load

4.PHP

5.apd

6.xdebug

7.Mysql

8.explain

9.profiler`

Comments: 0
暂无评论

「人生在世,留句话给我吧」

撰写评论