1.应用场景

主要用于从多个层面多种手段去优化PHP程序性能,或者移植性,阅读星,维护性。

2.学习/操作

1.文档阅读

性能优化 = 改改代码?- 学习/实践_穿素白衫的少年的博客-CSDN博客

https://www.jb51.net/article/30740.htm

通过Twemproxy提升PHP/Redis的性能 | 火丁笔记

为高性能优化 PHP-FPM | PHP优质外文翻译 | PHP 技术论坛

鸟哥的建议 -- 需要实践

让PHP7达到最高性能的几个Tips - 风雪之隅

让你的PHP7更快(GCC PGO) - 风雪之隅

让你的PHP7更快之Hugepage - 风雪之隅

word-press的性能优化--blog

Page Speed and Caching for WordPress: Our Tutorials

2.整理输出

程序的最终性能表现「需要结合具体的性能指标来看」是由多种因素共同作用下的结果。

也就意味着,性能优化需要从多个方面入手,有多种手段方式。

通常服务/软件的性能优化,可以从多个方面/层面去做:「PHP自然在其中」

推荐从低到高的维度去分析,然后有的放矢,针对性做优化。

底层: 底层源码入手,做优化,编译安装,包括增加一些扩展通过重新编译安装的方式,从根上分析,优化 -- 难度比较大,要求能力比较高,所以这种方式,通常会由软件/服务「编程语言」的核心开发者团队来提供,比如:PHP的opcache扩展,就直接集成到PHP源码中。「但是我们要知道,如果你的技术能力很强,也自然可以」

中层:软件/服务安装之后,开启一些配置,简单来说,就是优化执行环境。

比如: 修改配置文件,开启一些特性「PHP开启使用opcache,根据自身的环境「硬件和软件」,合理配置参数」

高层:通常是应用层代码开发层面。 比如:使用高效的PHP函数,目前最佳实践的设计模式,开发技巧,优化业务逻辑,降低时空复杂度,简单说,就是最大程度地利用硬件资源。

但是,到了高层,不单单要考虑代码的性能,还要考虑易维护性等方面因素,要有所取舍。

但是请留意,上面的层级之间是相对而言,而且是结合具体上下文来定的,所以不是一层不变的,分层可以灵活,比如认为只有底层和高层。

而且,这些层级之间,必然是有联系,因为上层依赖下层,下层支持上层。

2.1 底层「优化底层代码,如:增加扩展形式」

让PHP7达到最高性能的几个Tips - 风雪之隅

1. Opcache

https://blog.csdn.net/william_n/article/details/127622844

2. 使用新的编译器

3. HugePage

让你的PHP7更快之Hugepage - 风雪之隅

4. Opcache file cache

5. PGO

让你的PHP7更快(GCC PGO) - 风雪之隅

2.2 中层「配置参数优化」

TBD

2.3 高层「应用层的代码开发」

1). 合理使用unset函数[并不是使用unset()就一定会释放内存]

这就涉及到底层的内存垃圾回收机制,所以,做高层优化,离不开底层实现,建议要先回顾底层,然后去实践,测试验证。

$data = array_values($data);
// 数据处理【将数据按照[rule]进行降序排列】
$data = array_map(function ($v) {
    $v['rule_count'] = count($v['rule']);
    return $v;
}
, $data);
$newData = [];
foreach ($data as $key => $value) {
    $newData[$key] = $value['rule_count'];
}
arsort($newData) $tmp = [];
foreach ($newData as $newKey => $newValue) {
    $tmp[] = $data[$newKey];
}
$data = $tmp;
$mm = memory_get_usage(); //获取占用的内存 
var_dump($mm); 
unset($newData); 
unset($tmp); 
mm = memory_get_usage(); 
var_dump($mm); 
exit;

打印结果:

int(7047216)

int(7025672)

说明: 内存有释放

2). 各种小tips收集 「这里就直接汇总了」

PHP代码优化的目的是为了提高PHP程序的执行效率,编写PHP代码时,可以从以下方面着手优化:

1. 用单引号代替双引号来包含字符串「但是当有变量拼接时,可以适当考虑使用双引号,为了更好的代码可读性」

2. 如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍
3. 用 echo 代替 print,效率更好
4. 及时注销不用的变量,尤其是大数组,以便释放内存
5. 尽量避免使用__get(),__set(),__autoload()
6. require_once()代价昂贵,尽量少用
7. 尽量用函数代替正则表达式完成相同的功能
8. str_replace 函数比 preg_replace 函数快
9. 使用分支语句(即 switch case)好于使用多个 if,else if 语句
10. 用@屏蔽错误消息的做法非常低效
11. 当执行变量$i的递增或递减时,++$i 会比 $i++ 快一些
12. 尽量使用PHP的内置函数
13. 循环体内部不要声明变量,尤其是大变量
14. foreach 效率更高,尽量用 foreach 代替 while 和 for 循环
15. 用 $i+=1 代替 $i=$i+1,效率更高 
16. 对于 global 全局变量,用完后立即 unset() 掉 
17. 适当地做一些缓存处理

2.3 换行使用 PHP_EOL 来替代,以提高代码的源代码级可移植性

或者使用 \r\n

unix系列用 \n
windows系列用 \r\n
mac用 \r

<?php

echo PHP_EOL;

// windows平台相当于   echo "\r\n";
// unix\linux平台相当于   echo "\n";
// mac平台相当于    echo "\r";

2.4 变量普通赋值与引用赋值,参数传值与传引用

PHP - 变量赋值和引用以及参数传值与传引用的区别 - 学习/实践_穿素白衫的少年的博客-CSDN博客

2.5 通过Twemproxy提升PHP/Redis的性能 -- 这里的技术实现方案是作为参考

主要是为了说明,Pipelining技术可以借鉴,当代理收到多个并发请求时,它会把这些请求打包成一个请求发送给后端服务器,从而减少不必要的 RTT。

通过Twemproxy提升PHP/Redis的性能 | 火丁笔记

Twemproxy 可以说是最古老的 Redis 代理软件了,一般来说,引入代理后性能会比没有引入代理时低一些,毕竟代理会导致一些额外的性能损耗,可是 Twemproxy 却会提升性能, 这主要得益于它的 Pipelining 功能可以实现打包请求,简单点说:当代理收到多个并发请求时,它会把这些请求打包成一个请求发送给后端服务器,从而减少不必要的 RTT。关于 Pipelining 本文不做过多讨论,实际上我想说的是它的另一个功能:连接池!下面看看如何通过 Twemproxy 提升 PHP/Redis 的性能。

后续补充

...

3.问题/补充

TBD

4.参考

参见上面文档列表

后续补充

...

【性能优化】PHP - 优化手段 - 学习/实践相关推荐

  1. 工程之道,深度学习推理性能业界最佳优化实践

    MegEngine「训练推理一体化」的独特范式,通过静态图优化保证模型精度与训练时一致,无缝导入推理侧,再借助工业验证的高效卷积优化技术,打造深度学习推理侧极致加速方案,实现当前业界最快运行速度.本文 ...

  2. 【性能优化】网络编程 - PHP - 使用TCP长连接的一种优化思路 - 学习/实践

    1.应用场景 主要了解学习如何基于PHP使用TCP长连接的一种优化思路. 2.学习/参考 文档阅读 PHP - CGI, Fast-FGI, PHP-FPM - 学习/实践 php使用tcp长连接的一 ...

  3. 《MySQL性能优化和高可用架构实践》阅读总结

    文章目录 介绍 第1章 MySQL架构介绍 1.1 MySQL简介 1.2 MySQL主流的分支版本 1.3 MySQL存储引擎 1.4 MySQL逻辑架构 1.5 MySQL物理文件体系结构 第2章 ...

  4. 《MySQL性能优化和高可用架构实践》简介与推荐序

    #好书推荐##好书奇遇季#<MySQL性能优化和高可用架构实践>,京东当当天猫都有发售.腾讯云架构师宋立桓倾情奉献,定价59元,网店打折销售其实没多少钱. 互联网公司里面几乎很少有公司不用 ...

  5. DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文)、CNN优化技术、调参学习实践、CNN经典结构及其演化、案例应用之详细攻略

    DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文).CNN优化技术.调参学习实践.CNN经典结构.案例应用之详细攻略 目录 卷积神经网络算法的简介 0.Biologically Ins ...

  6. android系统功耗优化(2)---Android最佳实践之性能 - 电池续航时间优化

    Android最佳实践之性能 - 电池续航时间优化 Doze和App Standby的优化(API23) 参考地址:http://developer.android.com/training/moni ...

  7. ySQL性能优化的21个最佳实践 和 mysql使用索引

    MySQL性能优化的21个最佳实践 和 mysql使用索引 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 ...

  8. mysql性能优化和高可用架构实践pdf_实践大于一切!Alibaba最新MySQL性能优化+高可用架构全彩版PDF...

    本篇的内容将会覆盖MySQL 5. 7数据库体系结构.InnoDB存储引擎.MySQL事务和锁.性能优化.服务器全面优化.性能监控.主从复制,以及PXC集群.MHA自动故障转移群集.MGR组复制.Ke ...

  9. MySQL数据库性能优化及自动化运维实践教程!DBA日常工作

    MySQL数据库性能优化及自动化运维实践教程!本文作者将站在更加全面的角度分享他在这一年多 DBA 工作中的经验,希望可以给大家带来启发和帮助. DBA 的日常工作 我觉得 DBA 真的很忙,我们来看 ...

最新文章

  1. 2022-2028年中国滑雪产业投资分析及前景预测报告(全卷)
  2. 欧拉函数求一个数倒数的循环节长度
  3. python【数据结构与算法】内建模块itertools(操作迭代对象)
  4. 三菱plc 与 计算机 通讯,PC与三菱PLC之间的RS232通讯协议
  5. tenjin - 号称全球最快的模板引擎
  6. 【AAAI 2018】腾讯 AI Lab 11篇论文精选:图像描述、NMT 模型、图卷积神经网络、DNN优化等
  7. 剑指offer 链表中倒数第k个节点
  8. 每天一道CTF---bugku-----有趣的题(PHP语言特性)
  9. Avoided redundant navigation to current location
  10. CSS 全解析实战(一)-导读
  11. Android必学之数据适配器BaseAdapter
  12. Ubuntu 创建快捷方式的方法
  13. Atitit hadoop使用总结 目录 1.1. 下载300m ,解压后800M 1 1.2. 二:需要的jar包 1 2. Demo code 2 2.1. WCMapper 2 2.2. WC
  14. 【JSP入门】只知道HTML却不知道JSP?
  15. matlab饼状图的编程方法,matlab饼状图
  16. linux发送短信的脚本,shell监控系统资源并通过短信报警的脚本
  17. 学术界AV1编码优化技术的进展
  18. 2012浙大计算机考研分数线,浙江大学历年考研分数线汇总[2012-2021]
  19. asus华硕 开启安全启动
  20. 入侵Windows服务器的流程

热门文章

  1. CSAPP学习笔记 day1
  2. git(9)Git 内部原理,java入门视频百度网盘
  3. 北方工业大学编译原理——四、五章单元测试内容复习
  4. 20160202.CCPP体系详解(0012天)
  5. Ebc编码与asc编码转换
  6. 百度网盘上传慢的解决方法
  7. 管理3.0 学习词汇笔记 一 树
  8. mySql文字上标_如何在 Pages 里面打出文本上标和下标
  9. 农村环境保护之平时作业三
  10. SinuTrain for SINUMERIK 仿真西门子最新版仿真软件