专栏首页沈唁志如何优化PHP性能呢?PHP性能优化总结

如何优化PHP性能呢?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. 常量与函数同时能干一件事,优先使用常量。
  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 同理

八、数组

  1. 多维数组尽量不要循环嵌套赋值;
  2. 使用$array[‘name’]方式访问数组,禁止$array[name]/$array[“name”]

九、判断(重要)

  1. 逻辑判断请优先使用 switch 的方式,对于业务逻辑相对较多的情况请选择 if/else,提高代码的可读性
  2. 尽量控制 if/else 判断的个数,如果太多请考虑功能优化或代码优化
  3. 尽量使用恒等用于比较判断,恒等的效率高于等于,而且还能避免一些类型强制转换的错误
  4. if/else 与 _&&,单条语句判断请选择&&的形式, &&的效率高于 if/else

十、缓存

  1. 使用 php 加速器,缓冲 opcode
  2. 例用 memcache/nosql
  3. 使用内存数据库、
  4. 使用文件缓存
  5. 缓冲功能

十一、其它

  1. 少用@符号,严重影响性能
  2. 适时关闭远程资源连接如数据库,ftp、socket 等,适时的清理这些资源

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

  1. 合理的商业需情
  2. 数据库 schema 架构优化
  3. 垂直与水平分库分表
  4. 索引优化,查询优化
  5. 第三方开源检索工具(sphinx)
  6. 主从数据库服务器的使用。

十三、 前端优化

  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

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:如何优化PHP性能呢?PHP性能优化总结

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CMD命令一键查看连接过的WIFI密码信息

    沈唁
  • HTTPS全面普及的时代来临,SSL证书刻不容缓

    沈唁
  • WordPress插件开发教程二:创建插件菜单和插件设置页面

    如果我们的插件设置很简单,只需一个或两个参数的时候,可以考虑添加到设置->常规的页面中,这样就无须再新增页面了

    沈唁
  • 浅析互信息与特征选择

    那么什么是互信息呢?变量x与变量y之间的互信息,可以用来衡量已知变量x时变量y的不确定性减少的程度,同样的,也可以衡量已知变量y时变量x的不确定性减少的程度。

    用户1908973
  • C - 基础总结

    xx_Cc
  • 【临床研究】一个你无法逃避的问题:多元回归分析中的变量筛选

    临床模型研究,说到底是做一个模型,那么模型应该如何纳入自变量,纳入哪些自变量,这都是至关重要的问题。线性回归,逻辑回归和Cox比例风险回归模型是被广泛使用的多元...

    用户6317549
  • shell脚本应用的基本概念

    在shell脚本中,#表示注释,编写好的shell脚本可以通过“./脚本名”的方式执行脚本,但是需要文件本身具有x权限,还可以通过内部命令“source”或者“...

    小手冰凉
  • (21)Bash用户自定义变量

    变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它放在一个变量中。每个变量有一个名字,所以很容易...

    生信real
  • VBA程序的变量和常量

    大家好,在本节就主要介绍变量和常量,主要掌握声明变量和变量赋值,变量的作用域和存活期需要理解。

    无言之月
  • 基本一

    1.extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行...

扫码关注云+社区

领取腾讯云代金券