728x90
반응형
질문 : PHP 배열 저장에 선호되는 방법 (json_encode vs serialize)
캐싱을 위해 데이터의 다차원 연관 배열을 플랫 파일에 저장해야합니다. 때때로 웹 앱에서 사용하기 위해 JSON으로 변환해야 할 필요가있을 수 있지만 대부분의 경우 PHP에서 직접 배열을 사용합니다.
이 텍스트 파일에 배열을 JSON 또는 PHP 직렬 배열로 저장하는 것이 더 효율적입니까? 나는 둘러 보았고 최신 버전의 PHP (5.3)에서 json_decode
가 실제로 unserialize
보다 빠릅니다.
필요한 경우 사람이 읽기 쉽기 때문에 현재 배열을 JSON으로 저장하는쪽으로 기울고 있습니다. PHP와 JavaScript 모두에서 아주 적은 노력으로도 사용할 수 있습니다. 디코딩 속도가 빠릅니다 (인코딩에 대해서는 확실하지 않음).
누구든지 함정을 알고 있습니까? 누구든지 두 방법의 성능 이점을 보여주는 좋은 벤치 마크가 있습니까?
답변
우선 순위에 따라 다릅니다.
성능이 절대적인 주행 특성이라면 반드시 가장 빠른 것을 사용하십시오. 선택하기 전에 차이점을 완전히 이해했는지 확인하십시오.
serialize()
와 달리 UTF-8 문자를 그대로 유지하려면 추가 매개 변수를 추가해야합니다 :json_encode($array, JSON_UNESCAPED_UNICODE)
(그렇지 않으면 UTF-8 문자를 유니 코드 이스케이프 시퀀스로 변환합니다).- JSON은 객체의 원래 클래스가 무엇인지에 대한 메모리가 없습니다 (항상 stdClass의 인스턴스로 복원 됨).
- JSON과 함께
__sleep()
및__wakeup()
을 활용할 수 없습니다. - 기본적으로 공용 속성 만 JSON으로 직렬화됩니다. (
PHP>=5.4
JsonSerializable 을 구현하여이 동작을 변경할 수 있습니다). - JSON은 더 이식성이 있습니다.
그리고 아마도 지금은 생각할 수없는 몇 가지 다른 차이점이있을 것입니다.
두 가지를 비교하는 간단한 속도 테스트
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
// Make a big, honkin test array
// You may need to adjust this depth to avoid memory limit errors
$testArray = fillArray(0, 5);
// Time json encoding
$start = microtime(true);
json_encode($testArray);
$jsonTime = microtime(true) - $start;
echo "JSON encoded in $jsonTime seconds\n";
// Time serialization
$start = microtime(true);
serialize($testArray);
$serializeTime = microtime(true) - $start;
echo "PHP serialized in $serializeTime seconds\n";
// Compare them
if ($jsonTime < $serializeTime) {
printf("json_encode() was roughly %01.2f%% faster than serialize()\n", ($serializeTime / $jsonTime - 1) * 100);
}
else if ($serializeTime < $jsonTime ) {
printf("serialize() was roughly %01.2f%% faster than json_encode()\n", ($jsonTime / $serializeTime - 1) * 100);
} else {
echo "Impossible!\n";
}
function fillArray( $depth, $max ) {
static $seed;
if (is_null($seed)) {
$seed = array('a', 2, 'c', 4, 'e', 6, 'g', 8, 'i', 10);
}
if ($depth < $max) {
$node = array();
foreach ($seed as $key) {
$node[$key] = fillArray($depth + 1, $max);
}
return $node;
}
return 'empty';
}
출처 : https://stackoverflow.com/questions/804045/preferred-method-to-store-php-arrays-json-encode-vs-serialize
728x90
반응형
'프로그래밍 언어 > PHP' 카테고리의 다른 글
PHP 배열의 첫 번째 요소 가져 오기 (0) | 2021.10.14 |
---|---|
PHP에서 JavaScript로 변수와 데이터를 전달 하는 방법 (0) | 2021.09.17 |
PHP 동일성(==)과 항등성(===) 비교 연산자의 차이 (0) | 2021.08.13 |
IntelliJ IDEA는 플러그인을 통해 WebStorm 및 PHPStorm의 모든 기능을 캡슐화 (0) | 2021.08.13 |
PHP를 사용하여 현재 연도를 얻는 방법 (0) | 2021.08.13 |