高性能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