设为首页 收藏本站
查看: 528|回复: 0

[经验分享] PHP开发规范之性能优化分享

[复制链接]

尚未签到

发表于 2018-12-21 10:19:16 | 显示全部楼层 |阅读模式
  一、规范说明
  性能是网站运行是否良好的关键因素,网站的性能与效率影响着公司的运营成本及长远发展,编写出高质高效的代码是我们每个开发人员必备的素质,也是我们良好的职业素养。
  二、影响性能的因素
  A、 商业需求
  需求合理性
  需求与系统的整合
  需求所带来的商业利益是否与需求开发的成本成正比
  需求所带来的风险
  B、 Web 服务器
  并发处理能力
  高负载的能力
  负载均衡的能力
  动态内容与静态内容的处理能力
  Web 服务器部署
  C、 DataBase 服务器
  并发访问
  数据库服务器的部署
  数据库的 shema 架构与的表设计是否合理
  数据检索
  D、 操作系统
  E、 客户端请求
  F、 程序/语言
  三、分析性能的指标
  程序的运行时间 2
  程序的运行所消耗的内存
  单位时间内的并行处理
  磁盘 IO 的处理
  四、优化性能的目标
  快速、并发、资源消耗低(内存、磁盘 IO、CPU 负载)
  五、优化性能的原则
  服务器配配置最优化
  服务器部署合理化
  商业需求合理并与产出的商业价值成正比
  架构可用、可维护、可扩展
  程序的正确性、简单性、逻辑的合理性。
  不断的分析性能的的瓶颈
  不断的重构已有的代码
  优化的优先级:program->database->web sersver->os->client
  六、优化
  A、 程序优化
  变量
  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);$ipreg_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,如下 :
  if ($a == 1) {
  $b = 2;
  }可选择为($a == 1) && $b = 2;
  缓存
  1、 使用php加速器,缓冲opcode
  2、 例用memcache/nosql
  3、 使用内存数据库、
  4、 使用文件缓存
  5、 缓冲功能 5
  其它
  1、 少用@符号,严重影响性能
  2、 适时关闭远程资源连接如数据库,ftp、socket等,适时的清理这些资源
  B、 数据库优化
  1、 合理的商业需情
  2、 数据库 schema 架构优化
  3、 垂直与水平分库分表
  4、 索引优化,查询优化
  5、 第三方开源检索工具(sphinx)
  6、 主从数据库服务器的使用。
  C、 Web 服器优化(暂未整理,有相应的 Web 服务器优化手册)
  D、 操作系统优化(暂未整理,有相应的 OS 优化手册)
  E、 前端优化
  1、合理的 html 结构
  2、合理 html 与css 的同时,考虑 Css 设计合理,减少 http 请求
  3、合理 html 与javascript 的同时,考虑拆分是否合理,减少 http 请求
  4、优化 javascript 代码,让用户有良好的体验
  5、根据 http 协议,优化高并发请求
  七、性能检测工具
  Web Server
  ab
  http_load
  PHP
  apd
  xdebug
  Mysql
  explain
  profiler


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-653913-1-1.html 上篇帖子: LAMP 啟動 WWW 服務與測試 PHP 模組 下篇帖子: php相册系统
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表