怎样做项目优化

1
2
3
4
5
6
7
8
+ 从代码架构层面做语言级优化,语言内置函数优化
eg:做相关基线测试,只做擅长的事,IO密集型处理和CPU密集型事务选择
+ 从硬件或网络层面做基础设施优化,
eg:升级带宽,RAID整理,扩展CPU
+ 周边服务优化
eg:static、cache 、pool、mysql优化、net...
+ 架构优化
eg:消息分发是否合理,是否单点故障,HA可行性、集群方案、SOA服务化模块化应用实现分布式部署

PHP代码优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
+ 根据一般项目优化原则,先做php代码自身的优化 
eg:尽量使用自身的内置函数实现
eg:减少魔术函数使用
eg:减少使用错误抑制符@ 影响opcodes行数
eg:合理使用正则表达式(性能低) 合理unset回收变量
eg:减少在循环体内做运算
eg:单引号 与双引号 如果是数组 尽量用字符串键值


+ PHP代码组织架构的优化 eg:PSR-4 安装一定的命名空间组织代码

+ php深度优化,C底层实现方面,eg:相同功能不同实现函数的优化

+ php不同版本升级优化 eg:5.3 5.6 7.X

做基线代码测试

  • 自己实现与使用php自身实现比较
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25

    // 随机产生两个分别数组然后合并

    $arr_1 = [];
    for ($i = 0; $i < rand(1000, 2000); $i++) {
    $arr_1[] = rand();
    }
    $arr_2 = [];
    for ($i = 0; $i < rand(1000, 2000); $i++) {
    $arr_2[] = rand();
    }
    //合并
    $arr_merge = [];
    foreach ($arr_1 as $item) {
    $arr_merge[] = $item;
    }
    foreach ($arr_2 as $item) {
    if (in_array($item, $arr_merge)) {
    continue;
    }
    $arr_merge[] = $item;
    }

    echo "<pre>";
    var_export($arr_merge);

image

1
2
3
4
5
6
7
8
9
10
11
12

//生成
$arr1 = $arr2 = range(1000, 2000);
$arr_merged = array();
//洗牌
shuffle($arr1);
shuffle($arr2);
//合并
$arr_merged = array_merge($arr1, $arr2);

echo "<pre>";
var_export($arr_merged);

image

同时用1000个请求100个并发做压测对比:
image

  • 可以明显看出时间复杂度对比 o(n^2) vs nlog(n) 在执行和并发情况下原生函数优势明显