WordPress가 json_encode보다 데이터 직렬화를 선택하는 이유는 무엇입니까?


13

어렸을 때 WordPress를 보았을 때 WordPress 자체와 친숙한 플러그인이 PHP serialize()를 사용하여 많은 경우 데이터를 db에 저장하는 것을 보았습니다 . 그러나 최근 검색에서 나는에 대한 심각한 사회 지원 찾을 json_encode()오버를 serialize().

그리고 나는 개인적으로 두 가지 모두의 연관 배열을 테스트했습니다.

  • serialize() 342 자 저장
  • json_encode() 285 문자 저장

내가 왜 이런걸 물어봐?

반복 메타 필드를 게시물에 저장하는 동안 프로젝트를 진행 중입니다. 어디:

  • 데이터는 기본적으로 영어이지만 벵골어 일 수 있습니다.
  • 데이터는 3 레벨 깊이의 연관 배열 일 것입니다 ( 레벨을 올바르게 이해했으면 좋겠습니다 ).
array(
    1 => array(
        'key'=>'value',
        'key2'=>'value'
    ),
    2 => array(
        'key'=>'value',
        'key2'=>'value'
    )
)

내가 체크 한 postmeta테이블의 meta_value필드 그것은이다 longtext, 4,294,967,295 문자 (4기가바이트)의 길이를.

따라서 물건을 저장하는 강력한 솔루션이 필요합니다.


한마디로, 레거시. 워드 프레스는 광범위한 JSON 채택을 앞두고 있으며, 그 결과 수많은 사이트가 API에 의존하기 때문에 더 이상 사용되지 않는다고 읽지 않은 새로운 개발자를 혼동시키기 위해 여기에 있습니다 ....
Nate Symer

답변:


13

나는 100 % 확인이는 WP 개발자가이 방법을했다 진짜 이유라고 생각하지만, 상식은 나 변수 유형이 직렬화 보존하고 미니는 오류 검출에 구축하고, JSON 만 저장 문자열 값을 알려줍니다 { key : value }그래서 때를, PHP로 돌아가서 형식을 추측하거나 파서를 만들어야합니다. 이렇게하면 데이터를 처리하는 두 가지 방법이 있습니다 : 이전에는 데이터를 json으로 저장하고 json을 디코딩 한 후에는 완전히 다른 객체로 돌아옵니다.

이것이 크기 차이의 주된 이유입니다. PHP는 배열뿐만 아니라 저장합니다. 직렬화 될 때 배열에 몇 개의 요소가 있었는지, 유형 및 값이 저장됩니다.

데이터베이스에는 키 값 쌍만 저장하는 것이 아니라 변수 유형이 다른 객체를 저장할 수도 있습니다.


나는 대답을 가장 좋아합니다. 정말 유용한 포인트.
Mayeenul Islam

1
결과적으로 searialized 데이터에 대한이 답변에서 긍정적으로 들리는 것은 JSON을 사용한 간단한 직렬화보다 더 복잡하고 안전하지 않은 것입니다. 그냥 말하면 실제 이유는 기능이 소개 된 시간에 PHP 직렬화 기능 만 있고 JSON이 아직 없다는 다른 답변에서 볼 수 있습니다.
hakre

6

JSON 인코딩은 PHP 5.2에서 도입되었으며 WordPress는 이전 버전이며 PHP 4에서 개발되었습니다.

데이터 직렬화는 WordPress에서 널리 보급되어 있으므로 PHP 직렬화에서 JSON 인코딩으로 이동하면 이전 버전과의 호환성 문제가 발생할 수 있습니다. WordPress를 조금만 알고 있으면 결코 발생하지 않습니다.

PHP 인코딩보다 JSON 인코딩이 더 좋다고 생각하면 사용하십시오.

메타 함수를 게시하기 위해 문자열 (즉, JSON 인코딩 버전의 데이터)을 전달하면 WordPress에서 해당 문자열을 건드리지 않지만 검색시 JSON 디코딩 데이터를 기억해야합니다.

DB 스토리지 크기가 매우 중요하다면 추가 작업을 할 가치가있을 것입니다. 그렇지 않으면 WordPress에서 사용하는 것을 사용하고 신경 쓰지 않아도됩니다.

데이터를 저장하는 사용자 정의 테이블의 경우 평가할 수 있습니다.


3

나는 이것을 "의견에 따라"닫으려고 유혹하지만 질문에 대한 몇 가지 좋은 답변이 있다고 생각합니다. 나는 "역사"와 함께 갈 것입니다.

1) json_encodePHP 코어에서 비교적 새로운 기능입니다.

json_encode

(PHP 5> = 5.2.0, PECL json> = 1.2.0) json_encode — 값의 JSON 표현을 반환합니다

http://php.net/manual/en/function.json-encode.php

json_encodeWordPress의 초기에는 신뢰할 수 없었습니다. 5.2 이전에는 "핵심"PHP로 롤업되었지만 그 이전에는 PECL 확장으로 사용할 수있었습니다.

둘째, 그러한 같은 객체를 공급하는 경우 WP_Query에 오브젝트 json_encode당신이 얻을 stdClass개체를 json_decode. serialize/ unserialize는 객체를 보존합니다.


+1. 그러나 나는 증거에 인접 해 있기 때문에 "의견에 따라"반대합니다. 그리고 마지막 하나 : 클래스 관련 문제 : 이미 두 번째 링크에서 언급했습니다 (json_encode가 아닌 이유).
Mayeenul Islam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.