高性能PHP7【笔记】

一、搭建环境

二、PHP7新特性

A.OOP特性

1.类型声明

  • PHP7支持的形参类型声明的类型有整型、浮点型、字符串型、布尔类型,可以用在函数形参及对象的方法形参上
  • 返回类型声明使用了data-type语法,对于形参类型声明与返回类型声明一样的情况是无影响的,这样就能区分开它们各自的返回数据类型了
  • 使用类型声明有一个明显的好处,即它可以让函数、方法的形参与返回值有所预期,避免出现不必要的数据传递,从而造成错误

2.命名空间与use关键字批量声明

  • 非混合模式的use声明:use 命名空间\{类1,类2},use function 命名空间\(方法1,方法2),use const 命名空间\{常量1,常量2}
  • 混合模式的use声明:use 命名空间\{类1,类2,function 方法1,function 方法2,const 常量1,const 常量2}
  • 复合模式的use声明:use 命名空间\{命名空间1\类1,命名空间2\类2}

3.匿名类

  • 匿名类的声明与使用是同时进行的,具备其他类所具备的所有功能,差别在于匿名类没有类名
  • 匿名类的一次性小任务代码流程对性能提升帮助很大,不必将整个类写完后再使用它
  • 语法:new class(argument){definition};

4.Throwable接口

  • PHP7提供了一种全局的接口,使得所有的类都可以基于此使用throw关键字
  • 从PHP7开始,任何完事程序或一部分程序中的Fatal错误都可以被截获
  • 大多数的Fatal错误都会抛出一个error实例,类似于截获异常,error实例可以被try/catch截获

B.新的操作符

1.太空船操作符(<=>)

  • 在比较变量时非常有用,包括数值(字符串型、整型、浮点型等)、数组、对象
  • 当符号两边相等时返回0
  • 当符号右边大于符号左边时返回-1
  • 当符号左边大于符号右边时返回1
  • 可以用于书写清晰易读的用于usort、uasort、uksort的回调函数

2.null合并运算符(??)

  • 用于代替isset(x)?x:’’;

3.统一变量语法

C.其他特性和变更

1.常量数组:const STORES = [‘en’, ’fr’, ‘ar’]; php7:define(’STORES’,[‘en’, ’fr’, ‘ar’]);

2.Switch中的多个default默认值,在php7中会产生Fatal级别的错误

3.Session_start函数中的选项数组:可以在调用session_start([...])传递参数选项数组,这些设置信息将覆盖php.ini中的session配置

4.Unserialize函数引入过滤器

三、PHP7应用性能提升

A.HTTP Server优化

1.缓存静态文件

2.HTTP持久链接:表示一条TCP/IP链接上承载着多个上下行请求

3.GZIP压缩

4.PHP独立部署服务

5.关闭不用的模块

B.内容分发网络(CDN)

1.CDN网络通常服务于媒体文件

C.CSS与JavaScript优化

1.合并:将所有CSS、JS文件进行合并

2.缩小:删除空行、注释和额外空格

3.Minify:是一组完全使用PHP编写的库,支持CSS、JavaScript文件的合并与缩小,代码是面向对象和命名空间的

4.Grunt:是一个JavaScript任务运行器,能够将某些重复的任务自动化,避免反复工作

5..全页缓存

6.Varnish:开源的Web应用程序加速器

D.基础设施

1.Web服务器

2.数据库服务器

3.负载均衡(LB)

  • 负载均衡器(LB),根据每个Web服务器上的负载情况,将外网流量以一定规则分发给Web服务器
  • HAProxy,会检查每个Web服务器的运行状况

四、提升数据库性能

A.MySQL

1.查询缓存

  • SHOW VARIABLES LIKE ‘hav_query_cache’;
  • my.cnf文件中的配置参数:query_cache_type,query_cache_size,query_cache_limit

2.存储引擎

  • innodb_buffer_pool_size:系统内存的50%-80%
  • innodb_buffer_pool_instances:每1GBinnodb_buffer_pool_size设置1,如16GB的innodb_buffer_pool_size则设置为16
  • innodb_log_file_size:1-4GB之间

3.Percona Server - MySQL的fork

  • 对MySQL完全兼容且提供加强功能,可完全代替MySQL并能提供更好的文档、性能、扩展性
  • 使用改进的Innodb,XtraDB引擎

4.MySQL性能监控工具

  • phpMyAdmin
  • Percona工具箱:pt-query-digest生成查询报告,pt-duplicate-key-checker找出重复索引和外键,pt-variable-advisor输出MySQL的配置信息以及对于每次查询的建议

B.Redis键值缓存存储

C.Memcached键值缓存存储

五、调试和分析

A.Xdebug

六、PHP应用的压力/负载测试

A.Apache JMeter

B.ApacheBench(ab)

C.Siege

七、PHP编程最佳实践

A.代码风格

1.类名中每个单词的首字母必须大写,左大括号应该在类名后新起一行,右大括号应该在类结束后新起一行

2.类的方法和函数命名应该是驼峰式的,参数和紧跟着的逗号之间不应有空格

3.命名空间的声明之后应该空一行

4.Visibility类的所有属性都应该明确指出其可见性并且属性名应该是驼峰式的

5.要是有abstract关键字的话,则一定是在class关键字之前 的,final关键字则应该在方法可见性之前,static关键字是在方法可见性之后的

6.所有PHP关键字都应该小写,包括true和false,常量应该都大写

7.对于所有控制结构语句,控制结构关键词后都应该有空格,表达 式和外面的括号之间不应该有空格,

B.测试驱动开发

1.PHPUnit

C.部署和持续集成(CI)

1.PHPCI

2.Jenkins

3.Travis CI

https://github.com/zhangyue0503/php/tree/master/learningphp7highperformance/2

原文发布于微信公众号 - 硬核项目经理(fullstackpm)

原文发表时间:2018-04-16

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

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券