首席数据官

Hi, 请登录

php 新特性之yield大数组处理优化

一、前言

      博主最近在用elasticsearch做项目,查出来的数据都是数组,在筛选数据组装数据的时候,难免会碰到循环嵌套的问题。如果两个50000的数组循环嵌套,那实际运算则是50000*50000的运算量,十分影响程序执行速度。这篇文主要记录博主优化程序的过程。

二、测试程序性能工具

      先提供一些测试工具,可以明确知道咱们哪部分程序消耗时间久,占用内存大。

1、测试程序执行时间的函数:

/*
 * php输入毫秒部分的代码
 * */
  function msectime() {
    list($msec, $sec) = explode(' ', microtime());
    $msectime =  (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
    return $msectime;
  }

借用这段程序检测函数执行速度,输出的是毫秒。关于这个函数,参考我之前的文章:

php获取当前时间的毫秒数,并且利用它测试代码段执行时间

2、php占用内存

echo "当前占用内存: ".memory_get_usage()." 字节 \n";
echo "内存峰值: ".memory_get_peak_usage()." 字节 \n";

这里通过获取当前内存占用的差值来判断程序执行消耗的内存。通过内存的峰值来查看哪部分消耗的内存最多,防止出现内存泄露情况。

三、开始优化

1、部分函数优化

php 处理大数据业务_作家协会会计业务处理_光音网络 大数据业务

博主在测试的时候,有个函数updateFunnel耗费了4s的时间,这个函数只是个单循环,但是为什么占用这么多内存了,后来百度发现,都是in_array在作怪:

使用 isset()代替 in_array()
			原来: 	in_array($key,$a)
			改为: 	$b = array_flip($a);
				isset($b[$key]);

优化后,此时updateFunnel耗时为 2.4s 。

2、数组嵌套循环优化

原函数:

foreach($this->arrEsIndex as $key=>&$val){
                foreach($this->arrEsIndex as $k=>$v) {
                        if ($val['pixel.uuid'] == $v['pixel.uuid']) {
                            if ($v['pixel.type'] == $this->login_step_val) {
                                $val[$this->login_step] = 1;
                                $val['pixel.user_id'] = $v['pixel.user_id'];
                            }
                        }               
                }
            }
            unset($val);
            unset($v);
	耗时:7.03-0.7 = 6.33s

优化后:

光音网络 大数据业务_作家协会会计业务处理_php 处理大数据业务

$newArr = array();
           foreach($this->arrEsIndex as $key=>$val){
               $newArr[$val['pixel.uuid']] = $val;
           }
           foreach($this->arrEsIndex as $k=>&$v){
                if(isset($newArr[$v['pixel.uuid']])){
                    if($newArr[$v['pixel.uuid']]['pixel.type'] == $this->login_step_val){
                        $v[$this->login_step] = 1;
                            $v['pixel.user_id'] = $newArr[$v['pixel.uuid']]['pixel.user_id'];
                    }
                }
           }
     
试看结束,如继续查看请付费↓↓↓↓
打赏0.5元才能查看本内容,立即打赏

来源【首席数据官】,更多内容/合作请关注「辉声辉语」公众号,送10G营销资料!

版权声明:本文内容来源互联网整理,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 jkhui22@126.com举报,一经查实,本站将立刻删除。

相关推荐

评论

  • 昵称 (必填)
  • 邮箱
  • 网址
二维码
评论