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.4JsonSerializable 을 구현하여이 동작을 변경할 수 있습니다). - 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 |