想起来记录一下自己对PHP的优化思路

针对Nginx和 PHP-FPM进行优化

首先应该分为代码层面、配置层面、架构层面

代码层面 参见了https://segmentfault.com/a/1190000009442044 这篇文章

1.减少PHP代码量

显而易见,PHP作为解释性语言,每次执行都要解析编译到OPCODE,如果代码量越大,需要从PHP代码解析到OPCODE的工作量就越大,这时,可以尝试尽量多的采用系统内置函数。PHP系统对String Array File等操作函数很多,其底层实现为C,自然要比我们写PHP代码要来的快。

2.错误抑制符号 @ 尽量不用,会影响性能

3.少用正则表达式,PHP自带String 相关函数功能很强大,类似strstr() strrchr() strpos() strrpos()等,因为正则表达式会导致过多的回溯,比较占用CPU。

4.避免在循环内做计算

ZendEngine也许(TODO:使用VLD扩展去论证)不够聪明,循环内每次循环都会做相应的计算。

eg:

// 这会导致每次循环都计算count,因此效率会低一些

5.类内方法,非必需面向对象,定义为Static会提升性能

6.误区:require、include等函数在使用带变量的引入其他脚本,会导致性能缺失嘛? 不会,realpath _cache 了解一下

7.switch性能优于if elseif  因为switch在比较的时候,底层会形成类似HashMap的结构,以O(1)的效率找到执行分支,if不会。

8.非必需情况下,少使用全局变量。

9.$i++会比$++i慢一些,但是ZendEngine会优化掉。

10.foreach效率更高

配置层面 (自己的认识还比较浅薄)

1. php-fpm 运行模式 https://blog.csdn.net/baidu_21154279/article/details/54929664

如果内存大,使用静态模式,pm.workers数量为 内存大小 / 30M 避免线程开闭导致的开销

如果内存小,使用动态模式 pm workers 数量为 内存大小 / 20M

动态模式能更好的规避内存泄露相关问题,例如exec执行某些指令失败,可以考虑重启FPM(USR2)

2.php OPCACHE

使用Opcache扩展能更好的提升性能,其默认缓存最小粒度当然是脚本文件,缓存根据是脚本的mtime ,因此注意rsync带来的坑,默认缓存文件个数为 2k, 默认缓存时间1s 后自动检查更新。

3.php realpath cache

使用realpath cache能更好的令PHP进行require include等操作。

4.php-fpm 与 nginx的沟通模式

默认使用TCP socket进行沟通,如果PHP和nginx是1:1的关系,那么不妨使用Unix socket ,这样能减少TCP协议相关压力,避免回环,提升性能,但是可能稳定性会稍微降低一些。

5.数据库presistent持久链接配置启动,可以实现长连接,提升性能。

架构层面

1. 使用Cache,类似Memcache,Redis等,减少数据库压力(注意缓存穿透时的回原压力)

2. 使用MQ进行削峰,异步调度总能性能更加

3.接入层负载均衡,可以根据不同的配置,分发不同的权重等

4.DB读写分离

php代码优化思路,PHP优化思路 Web程序 - 贪吃蛇学院-专业IT技术平台相关推荐

  1. php 5.6 iis7,IIS7 配置 PHP5.6 Web程序 - 贪吃蛇学院-专业IT技术平台

    环境: 操作系统:Win7 & 10 (x64) 中文专业版 PHP       :V5.6 首先添加IIS. 控制面板-〉程序-〉打开或关闭Windows功能 1. 勾选"Inte ...

  2. sscom 中文显示 乱码_SSM框架:解决后台传数据到前台中文乱码问题,使用@ResponseBody返回json 中文乱码 Web程序 - 贪吃蛇学院-专业IT技术平台...

    场景: 在实际运用场景中,当前台发起请求后,我们需要从后台返回数据给前台,这时,如果返回的数据中包含中文,则经常会出现在后台查询出来都是好好,但是传输回去就莫名的乱码了,而且,我们明明已经在 web. ...

  3. 贪吃蛇程序 php,php,函数 Web程序 - 贪吃蛇学院-专业IT技术平台

    1.函数定义: 函数就是将一些重复使用到的功能写在一个独立的代码块中,在需要时单独调用.创建函数的基本语法格式为: function fun_name($str1,$str2,,,,$strn){ f ...

  4. 东方通如何查看版本linux命令,东方通tongweb linux安装 Web程序 - 贪吃蛇学院-专业IT技术平台...

    1.把安装的bin文件和license.dat文件放到/opt目录下 2.运行$sh Install_TW5.0.0.0_Standard_Linux.bin -i console 命令在 Linux ...

  5. bootstrapinput传参数_bootstrap-fileinput组件在上传时传递额外参数 Web程序 - 贪吃蛇学院-专业IT技术平台...

    解决方法 关键的配置参数是uploadExtraData 具体的代码如下: //获得额外参数的方法 fodderType = function() { return $("#fodderTy ...

  6. php点击字切换验证码,PHP生成图片验证码、点击切换实例 Web程序 - 贪吃蛇学院-专业IT技术平台...

    http://www.jb51.net/article/51506.htm 现在让我们来看下 PHP 代码 复制代码代码如下: session_start(); function random($le ...

  7. php xml转化为html,php将xml文件转换为html Web程序 - 贪吃蛇学院-专业IT技术平台

    test.xml: <?xml version="1.0" encoding="ISO-8859-1"?> Empire Burlesque Bob ...

  8. 贪吃蛇程序 php,php Web程序 - 贪吃蛇学院-专业IT技术平台

    $link = mysql_connect('localhost','root','root'); $db = mysql_select_db('ymt'); $a = mysql_query('se ...

  9. php正则表达式程序,php正则表达式 Web程序 - 贪吃蛇学院-专业IT技术平台

    行定位符(^与$) 行定位符是用来描述字符串的边界."$"表示行结尾"^"表示行开始如"^de",表示以de开头的字符串 "de$ ...

最新文章

  1. 解决Chrome中UEditor插入图片的选择框加载过慢问题
  2. android device monitor命令行窗口在哪里_Vulkan在Android使用Compute shader
  3. 【转】ASP.NET内幕 - IIS处理模型
  4. Windows下Qt Creator设置IDE菜单字体样式
  5. zabbix4.2学习笔记系列
  6. 《go 语言程序设计》读书笔记(六)Goroutine与系统线程的区别
  7. Shell命令-系统信息及显示之free、cal
  8. [转]wxParse-微信小程序富文本解析组件
  9. Linux C语言解析 yaml,c – 用yaml cpp解析yaml
  10. cwntos使用不了php,centos系统不能使用yum命令怎么解决
  11. linkin大话设计模式--抽象工厂
  12. 计算机图形学——Bresenham画线算法
  13. java 项目开发日报_CSDN日报191114:Java开发干货分享
  14. 通过Cadence学拉扎维的第2天-mos的IV曲线、体效应
  15. Spider和CrawlSpider的源码分析
  16. 关于华为,一次不做评价的陈述
  17. 超像素(slic算法)特征提取(颜色,纹理)——个人梳理
  18. 【数据库】数据库的基础知识
  19. projectManager
  20. 使用O2OA二次开发搭建企业办公平台(十八)流程打印表单设置

热门文章

  1. FileZilla FTP Server FTP over TLS settings 设置FTP服务器证书启用FTPS 【转载】
  2. design pattern : Facade
  3. TensorFlow搭建CNN实现时间序列预测(风速预测)
  4. timer cancel_Java Timer cancel()方法与示例
  5. 国产高性能车载应用DCDC电源芯片SCT2432、SCT2432Q
  6. 陷波器的离散化及仿真验证
  7. 大三了#我的两年编程生活
  8. 【开源】港中文多媒体实验室开源目标跟踪工具箱MMTracking
  9. 你说的H5到底是什么,跟Html有什么关系,能吃吗
  10. 计算机系古生物学,超级计算机模拟生命起源