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

(0)

相关推荐

  • 重新认识MySQL中的COUNT语句

    在数据库的增删改查操作中,使用最频繁的就是查询操作. 而在所有查询操作中,统计数量操作更是经常被用到. 关于数据库中行数统计,无论是MySQL还是Oracle亦或者是SqlServer,都有一个函数可 ...

  • C++笔试面试准备(整理)

    转载:https://blog.csdn.net/ljh0302/article/details/81098764?ops_request_misc=%257B%2522request%255Fid% ...

  • SQL为什么慢,你心里没数吗?

    在生产环境中,SQL 执行慢是很严重的事件.那么如何定位慢 SQL.慢的原因及如何防患于未然.接下来带着这些问题让我们开启本期之旅! - 思维导图 - 写操作 作为后端开发,日常操作数据库最常用的是写 ...

  • PHP中最基础常握知识

    PHP中最基础常握知识

  • 高性能MySQL【笔记】超详细

    一.MySQL架构与历史 A.并发控制1.共享锁(shared lock,读锁):共享的,相互不阻塞的 2.排他锁(exclusive lock,写锁):排他的,一个写锁会阻塞其他的写锁和读锁 B.事 ...

  • TI FAST算法学习笔记之“低速高性能电机控制”

    无位置传感器电机控制主要应用于绝大多数时间运行在中.高速的场合,这是因为大多数无位置电机控制技术都需要反电势信号,而反电势信号会有最低频率限制,太低的电机转速会影响到反电势信号的捕获,进而影响转子位置 ...

  • 超级干货:高瓴资本张磊的投资笔记和思维导图

    超级干货:高瓴资本张磊的投资笔记和思维导图

  • 一则公报案例学习笔记:对修改股东出资期限应否适用资本多数决规则的思考|审判研究

    一.问题的提出 2021年第3期<最高人民法院公报案例>刊登了鸿大(上海)投资管理有限公司与姚锦城公司决议纠纷上诉案,裁判要旨为:"公司股东滥用控股地位,以多数决方式通过修改出资 ...

  • 725分高考状元唐楚玥记笔记的“三字”方法,以及里面藏着的学习秘诀

    你背不下来的书,总有人能背下来:你做不出来的题,总有人能做出来:你不爱做的笔记,总有人把它做到了极致. 不要小看记笔记,同样是一手漂亮的笔记,效果可能千差万别. 湖北725分高考状元唐楚玥的笔记就做到 ...

  • 72条经方笔记,助你精细辩证(建议收藏)

    导读:前人总结的经方运用思路,供大家参考. 1.温病不能发汗,又不能吃泻药,更不能用火攻,只能用白虎汤.真正的温病实证(表现为说胡话,大便干,下同时用强壮滋阴解热药活不用生地用人参也可),可用大量的麦 ...

  • JAVA多线程学习笔记整理

    多线程: 三种创建方法 继承Thread类,以线程运行内容重写run方法,创建Thread对象并用start方法启动该线程. (匿名内部类) (Lambda表达式) 实现Runable接口,以线程运行 ...

  • 高建忠.读方用方笔记(十)临证谈理中丸

    我们上一节谈了理中丸的第一功效,就是止吐泻的,那么这一节我们来谈理中丸方中何为君药?我们先来看看原方: 理中丸方:人参,干姜,炙甘草,白术各三两.上四味,捣筛,蜜和为丸,如鸡子黄许大,以沸汤数合,和一 ...

  • 周哥学习笔记(2021.5.8)

    心理界限存在的意义,正是为了帮助人们控制情绪进入的量,不至于太过冷漠或太过投入,让我们保持一个合适的距离与外界互动. 人没有办法只通过吸收变得更美好和丰富,它必须通过大胆的碰撞和创造.如果不能保持足够 ...