| 제목 | 연관배열 vs 객체 | ||
|---|---|---|---|
| 글쓴이 | 지훈임돠 | 작성시각 | 2012/12/14 09:26:39 | 
|  | |||
| CI 에서 엑티브레코드 기본함수 리턴값이 객체라서, 여지껏 객체위주로 써오다가... 배열 vs 객체 쳐보니... 배열이 더 빠르다고, 왠만하면 배열 쓰라고 합니다~ | |||
| 다음글 | 오페라 모바일 브라우져 (2) | ||
| 이전글 | 테이블 칼럼이름값 자동으로 가져오기 | ||
| 
                                milosz
                                /
                                2012/12/14 09:45:10 /
                                추천
                                0
                             
                                 http://aggregation.novaak.net/?q=node/227 버전에 따라 다른가보네요... 테스트코드 만들어서 한번 다같이 돌려보는거 어떨까요?ㅎㅎ | ||||||||||||||||||||
| 
                                지훈임돠
                                /
                                2012/12/14 09:54:03 /
                                추천
                                0
                             
<?
function p($i) {
  echo '<pre>';
  print_r($i);
  echo '</pre>';
}
$t0 = microtime(true);
for ($i=0; $i<1000; $i++) {
    $z = (object) null;
    for ($j=0; $j<1000; $j++) {
        $z->aaa = 'aaa';
        $z->bbb = 'bbb';
        $z->ccc = $z->aaa.$z->bbb;
    }
}
echo '<p>obj: '.(microtime(true) - $t0);
p($z);
$t0 = microtime(true);
for ($i=0; $i<1000; $i++) {
    $z = array();
    for ($j=0; $j<1000; $j++) {
        $z['aaa'] = 'aaa';
        $z['bbb'] = 'bbb';
        $z['ccc'] = $z['aaa'].$z['bbb'];
    }
}
echo '<p>arrays: '.(microtime(true) - $t0);
p($z);
echo '<p> phpversion '.phpversion(); | ||||||||||||||||||||
| 
                                지훈임돠
                                /
                                2012/12/14 09:56:03 /
                                추천
                                0
                             
                                 위 코드로 테스트한 결과입니다. obj: 1.0816578865051 arrays: 0.65077614784241 phpversion 5.3.18 | ||||||||||||||||||||
| 
                                milosz
                                /
                                2012/12/14 10:03:21 /
                                추천
                                0
                             obj가 빠르다는 글들은 어떤 상황인걸까요? 흠.. obj: 1.1751770973206 arrays: 0.74294209480286 phpversion 5.3.13 
 | ||||||||||||||||||||
| 
                                지훈임돠
                                /
                                2012/12/14 10:04:35 /
                                추천
                                0
                             
                                 오브젝트가 코딩하기는 더 편한거같아요..ㅎㅎ a['하하'] a->하하 타자 4개 쳐야할거를 2개만 치면 되니... | ||||||||||||||||||||
| 
                                milosz
                                /
                                2012/12/14 10:08:42 /
                                추천
                                0
                             
                                처리속도는 array가 빠른데 작업속도는 object가 빠르다던가ㅎㅎ 인터프리터다보니 차이가 많이 나나보네요. | ||||||||||||||||||||
| 
                                한대승(불의회상)
                                /
                                2012/12/14 11:06:01 /
                                추천
                                0
                             
                                재미 있어 보여 저도 테스트.. ^^ 일단 CI를 사용하니 CI의 벤치마크 기능과 프로파일러를 써서 테스트 해 봤습니다. OS : MAC OS X 10.7.5 PHP버젼 : 5.3.1 * 소스 코드 
<?php
class test_obj {
 public $aaa;
 public $bbb;
 public $ccc;
 
 function __construct()
 {
  $this->aaa = 'aaa';
  $this->bbb = 'bbb';
  $this->ccc = NULL;
 }
 
 function set_ccc($aaa, $bbb)
 {
  $this->ccc = $aaa . $bbb;
 }
}
class Arr_vs_obj extends CI_Controller {
 function index()
 {
  $this->output->enable_profiler(TRUE);
  
  $arr = array();
  $obj = NULL;
  
  $this->benchmark->mark('array_set_start');
   for($i=0; $i < 1000; $i++) {
    $arr[] = array(
     'aaa' => 'aaa',
     'bbb' => 'bbb',
     'ccc' => NULL
    );
   }
  $this->benchmark->mark('array_set_end');
  $this->benchmark->mark('array_foreach_start');
   foreach($arr as $item) $item['ccc'] = $item['aaa'] . $item['bbb'];
  $this->benchmark->mark('array_foreach_end');
  $this->benchmark->mark('obj_set_start');
   for($i=0; $i < 1000; $i++) {
    $obj[] = new test_obj;
   }
  $this->benchmark->mark('obj_set_end');
  $this->benchmark->mark('obj_foreach1_start');
   foreach($obj as $item) $item->ccc = $item->aaa . $item->bbb;
  $this->benchmark->mark('obj_foreach1_end');
  $this->benchmark->mark('obj_foreach2_start');
   foreach($obj as $item) $item->set_ccc($item->aaa, $item->bbb);
  $this->benchmark->mark('obj_foreach2_end');
 }
}
* 결과Object 변수에 직접 접근 할 때는 배열 보다 빠르군요. ^^ | ||||||||||||||||||||
| 
                                milosz
                                /
                                2012/12/14 11:09:09 /
                                추천
                                0
                             
                                이미 객체 위에서 동작하는 경우는 객체가 더 빠른가보네요. 갈수록 흥미로운 결과가... 과연 최후의 승자는?!ㅎ | ||||||||||||||||||||
| 
                                지훈임돠
                                /
                                2012/12/14 11:45:02 /
                                추천
                                0
                             
class Arr_vs_obj extends CI_Controller {
 function index()
 {
  $this->output->enable_profiler(TRUE);
  $arr = array();
  $obj = NULL;
  $this->benchmark->mark('array_set_start');
   for($i=0; $i < 1000; $i++) {
    $arr[] = array(
     'aaa' => 'aaa',
     'bbb' => 'bbb',
     'ccc' => NULL
    );
   }
  $this->benchmark->mark('array_set_end');
  $this->benchmark->mark('array_foreach_start');
   foreach($arr as $item) $item['ccc'] = $item['aaa'] . $item['bbb'];
  $this->benchmark->mark('array_foreach_end');
  $this->benchmark->mark('array_foreach0_start');
   foreach($arr as $item) $ttt++;;
  $this->benchmark->mark('array_foreach0_end');
  $this->benchmark->mark('obj_set_start');
   for($i=0; $i < 1000; $i++) {
    $obj[] = new test_obj;
   }
  $this->benchmark->mark('obj_set_end');
  $this->benchmark->mark('obj_foreach1_start');
   foreach($obj as $item) $item->ccc = $item->aaa . $item->bbb;
  $this->benchmark->mark('obj_foreach1_end');
  $this->benchmark->mark('obj_foreach2_start');
   foreach($obj as $item) $item->set_ccc($item->aaa, $item->bbb);
  $this->benchmark->mark('obj_foreach2_end');
  $this->benchmark->mark('obj_foreach0_start');
   foreach($obj as $item) $kkk++;
  $this->benchmark->mark('obj_foreach0_end');
 }
}
class test_obj {
 public $aaa;
 public $bbb;
 public $ccc;
 function __construct()
 {
  $this->aaa = 'aaa';
  $this->bbb = 'bbb';
  $this->ccc = NULL;
 }
 function set_ccc($aaa, $bbb)
 {
  $this->ccc = $aaa . $bbb;
 }
} | ||||||||||||||||||||
| 
                                지훈임돠
                                /
                                2012/12/14 11:45:27 /
                                추천
                                0
                             
 | ||||||||||||||||||||
| 
                                지훈임돠
                                /
                                2012/12/14 11:46:57 /
                                추천
                                0
                             
                                Obj Foreach0  은 foreach 속도만 비교한건데요. set 은 array 가 빠르고... foreach 는 array 가 느리네요 | ||||||||||||||||||||
| 
                                한대승(불의회상)
                                /
                                2012/12/14 12:31:45 /
                                추천
                                0
                             
                                결론... 그때그때 달라요.. ^^ | ||||||||||||||||||||
| 
                                헛발이
                                /
                                2012/12/14 12:37:45 /
                                추천
                                0
                             
                                PHP는 인공지능 ㅋㅋ | ||||||||||||||||||||