视频链接,感兴趣的可以去看看,对我来说耳目一新。

http://www.imooc.com/learn/205

什么情况下遇到PHP性能问题

1 :PHP语法使用不恰当

2 :使用了PHP语言他不擅长做的事情

3 :用PHP语言连接的服务不给力

4 :PHP自身的短板

5 :未知的问题

PHP性能问题,占整个项目性能问题一般占30%,不会超过50%。
要从全局去考虑全局的性能问题

PHP性能问题解决方向 (从1~5的顺序,操作简单,见效快排序)
A . PHP语言级的性能优化 :日常语法方法的优化 特点:简单高效很快见到效果

B . PHP周边问题的性能优化 :webserver,mysql

C . PHP语言自身的分析和优化 :PHP底层C语言逻辑的优化

Apache Benchmark 简称ab
ab是由Apache提供的压力测试软件。安装apache服务器时会自带压测软件

使用 ./ab -n1000 -c100 http://www.baidu.com
-n请求数 -c并发数 url目标

了解 :ab 返回结果的参数
1> Requests per second 每秒请求数 (优化目标 每秒的请求数尽可能多)
2> Time per request 响应一个请求耗时 (优化目标 响应一个请求尽可能少)

-------------------------------------------------------------------------------------

【PHP语言级性能优化】
优化点:少些php代码,多用PHP自身能力,多用PHP自身的

性能问题:自写代码冗余较多,可读性不佳,并且性能低

php代码写的越长长执行效果就会越差,多用php自身的函数等

为什么性能低? :PHP 代码需要编译为C语言,C语言又会编译成汇编语言(机器语言),这里每

                     一个过程都会请求一遍,开销很大。尤其是访问量大的时候,每次都会编译一遍。所以要尽量减少代

                    码

好的方法:多使用PHP内置的变量、常量、函数

原生PHP 和 自己写一段实现一个同样的功能,性能差异。有的可能会提高好几倍。
         为什么自己实现的会慢呢? PHP代码如何再linux上执行?
         *.php 通过zend引擎逐行扫描分析(Scanner),
         保存成zend引擎自己能识别的语法(Exprs),
         这些zend引擎能识别的语法,再解析(Parser)成Opcodes。
         Opcodes是最终要拿去执行的机器代码 。执行,然后输出。

逐行扫描,转码,解析成Opcodes,然后输出
扫描时间少了,zend转码时间会更快,解析Opcodes也会更快。

缓存服务都是缓存的Opcodes,就不用扫描和解析了,当然就更更快了。

【PHP内置函数的性能优劣】
1。情况描述: PHP内置函数,之间依然存在快慢差异。使用快的函数。

2。好的建议:尽量少用魔法函数。
           为什么魔法函数性能低:为了给程序员省事,php语言为你做了很多
           linux time函数 可以直接测试程序的耗时情况 魔法函数举例:__get();
           可以不用尽量不用,如果必须要用的时候再用。
3。不使用@ 错误抑制符
    机制:再代码开始前、结束后,增加Opcode。
         查看一下Opcode执行码。工具:vld PHP扩展 主要作用就是把opcode 演示出来。
         php -dvld.active=1 -dvld.execute=0 at.php 回打印出opcode 。
         结果用@ 会多2行代码,多操作逻辑,有多些开销。 可以用 try throw 这种。
【合理使用内存】
     情况描述:php有内存回收机制保底,但也要小心使用内存
     建议:利用unset()及时释放不使用的内存(注:unset出现注销不掉的情况,自己查资料)
【尽量少的使用正则表达式】
     情况描述:正则表达式性能低,因为正则表达式回溯开销较大
      好的建议:利用字符串处理函数,实现相同的逻辑
【避免循环内做运算】
     情况描述:循环内的计算式会被重复计算
     例 for($i=0;$i<strlen($str);$i++) 每一次for循环都会进行计算strlen
【减少计算密集型业务】
    情况描述:PHP不适合密集型运算场景
    为什么:
         比如不适合大批量日志分析,或者大批量数据处理。
         php语言特性决定了PHP不适合做大数据运算
         php所有处理都需要转换成C语言,与C相比,C更好。
         php还有环境问题,还有语言特性。额外开销比C大很多。变量寄存等。。
    PHP适合什么?
         适合衔接webserver与后端服务、UI呈现。(就是接口,简单数据处理,和套页面)
【务必使用带引号字符串做键值】
    情况描述:php会将没有引号的键值检查一遍是不是常量,产生查询常量的开销
---------------------------------------------------------------------------------------
PHP周边问题的性能优化
PHP周边都有什么
1.linux环境
2. 硬盘,文件存储,php读写
3.数据库
4.缓存 缓存是基于内存的
5.网络
抓大头去优化,就是先从大的方向去做优化

【减少文件类操作】
         常见PHP场景的开销次序:读写磁盘、读写数据库、读写内存、读写网络数据
         读写内存 < 读写数据库 < 读写磁盘 < 读写网络数据
【减少php发起网络请求】
        优化网络请求
        网络请求的坑:1对方接口的不确定因素 2 网络稳定性
        如何优化网络请求

1设置超时时间 : 建议值
                  a)连接超时 200ms 这是上限,最多也不能超过这个时间
                  b)读超时 800ms 这个看具体情况
                  c)写超时 500ms 建议不要超过500ms

2、将串行请求并行化
                  a)使用curl_multi_*() 返回时间是看用时最长的那个请求
                  b)使用swoole扩展 通过C来进行并行化。推荐使用
【压缩PHP接口输出】
        如果用php做接口如何更高效的输出
        如何压缩 : 使用Gzip
        压缩输出的利弊:
             利:利于数据输出,client能更快获取数据
             弊:额外的CPU开销。如果请求大,肯能会有问题
        gzip如果数据量小于几十K的时候效果并不理想。如果大于100k,压缩就有效果。
【缓存重复计算内容】
       什么情况下做输出内容缓存 : 固定重复请求的数据做缓存。
【重叠时间窗口思想】 串行变并行
       如果后一个请求不强依赖于前一个返回值。就可以变成并行,降低总体时间消耗
【旁路方案】 也是重叠时间窗口思想

------------------------------------------------------------------------------
【PHP性能问题的具体分析】
工具: XHPorf(源自fackbook的PHP性能分析工具) 如何安装,网上去找教程
实践:通过分析wordpress程序,做优化。课程6-1具体实例分析
php --ri 扩展名 查看php是否支持某个扩展
linux 下搜索文件中具体代码在哪个文件
grep 'xxx' ./ -r

其他工具
ab - 压力测试
vld - opcode代码分析
-----------------------------------------------------------------------------
PHP性能瓶颈解决方法
Opcode Cache :PHP扩展APC就是做Opcode缓存用的
Apc 可能不常用了,可以再pecl点caching。查看php缓存的扩展
pecl 是官方经过验证的PHP扩展
扩展实现:通过PHP扩展代替原PHP代码中高频的逻辑
Runtime优化:HHVM (phpng也许更优于HHVM)

慕课网 -- 性能优化之PHP优化总结笔记的更多相关文章

  1. 慕课网 性能优化之MySQL优化--- max 和count的性能优化

    注:在执行SQL语句前加上explain可以查看MySQL的执行计划 数据库:MySQL官方提供的sakila数据库 Max优化: 例如:查询最后支付时间 explain select max(pay ...

  2. 慕课网-前端JavaScrpt基础面试技巧-学习笔记

    章节目录: JS基础知识(上)--讲解 JS 基础语法相关的面试题,分析原理以及解答方法.这一章节讲解了基础知识的第一部分:变量的类型和计算.以及JS "三座大山" -- 原型.作 ...

  3. 慕课网:剑指Java面试-Offer直通车视频课程

    慕课网:剑指Java面试-Offer直通车视频课程,一共有10个章节. 目录结构如下: 目录:/2020036-慕课网:剑指Java面试-Offer直通车 [6G] ┣━━第10章 Java常用类库与 ...

  4. 性能优化之MySQL优化(慕课)

    MySQL数据库优化 1-1MySQL优化简介 数据库优化的目的 避免出现页面访问错误 由于数据库连接timeout产生5XX错误 由于慢查询造成页面无法加载 由于阻塞造成数据无法提交 增加数据库的稳 ...

  5. Web性能优化:图片优化

    程序员都是懒孩子,想直接看自动优化的点:传送门 我自己的Blog:http://cabbit.me/web-image-optimization/ HTTP Archieve有个统计,图片内容已经占到 ...

  6. Web前端性能优化之图片优化

    我自己的Blog:http://blog.cabbit.me/web-image-optimization/ HTTP Archieve有个统计,图片内容已经占到了互联网内容总量的62%,也就是说超过 ...

  7. Web 性能优化: 图片优化让网站大小减少 62%

    摘要: 压缩各种格式的图片. 原文:Web 性能优化: 图片优化让网站大小减少 62% 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这是 Web 性能优化的第二篇,上一篇在下面看点 ...

  8. Android性能优化之布局优化

    最新最准确内容建议直接访问原文:Android性能优化之布局优化 本文为Android性能优化的第二篇——布局优化,主要介绍使用抽象布局标签(include, viewstub, merge).去除不 ...

  9. Web服务器性能监控分析与优化

    Web服务器性能监控分析与优化 http://www.docin.com/p-759040698.html

随机推荐

  1. 高级bash脚本编程(三)

    高级bash脚本编程 知识点 compound 和 comparison -a 逻辑与 exp1 -a exp2 如果表达式 exp1 和 exp2 都为真的话,那么结果为真. -o 逻辑或 exp1 ...

  2. 205315Java实验二实验报告

    实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步骤 (一)单元测试 用程序解决问题时,要会写三种码: ...

  3. Spring JPA中OneToOne和OneToMany用法

    Spring工程中,创建实体对象时,可以通过JPA的@Entity标识实体与数据库表的对应关系,@Column标识数据库字段.其中还有标识两个实体间关系的注解:@OneToOne.@OneToMany ...

  4. jz2440-uboot-201204版本移植【学习笔记】【原创】

    平台:jz2440 作者:庄泽彬(欢迎转载,请注明作者) 说明:韦东山二期视频学习笔记 交叉编译工具:arm-linux-gcc (GCC)4.3.2 PC环境:ubuntu18.04 一.uboot ...

  5. BZOJ 4569 【SCOI2016】 萌萌哒

    题目链接:萌萌哒 我先不吐槽题目名……这道题的并查集好像我们考过……既然那道题我没写就来把这道题写了吧(雾 这道题由于合并操作只有\(m\)次,那么很显然的一个想法就是把建一棵线段树类似物,然后每次在 ...

  6. python 返回系统名称,系统平台,系统版本

    import platform import os print(os.name) print(platform.system()) print(platform.release())

  7. 解决Error: ENOENT: no such file or directory, scandir 安装node-sass报错

    新项目开发需要安装依赖,但是安装完之后通过gulp运行项目,产生了一下的报错: 解决方案是执行一些方法: npm rebuild node-sass 可是有时就是网络问题导致上面命令安装失败,查下失败 ...

  8. Android反射机制:手把手教你实现反射

    什么是反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称 ...

  9. 部分函数依赖 && 完全函数依赖

    部分函数依赖:若x->y 并且,存在X的真子集x1,使得x1->y,则 y部分依赖于x. 完全函数依赖:若x->y并且,对于x的任何一个真子集x1,都不存在x1->y,则称y完 ...

  10. 知识梳理——CSS篇

    css引入方法 内嵌 <head> <meta charset="UTF-8"> <title>Document</title> & ...