php 에서 serialize 직렬 화 와 json 성능 테스트 의 예시 분석
30132 단어 phpserialize 직렬 화json 성능 테스트
php 5.2 이전에 배열 에 저장 할 때 대부분 serialize 계열 화 를 사용 합 니 다.php 5.2 이후 내장 되 기 시 작 했 습 니 다. JSON 지지
인터넷 에서 제 이 슨encode 와 jsondecode 는 내 장 된 serialize 와 unserialize 함수 보다 효율 적 입 니 다.귀로 듣 는 것 은 눈 으로 보 는 것 만 못 하고,눈 으로 본 것 이 반드시 사실 이 아 닌 것 은 아니다.그럼 실제 데이터 로 테스트 해 보 세 요.
우 리 는 먼저 개념 을 이해한다.
하나 서열 화
직렬 화 는 대상 상 태 를 유지 하거나 전송 가능 한 형식 으로 바 꾸 는 과정 이다.직렬 화 와 상대 적 으로 반 직렬 화 는 흐름 을 대상 으로 전환한다.이 두 과정 을 결합 하면 데 이 터 를 쉽게 저장 하고 전송 할 수 있다.
대상 의 상태 정 보 를 저장 하거나 전송 할 수 있 는 창 으로 변환 하 는 과정.직렬 화 기간 에 대상 은 현재 상 태 를 임시 또는 영구적 저장 소 에 기록 합 니 다.이후 저장 소 에서 읽 거나 반 직렬 화 대상 의 상 태 를 통 해 이 대상 을 다시 만 들 수 있 습 니 다.
일반적으로 대상 인 스 턴 스 의 모든 필드 가 직렬 화 되 는데 이것 은 데이터 가 인 스 턴 스 의 직렬 화 데이터 로 표시 된다 는 것 을 의미한다.이 형식 을 설명 할 수 있 는 코드 는 이 데이터 의 값 을 확인 할 수 있 으 며,이 구성원 의 접근 성에 의존 하지 않 을 수 있 습 니 다.이와 유사 하 게 반 직렬 화 는 직렬 화 된 표현 형식 에서 데 이 터 를 추출 하고 대상 상 태 를 직접 설정 하 는 것 도 접근 가능 한 규칙 과 무관 하 다.중요 한 보안 데 이 터 를 포함 할 수 있 는 모든 대상 에 대해 가능 하 다 면 이 대상 을 직렬 화 할 수 없 게 해 야 한다.직렬 화 할 수 있 는 중요 한 데 이 터 를 저장 하기 위해 특정 필드 를 만들어 보 세 요.이 를 실현 할 수 없다 면 이 데 이 터 는 직렬 화 권한 을 가 진 코드 에 공개 되 고 악성 코드 가 이 권한 을 얻 지 않도록 해 야 한다.
둘째, JSON
JSON,JavaScript Object Notation 은 인터페이스(AJAX,REST 등)데이터 교환 에 더욱 가 볍 고 우호 적 인 형식 입 니 다.JSON 은 구조 화 된 데이터 직렬 화 된 텍스트 형식 으로 XML 의 대체 품 으로 클 라 이언 트 와 서버 간 데이터 교환 에 효과 적 인 부하 형식 을 나타 낸다.그것 은 ECMAScript 언어 표준 에서 파생 된 것 이다.JSON 의 디자인 목 표 는 그것 을 작고 가 볍 고 텍스트 로 만 드 는 것 이 며 자바 스 크 립 트 의 서브 집합 이다.JSON 은 언어 에 완전히 독립 된 텍스트 형식 을 사용 하지만 C 언어 가족 과 유사 한 습관(C,C++,C\#,Java,JavaScript,Perl,Python 등 포함)도 사용 했다.이러한 특성 들 은 JSON 을 이상 적 인 데이터 교환 언어 로 만 들 었 다.사람 이 읽 고 쓰기 쉬 우 며 기계 적 으로 해석 하고 생 성 하기 도 쉽다.
JSON 구 조 는 두 가지 구조 가 있 습 니 다.1.'이름/값'쌍 의 집합(A collection of name/value pairs).서로 다른 언어 에 서 는 대상(object),기록(record),구조(struct),사전(dictionary),해시 표(hash table),키 목록(keyed list)또는 관련 배열(associative array)로 이해 된다.
2.값 의 서열 표(An ordered list of values)가 있 습 니 다.대부분의 언어 에서 배열(array)로 이해 된다.테스트:
셋째, 실제 테스트
PHP 5.3 에서 실행:작은 데 이 터 를 사용 하여 테스트 합 니 다.
<?php
$target = array (
'battle_id'=> 257
,'user_id'=> 41248
,'user_id2'=> 23989
,'player'=> 41248
,'formation'=> Array
(
'41248'=> 1
,'23989'=> 2
)
,'result'=> 1
,'battle_type'=> 1
,'speed'=> Array
(
'41248'=> 0
,'23989'=> 0
)
);
$json = json_encode($target);
$seri = serialize($target);
echo "json :" , strlen($json) ,'<br/>';
echo "serialize :", strlen($seri) ,'<br/>';
$stime = microtime(true);
for ($i = 0; $i < 10000; $i ++) {
json_encode($target);
}
$etime = microtime(true);
echo "json_encode :", ($etime - $stime) ,'<br/>';
//----------------------------------
$stime = microtime(true);
for ($i = 0; $i < 10000; $i ++) {
json_decode($json,true);
}
$etime = microtime(true);
echo "json_decode :", ($etime - $stime),'<br/>';
//----------------------------------
$stime = microtime(true);
for ($i = 0; $i < 10000; $i ++) {
serialize($target);
}
$etime = microtime(true);
echo "serialize :", ($etime - $stime) ,'<br/>';
//----------------------------------
$stime = microtime(true);
for ($i = 0; $i < 10000; $i ++) {
unserialize($seri);
}
$etime = microtime(true);
echo "unserialize :", ($etime - $stime),'<br/>';
?>
테스트 결과:json :156serialize :222json_encode :0.1087498664856json_decode :0.12652111053467serialize :0.041656017303467unserialize :0.040987968444824
테스트 결과 제 이 슨 의 효율 은 serialize 보다 약간 떨 어 지 는 것 으로 나 타 났 으 며,phop 5.2 에 서 는 더 떨 어 질 수 있다.php 5.3 이후 json 확장 이 최적화 되 었 을 것 이다.
그리고 큰 배열 로 테스트 를 합 니 다.
테스트 결과:
json :5350serialize :8590json_encode :0.90479207038879json_decode:1.753741979599 serialize:1.3566699028015 unserialize:1.3003630638123 우 리 는 serialize 가 json 보다 한 개의 수량 급 이 빠르다 는 것 을 알 수 있다.
요약:
1)공간의 비교
serialize 는 인 코딩 후 제 이 슨 의 1.5 배 정도 됩 니 다.
원인:
serialize 후 문자열 은 하위 문자열 의 길 이 를 포함 하고 있 습 니 다.이것 은 속도 적 인 최적화 일 수 있 지만 테스트 결과 가 만 족 스 럽 지 않 습 니 다.serialize 는 더욱 상세 한 유형 구분 이 있 고 json 은 네 가지 유형 만 있 으 며 간단 한 기호 로 표시 합 니 다.2)속도 비교작은 데이터 의 경우, serialize 는 json 보다 미들급 이 빠르다.
빅 데이터 의 경우 제 이 슨 은 serialize 보다 조금 못 하 다.
3)처리 대상 제 이 슨 은 대상 방법 등 데 이 터 를 처리 할 수 없다.
4)사용 범위
직렬 화 는 serialize,특히 대상 의 저장 소 를 사용 합 니 다.이것 은 그 존재의 의미 다.4567918)
대상 과 무관 한 데이터 저장 소 는 json 을 사용 할 수 있 습 니 다.예 를 들 어 대량의 숫자 를 포함 한 배열 등 입 니 다.앞 뒤 인 터 랙 션 에 서 는 일반적으로 JSON 을 사용 하 며,현재 JSON 은 UTF-8 인 코딩 데이터 만 지원 합 니 다.
<?php
$target = array (
'battle_id'=> 257
,'user_id'=> 41248
,'user_id2'=> 23989
,'player'=> 41248
,'formation'=> Array ('41248'=> 1 ,'23989'=> 2)
,'result'=> 1
,'battle_type'=> 1
,'speed'=> Array( '41248'=> 0,'23989'=> 0 )
,'attacker'=> Array(
'1'=> Array (
'user_id'=> 41248
,'soldier_id'=> 28
,'prototype_id'=> 4
,'bid'=> 1
,'level'=> 1
,'rare'=> 1
,'skill_id'=> 1
,'totalhp'=> 3997
,'hp'=> 3997
,'attack_general'=> 346
,'attack_skill'=> 596
,'attack_explode'=> 458
,'attack_type'=> 1
,'defense'=> 0
,'anger'=> 50
,'dodge'=> 2
,'crit'=> 2
,'block'=> 2
,'block_effect'=> 0.5
,'crit_effect'=> 2
,'foramtion_effect'=> 0)
,'4'=> Array (
'user_id'=> 41248
,'soldier_id'=> 29
,'prototype_id'=> 2
,'bid'=> 1
,'level'=> 1
,'rare'=> 1
,'skill_id'=> 1
,'totalhp'=> 3555
,'hp'=> 3555
,'attack_general'=> 396
,'attack_skill'=> 581
,'attack_explode'=> 418
,'attack_type'=> 1
,'defense'=> 0
,'anger'=> 50
,'dodge'=> 2
,'crit'=> 2
,'block'=> 0
,'block_effect'=> 0.5
,'crit_effect'=> 2
,'foramtion_effect'=> 0
)
,'5'=> Array (
'user_id'=> 41248
,'soldier_id'=> 30
,'prototype_id'=> 6
,'bid'=> 1
,'level'=> 1
,'rare'=> 1
,'skill_id'=> 1
,'totalhp'=> 3043
,'hp'=> 3043
,'attack_general'=> 351
,'attack_skill'=> 540
,'attack_explode'=> 474
,'attack_type'=> 1
,'defense'=> 0
,'anger'=> 50
,'dodge'=> 2
,'crit'=> 2
,'block'=> 0
,'block_effect'=> 0.5
,'crit_effect'=> 2
,'foramtion_effect'=> 0)
,'7'=> Array (
'user_id'=> 41248
,'soldier_id'=> 37
,'prototype_id'=> 2
,'bid'=> 1
,'level'=> 1
,'rare'=> 1
,'skill_id'=> 1
,'totalhp'=> 3491
,'hp'=> 3491
,'attack_general'=> 393
,'attack_skill'=> 532
,'attack_explode'=> 456
,'attack_type'=> 1
,'defense'=> 0
,'anger'=> 50
,'dodge'=> 2
,'crit'=> 2
,'block'=> 0
,'block_effect'=> 0.5
,'crit_effect'=> 2
,'foramtion_effect'=> 0 ))
,'defender'=> Array(
'2'=> Array(
'user_id'=> 23989
,'soldier_id'=> 24
,'prototype_id'=> 1
,'bid'=> 1
,'level'=> 1
,'rare'=> 1
,'skill_id'=> 1
,'totalhp'=> 3230
,'hp'=> 3230
,'attack_general'=> 390
,'attack_skill'=> 567
,'attack_explode'=> 442
,'attack_type'=> 1
,'defense'=> 0
,'anger'=> 50
,'dodge'=> 2
,'crit'=> 2
,'block'=> 0
,'block_effect'=> 0.5
,'crit_effect'=> 2
,'foramtion_effect'=> 0)
,'5'=> Array(
'user_id'=> 23989
,'soldier_id'=> 25
,'prototype_id'=> 2
,'bid'=> 1
,'level'=> 1
,'rare'=> 1
,'skill_id'=> 1
,'totalhp'=> 3400
,'hp'=> 3400
,'attack_general'=> 379
,'attack_skill'=> 536
,'attack_explode'=> 405
,'attack_type'=> 1
,'defense'=> 0
,'anger'=> 50
,'dodge'=> 2
,'crit'=> 2
,'block'=> 0
,'block_effect'=> 0.5
,'crit_effect'=> 2
,'foramtion_effect'=> 0 )
,'7'=> Array(
'user_id'=> 23989
,'soldier_id'=> 26
,'prototype_id'=> 6
,'bid'=> 1
,'level'=> 1
,'rare'=> 1
,'skill_id'=> 1
,'totalhp'=> 3669
,'hp'=> 3669
,'attack_general'=> 362
,'attack_skill'=> 549
,'attack_explode'=> 426
,'attack_type'=> 1
,'defense'=> 0
,'anger'=> 50
,'dodge'=> 2
,'crit'=> 2
,'block'=> 0
,'block_effect'=> 0.5
,'crit_effect'=> 2
,'foramtion_effect'=> 0 )
,'9'=> Array(
'user_id'=> 23989
,'soldier_id'=> 27
,'prototype_id'=> 1
,'bid'=> 1
,'level'=> 1
,'rare'=> 1
,'skill_id'=> 1
,'totalhp'=> 3618
,'hp'=> 3618
,'attack_general'=> 326
,'attack_skill'=> 510
,'attack_explode'=> 419
,'attack_type'=> 1
,'defense'=> 0
,'anger'=> 50
,'dodge'=> 2
,'crit'=> 2
,'block'=> 0
,'block_effect'=> 0.5
,'crit_effect'=> 2
,'foramtion_effect'=> 0) )
,'battle_process'=> Array(
'0'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'1'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'2'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'3'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'4'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'5'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'6'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'7'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'8'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'9'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'10'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'11'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'12'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'13'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'14'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'15'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'16'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'17'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'18'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'19'=> Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
,'20'=>Array(
'user_id'=> 41248
,'asid'=> 28
,'bsid'=> Array( '0'=> 26 )
,'harm'=> Array('0'=> 1650)
,'dhp'=> Array('0'=> 2019 )
,'attacker_anger'=> 66
,'defender_anger'=> Array('0'=> 94 )
,'skill'=> 0
,'state'=> 0
)
)
);
$json = json_encode($target);
$seri = serialize($target);
echo "json :" , strlen($json) ,'<br/>';
echo "serialize :", strlen($seri) ,'<br/>';
$stime = microtime(true);
for ($i = 0; $i < 10000; $i ++) {
json_encode($target);
}
$etime = microtime(true);
echo "json_encode :", ($etime - $stime) ,'<br/>';
//----------------------------------
$stime = microtime(true);
for ($i = 0; $i < 10000; $i ++) {
json_decode($json,true);
}
$etime = microtime(true);
echo "json_decode :", ($etime - $stime),'<br/>';
//----------------------------------
$stime = microtime(true);
for ($i = 0; $i < 10000; $i ++) {
serialize($target);
}
$etime = microtime(true);
echo "serialize :", ($etime - $stime) ,'<br/>';
//----------------------------------
$stime = microtime(true);
for ($i = 0; $i < 10000; $i ++) {
unserialize($seri);
}
$etime = microtime(true);
echo "unserialize :", ($etime - $stime),'<br/>';
?>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.