| 제목 | 연관배열 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는 인공지능 ㅋㅋ
|
||||||||||||||||||||