PHP7学习书籍之《高性能PHP7》读后总结

原创 码农  2020-01-15 11:38:54  阅读 512 次 评论 0 条

用PHP的码农应该都知道,PHP7版本做了比较大的改动。PHP 性能一直是一个大问题,无论使用多么强悍的机器,PHP 都会存在一定的瓶颈。为了解决PHP的性能问题,PHP 7已经完全基于PHPNG进行重写。PHP7 相对以前版本性能提升了 3 倍左右。最近读了《高性能PHP7》,下面读完书的总结。


PHP7学习书籍之《高性能PHP7》读后总结 PHP7学习书籍之《高性能PHP7》读后总结 编程代码


1 搭建环境 

书中介绍了如何搭建不同的开发环境,其中包括Nginx、PHP7、运行在Windows上的 Percona Server(强化版的 MySQL 数据库)、多种的Linux发行版,以及安装Vagrant虚拟机。


2 PHP 7新特性 

  1. 新增支持类型声明,包括:形参、返回值。

  2. 新增支持一个 use 导入同命名空间下的多个类、函数和常量。

  3. 新增支持匿名类。

  4. 不推荐使用老式构造函数,建议 __construct 代替。

  5. 强化异常类,包括 Fatal 级别的错误都可以被截获。

  6. 新增太空飞船操作符(<=>)。

  7. 新增 null 合并运算符(??)。

  8. 规范变量语法,如 $$first['name']; 推荐改为 ${$first['name']}

  9. 新增支持 define 定义常量数组。

  10. 不再支持在switch语句拥有多个default默认值。

  11. 新增支持使用session_start()函数传入参数修改配置。

  12. Unserialize函数引入过滤器。


3 PHP 7应用性能提升 

为了提升性能,PHP7 已经完全基于 PHPNG 进行重写,不过依然有很多其他的方法可以用来进一步提升 PHP7 性能。

3.1 HTTP Server 的选择

目前有很多 HTTP Server 软件可供使用,目前最流行的是 Nginx 与 Apache。
  • Apache:完整,稳定。每一个请求都由一个线程或进程处理,导致开销大,高并发情况下其性能低下的问题凸显。

  • Nginx:轻量,异步。 由于请求异步处理,每个进程可以处理数千个连接,因此可以使用很少的进程来承载高并发流量。

3.2 HTTP Server 的优化

  1.  修改 Server 配置开启缓存静态文件,将静态文件(如 img\css\js 资源)缓存到客户端。

  2. 修改 Server 配置开启 HTTP Keep-alive 持久链接,以往每次请求都需要三次握手建立链接,Keep-alive 技术在建立连接之后不需再产生握手环节,避免开销。

  3. 修改 Server 配置开启 GZIP 压缩 ,将网络中传输的内容进行压缩之后再传递可以有效地减轻传输负担。

  4. 对于 apache ,将 php 模块独立部署,使得 apache 只关注 http 请求连接。

  5. Apache 与 Nginx 都有许多内部默认携带的模块,可以选择剔除不用的的模块

  6. 服务器都需要占用必要资源如cpu/内存等,可通过修改配置规定占用资源数量

  7. 使用 CDN(内容分发网络)可就近加载静态资源,小站可选择加入七牛云、阿里云等平台。

  8. 将多个 css/js 文件合并成一个实现减少请求数量,压缩 css/js 文件实现减轻传输负担。

  9. 将数据缓存在服务器端,可使用 Varnish 或 Redis 等服务器实现。

  10. 高并发时可搭建 负载均衡(LB)服务器减轻负载,使得所有请求都只到达 LB 服务器,再由 LB 将请求使用内网方式分别分发到其它 Web 节点服务器,获取数据并返回。(本书介绍的是 HAProxy负载均衡 的搭建,除此之外比较流行的还有 LVS、Nginx 反向代理方式)。 


4 提升数据库性能 

所有流入流出的数据都会和数据库进行交互。因此,如果PHP应用的数据库没有进行较好的设计或优化,其性能将会受到非常大的影响。
4.1 MySQL数据库优化
  1. 修改配置开启查询缓存(Query Caching),使同样的 SELECT 查询发生时,MySQL 直接从内存中直接取出结果。

  2. 选择合适的存储引擎,目前使用最广泛的是 MyISAM 和 InnoDB。

  3. 使用 Percona 代替 MySQL 数据库,Percona 由 MySQL 衍生而来,支持MySQL 的所有特性,并在此基础上拥有更多的功能和更好的性能。

  4. MySQL性能监控,可借助 phpMyAdmin 提供的一些可视化监控工具。

  5. 搭建 Percona XtraDB 集群环境,配置和管理多台数据库服务器,数据库之间使用二进制日志来互相通信。

  6. 使用 Redis 或 Memcached 作为数据库缓存减轻数据库负担。


5 调试和分析 

问题一定会存在的,通过必要的调试手段可快速获取错误信息,提高开发效率。本章内容包括:
  1. 开启Xdebug 扩展,获取详细的报错信息。

  2. 安装 Sublime Text 的 xdebug 插件实现断点调试。

  3. 配置 Eclipse 来使用 Xdebug 调试。

  4. 配置开启 Xdebug 分析器,从而获取应用中每个运行脚本和任务的开销信息。

  5. 另一款调试工具 PHP DebugBar 。


6 PHP应用的压力/负载测试 

PHP应用的压力/负载测试,使用不同工具进行压力、负载测试。其中包括 Apache JMeter、ApacheBench 和 Siege测试负载情况,并会以一些开源PHP项目(Magento、Drupal、Wordpress)为例,分别在PHP 7 与 PHP 5.6 的环境中进行负载测试并加以对比。

6.1 Apache JMeter

Apache JMeter 是一个开源的图形界面工具,用于对服务器的性能进行压力测试。JMeter 完全用 Java 编写,因此可以运行在所有支持 Java 的操作系统上。
6.2 ApacheBench (ab) 

ApacheBench(ab) 是一个命令行工具,安装 Apache 时默认也会安装ab。

示例
>> ab -c50 -n 500 https://www.baidu.com/
  • -n:发送测试请求的总数目。

  • -c:并发量,即一次同时发出的请求数目。

6.3 Siege 

另一款用于测试负载和性能的开源命令行工具。

6.4 实际项目中应用程序的压力测试

对运行在 PHP5.6 和 PHP7 上的多个开源应用进行压力测试,结果如下:
  • 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编程最佳实践

最佳实践(best practice),是一个管理学概念,认为存在某种技术、方法、过程、活动或机制可以使生产或管理实践的结果达到最优,并减少出错的可能性。PHP编程最佳实践包括编码规范、设计模式、测试驱动开发、Git和部署等。
代码风格
PHP通用性框架小组(PHP-FIG)规定了如PSR-0、PSR-1、PSR-2、PSR-3等代码风格规范。我们非常有必要遵循代码规范,编写可读性高、易懂易维护的高质量代码。如类文件命名、类驼峰命名、函数方法命名、变量命名等。
测试驱动开发(TDD)与单元测试

设计模式

设计模式不是一个工具,它仅是描述如何解决一类特定问题 的说明或模版,一个设计模式可以解决一类特定的问题。如 MVC 模式、单例模式、工厂模式等。

提升工作效率的工具:
PHP 框架:Laravel、CI、ThinkPHP 等 MVC 框架。
Git:一套能高效处理各种项目的分布式版本控制系统。
Composer:PHP 的一个依赖管理工具。

- end - 

小编觉得《高性能PHP 7》相对那些 入门到精通 、 n 天学会php 系列的书籍,这一本IT技术类书籍还是挺不错的。.


本文地址:https://www.itcodeit.com/post/52.html
版权声明:本文为原创文章,版权归 码农 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?