119. PHP 性能问题(2)

1.语言性能优化
这里写图片描述


bad.php

<?php

$array_1 = array();
$array_2 = array();

for ($i=0;$i<rand(1000,2000);$i++){
        $array_1[] = rand();
}

for ($i=0; $i<rand(1000,2000); $i++) {
        $array_2[] = rand();
}

$array_merged = array();

foreach ($array_1 as $v) {
        $array_merged = $v;
}

foreach ($array_2 as $v) {
        if (!in_array($v,$array_merged)) {
                $array_merged[] = $v;
        }
}

var_dump($array_1,$array_2,$array_merged);

good.php

<?php

$array_1 = $array_2 = range(1000,2000);
shuffle($array_1);
shuffle($array_2);

$array_merged = array_merge($array_1,$array_2);
var_dump($array_1,$array_2,$array_merged)

用 ab 压测
这里写图片描述

这里写图片描述


2. PHP 代码运行流程
这里写图片描述

用 PHP 内置函数,scanner 扫描的行数就少了很多,而且 zend 引擎容易理解,perser 成 cpcode 更少。

phalcon

现在更多的去缓存 opcode

3.PHP 内置函数的优劣

这里写图片描述

<?php


$start = current_time();

$i = 0;

$arr = range(1,200000);

while ($i<200000) {
    ++$i;
    // 两个内置函数实现同样的功能
    isset($arr[$i]);
    //array_key_exists($i,$arr);
}

$end = current_time();

echo "Load Time :" . number_format($end - $start,3) * 1000;

function current_time()
{
    list($usec,$sec) = explode(" ",microtime());
    return ((float)$usec + (float)$sec);
}

这里写图片描述
这里写图片描述


4.尽量少用魔法函数
这里写图片描述

<?php

function currency_time()
{
    list($usec,$sec) = explode(' ',microtime());
    return (float)$sec + (float)$usec;
}

$start = currency_time();
class Test
{
   // private $var = '123';
    public $var = '123';

    /*public function __get($varname)
    {
        return $this->var;
    }*/
}

$i = 0;
while ($i<100000) {
    $i++;
    $test = new Test();
    $test->var;
}

$end = currency_time();

echo ($end-$start)*1000;

这里写图片描述
这里写图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值