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 |