TypechoJoeTheme

404

PHP

PHP性能优化

PHP性能如何优化 - virus

变量

变量的性能排行:局部变量 > 全局变量 > 类属性 > 未定义的变量

  1. 变量大小,注意变量大小是节约内存的最有效的手段。对于来自表单、数据库和文件缓存的数据都需要控制变量的大小。因为CPU要处理的数据是来源于内存。
  2. 变量的有效期,使用unset()函数注销不需要的变量是一种好习惯,将一些不需要的变量立即注销可提高内存的使用率。
  3. 变量类型,初始化变量请注意其变量类型,一个变量在执行过程中,最好只有一种类型状态。
  4. 临时变量,是处理业务逻辑的临时存储,这些都是需要消耗内存的。如果临时变量使用结束请立即注销。
  5. 静态变量,对于一些需要由复杂业务产生的变量,如果在程序的执行过程中多次产生并使用,可以考虑使用静态变量,减少程序的CPU执行次数。

循环

  1. 尽量减少循环的次数
  2. 尽量减少循环嵌套的层次
  3. 避免在循环内有过多的业务逻辑
  4. 不要循环包含文件
  5. 不要循环执行数据库操作
  6. 优先使用foreach,它比for、while效率更高
  7. 不要把count、strlen、sizeof放入for循环条件语句中
  8. 保持循环体内的业务逻辑清晰

函数

  1. 函数职责清晰,一个函数只干一件事,不杂糅过多的业务逻辑
  2. 函数代码体不超过20行,反之考虑拆分
  3. 优先使用PHP内置函数
  4. 常量与函数同时能干一件事,优先使用常量

例如:

phpversion()    <    PHP_VERSION
get_class()        <    __CLASS__
is_null()        <    NULL
// 等等。。。
  1. echo的性能好于print,输入多个变量的使用echo $str1,$str2,$str3,不用.连接符
  2. 使用$_SERVER['REQUEST_TIME']替换time()
  3. 字符串替换

    strtr()    >    str_replace()    >    preg_replace()    >    epreg()
  4. 发挥trim最大功效,替换substr

    $file_path = trime($filename, '/').'/';
  5. isset/empty虽然两个函数功能有所差异,但在同样情况下推荐使用empty()
  6. isfile/file_exists两个函数的功能有所不同,file_exists既可判断文件是否存在,也可以判断目录是否存在,在同样的情况下推荐使用is_file

文件

  1. 减少文件包含数,减少磁盘IO
  2. 使用完整路径,或者容易转换的相对路径。避免在include_path查找
  3. 文件的代码行数不要超过2000行
  4. require_once/include_once效率低于require/include,需要额外的去查看系统是否已经调用过这个文件,因为它们在一个opcode缓存下的调用非常慢。
  5. 程序执行文件用require/require_once,缓存文件用include/include_onceinclude效率好于require
  6. 优化spl中的文件自动加载机制,参考YII
  7. 类库文件加载,是否考虑类是否已实例化,可考虑采用设计模式之单例模式
  8. 文件读写的并发性

面向对象

  1. 控制实例的创建的数量
  2. 优先使用常量、类常量
  3. 优先使用静态变量,静态属性
  4. 类的结构合理
  5. 面向接口编程
  6. 封装变化点
  7. 依赖于抽象,不依赖于细节
  8. 优先使用静态成员
  9. 类的接口清晰稳定,类的职责单一,类与类的通信合理
  10. 使用常量的好处:编译时解析,没有额外的开销,杂凑表更小,所以内部查找更快,类常量仅存在于特定的【命名空间】,所以杂凑名更短,代码更干净,使除错更方便

字符串

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

运算

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

数组

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

判断

  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. 适时关闭远程资源连接如数据库,ftpsocket等,适时清理这些资源

性能检测工具

  1. Web Server
  2. ab
  3. http_load
  4. xdebug
赞 · 0
评论 (0)

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

标签云

暂无标签