PHP对接口执行效率慢的优化

PHP对接口执行效率慢的优化

造成执行效率低的原因可以由很多方面找原因
  • 从代码层面,代码质量低,执行效率也会有很大影响的。
  • 从硬件方面,服务器配置低,服务器配置是基础,这个跑不动肯定慢。
  • 从数据量方面,查询数据量过多,sql语句过于繁杂,执行缓慢。
服务器

从配置上做提升,对于系统整体的执行效率是相当明显的,这一点没有什么好质疑的,只要有实力,自然就可以多在这方面做提升了。

数据查询

这个查询的优化,涉及sql的优化,或者到数据库的优化,下面有几个简单的优化方案。

  • sql的优化,适当使用链表查询,使用连接(JOIN)来代替子查询,一般大表和多表的情况避免使用JOIN,这种情况下使用JOIN反而达不到简化查询的效果。
  • sql的优化,查询表数据时精确字段名进行查询,避免不必要的字段查询。
  • sql的优化,适当使用主外键和索引,索引字段的查询效率在大表查询的效率对比相当明细。
  • sql的优化,适当使用in查询,适当使用模糊查询。

    ··········

  • 数据库的优化,字段使用合理的字段类型,另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOTNULL,避免空间浪费。
  • 数据库的优化,合理设计表结构。
  • 数据库的优化,合理设计索引,在联表查询或条件筛选中,数据表增加索引后查询的效率会快特别多。

    ··········

代码优化

代码上的优化也是因人而异的,每个人可能编码习惯和风格不同,对于提高代码性能有各自的见解,以下是我的部分看法。

  • foreach合理使用,尽量少在循环中套用循环,在循环次数过多的情况下,非常耗性能。
  • 循环中,尽量避免数据操作,特别是查询操作,在循环次数过多的情况下,多次调用效率很低,可一次获取数据再拼接。
  • 同理,在循环中,避免配置的多次获取,和time()函数方法的调用,这种一次声明就可以重复使用。
  • 在php中,单引号和双引号是有区别的,作为一种习惯字符串我都用单引号,因为它无需编译,对于效率,可能谈不上差异大小,可能就一点点
  • 合理利用在php中的函数,像数组函数就非常丰富,要充分利用,一般不要自己去做他本身就支持的函数方法
  • 可以用上字典的概念,将数组以新索引形式存储起来,我在数据的重组中很常用
  • 根据场景,合理使用缓存可以减少重复的数据查询,提高效率
  • 合理拆分功能,比如一个列表查询,并带有详情查看,可以将此处拆成两个接口实现,在需要时获取数据,减少资源浪费。
    ··········
 
分类: PHP

最新文章

  1. asp.netDataTable导出excel方法(2)
  2. Oracle表连接
  3. FPGA中latency与delay概念的区别
  4. jquery 图片上传本地预览V1.2
  5. Hive UDAF介绍与开发
  6. 为什么Application_BeginRequest会执行两次
  7. JavaEE Tutorials (15) - 对Java持久化API应用使用二级缓存
  8. C++对象模型4--有重写的单继承
  9. Scala Sublime text 3 Build 编译
  10. android 简单粗暴的注解初始化View学习
  11. 将数据库从服务器移到浏览器--indexedDB基本操作封装
  12. HDFS概述(5)————HDFS HA
  13. 如何让div水平居中呢?
  14. javascript 中如何判断是否是JSON格式的字符串
  15. 算法——八皇后问题(eight queen puzzle)之回溯法求解
  16. Unity用Vuforia做AR实现脱卡效果
  17. laravel 项目表单中有csrf_token,但一直报错419错误 解决redis连接错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persi
  18. 各操作系统安装redis
  19. topcoder srm 713 div1
  20. java数组排序(插入排序、冒泡排序、选择排序)与递归 代码示例

热门文章

  1. 由TreeView 如何触发OnSelectedNodeChanged事件想到的与做到的
  2. Adam和学习率衰减(learning learning decay)
  3. vue-cli3.x npm create projectName 报错: Unexpected end of JSON input while parsing near......
  4. 自定义实现一个loghub(或kafka)的动态分片消费者负载均衡?
  5. Android 即时通讯开发小结(二)
  6. Spark学习之路(四)—— RDD常用算子详解
  7. 【设计模式】行为型06命令模式(Command Pattern)
  8. 安装Ruby、多版本Ruby共存、Ruby安装慢问题
  9. 深度优先(DFS)和广度优先(BFS)
  10. 联盟链FISCO BCOS v2.0.0-rc3 发布