用PHP的码农应该都知道,PHP7版本做了比较大的改动。PHP 性能一直是一个大问题,无论使用多么强悍的机器,PHP 都会存在一定的瓶颈。为了解决PHP的性能问题,PHP 7已经完全基于PHPNG进行重写。PHP7 相对以前版本性能提升了 3 倍左右。最近读了《高性能PHP7》,下面读完书的总结。
书中介绍了如何搭建不同的开发环境,其中包括Nginx、PHP7、运行在Windows上的 Percona Server(强化版的 MySQL 数据库)、多种的Linux发行版,以及安装Vagrant虚拟机。
2 PHP 7新特性
新增支持类型声明,包括:形参、返回值。
新增支持一个 use 导入同命名空间下的多个类、函数和常量。
新增支持匿名类。
不推荐使用老式构造函数,建议 __construct 代替。
强化异常类,包括 Fatal 级别的错误都可以被截获。
新增太空飞船操作符(<=>)。
新增 null 合并运算符(??)。
规范变量语法,如 $$first['name']; 推荐改为 ${$first['name']}。
新增支持 define 定义常量数组。
不再支持在switch语句拥有多个default默认值。
新增支持使用session_start()函数传入参数修改配置。
Unserialize函数引入过滤器。
3 PHP 7应用性能提升
3.1 HTTP Server 的选择
Apache:完整,稳定。每一个请求都由一个线程或进程处理,导致开销大,高并发情况下其性能低下的问题凸显。
Nginx:轻量,异步。 由于请求异步处理,每个进程可以处理数千个连接,因此可以使用很少的进程来承载高并发流量。
3.2 HTTP Server 的优化
修改 Server 配置开启缓存静态文件,将静态文件(如 img\css\js 资源)缓存到客户端。
修改 Server 配置开启 HTTP Keep-alive 持久链接,以往每次请求都需要三次握手建立链接,Keep-alive 技术在建立连接之后不需再产生握手环节,避免开销。
修改 Server 配置开启 GZIP 压缩 ,将网络中传输的内容进行压缩之后再传递可以有效地减轻传输负担。
对于 apache ,将 php 模块独立部署,使得 apache 只关注 http 请求连接。
Apache 与 Nginx 都有许多内部默认携带的模块,可以选择剔除不用的的模块。
服务器都需要占用必要资源如cpu/内存等,可通过修改配置规定占用资源数量。
使用 CDN(内容分发网络)可就近加载静态资源,小站可选择加入七牛云、阿里云等平台。
将多个 css/js 文件合并成一个实现减少请求数量,压缩 css/js 文件实现减轻传输负担。
将数据缓存在服务器端,可使用 Varnish 或 Redis 等服务器实现。
高并发时可搭建 负载均衡(LB)服务器减轻负载,使得所有请求都只到达 LB 服务器,再由 LB 将请求使用内网方式分别分发到其它 Web 节点服务器,获取数据并返回。(本书介绍的是 HAProxy负载均衡 的搭建,除此之外比较流行的还有 LVS、Nginx 反向代理方式)。
4 提升数据库性能
修改配置开启查询缓存(Query Caching),使同样的 SELECT 查询发生时,MySQL 直接从内存中直接取出结果。
选择合适的存储引擎,目前使用最广泛的是 MyISAM 和 InnoDB。
使用 Percona 代替 MySQL 数据库,Percona 由 MySQL 衍生而来,支持MySQL 的所有特性,并在此基础上拥有更多的功能和更好的性能。
MySQL性能监控,可借助 phpMyAdmin 提供的一些可视化监控工具。
搭建 Percona XtraDB 集群环境,配置和管理多台数据库服务器,数据库之间使用二进制日志来互相通信。
使用 Redis 或 Memcached 作为数据库缓存减轻数据库负担。
5 调试和分析
开启Xdebug 扩展,获取详细的报错信息。
安装 Sublime Text 的 xdebug 插件实现断点调试。
配置 Eclipse 来使用 Xdebug 调试。
配置开启 Xdebug 分析器,从而获取应用中每个运行脚本和任务的开销信息。
另一款调试工具 PHP DebugBar 。
6 PHP应用的压力/负载测试
6.1 Apache JMeter
ApacheBench(ab) 是一个命令行工具,安装 Apache 时默认也会安装ab。
-n:发送测试请求的总数目。
-c:并发量,即一次同时发出的请求数目。
6.3 Siege
6.4 实际项目中应用程序的压力测试
Magento运行在PHP 7上比在PHP 5.6上快241%,比在PHP 5.5上快320%,PHP 7相对于PHP 5.6和 PHP 5.5有着巨大的性能提升。
WordPress运行在PHP 7上比在PHP 5.6上快135%,比在PHP 5.5上快182%。
Drupal 8运行在PHP 7上比在PHP 5.6上快178%,比在PHP 5.5上快205%。
可见,使用PHP 7总能获得比使用PHP 5.6和PHP 5.5更好的性能。
7 PHP编程最佳实践
设计模式不是一个工具,它仅是描述如何解决一类特定问题 的说明或模版,一个设计模式可以解决一类特定的问题。如 MVC 模式、单例模式、工厂模式等。
小编觉得《高性能PHP 7》相对那些 入门到精通 、 n 天学会php 系列的书籍,这一本IT技术类书籍还是挺不错的。.
发表评论