오늘 우연히 생각한건데, PHP를 사용하여 BDB와 유사한 작은 파일 기반의 Key-Value 데이터베이스를 작성하여 비정형 레코드형 데이터를 저장한다면 얼마나 효율적일지 궁금합니다.
그래서 가장 비용 효율적인 방법으로 PHP에서 객체를 직렬화하고 저장하는 방법에 대해 생각해 보았습니다. 그러다가 이전 동료들이 추천한 JSON 인코딩 및 디코딩 기능이 생각났습니다.
그에 따르면 json_encode
및 json_decode
는 내장된 serialize
및 unserialize
기능보다 더 효율적입니다. json_encode
和json_decode
比内置的serialize
和unserialize
函数要高效。
于是我决定动手实验,证实一下同事所说的情况是否属实。
实验分别在PHP 5.2.13和PHP 5.3.2环境下进行。
用同一个变量,分别用以上方式进行编码或解码10000次,并得出每个函数执行10000次所需的时间。
以下是PHP 5.2.13环境其中一次测试结果:
代码如下:
json : 190
serialize : 257
json_encode : 0.08364200592041
json_decode : 0.18004894256592
serialize : 0.063642024993896
unserialize : 0.086990833282471
DONE.
로그인 후 복사
以下是PHP 5.3.2环境其中一次测试结果:
代码如下:
json : 190
serialize : 257
json_encode : 0.062805891036987
json_decode : 0.14239192008972
serialize : 0.048481941223145
unserialize : 0.05927300453186
DONE.
로그인 후 복사
这次实验得到的结论是:
json_encode
和json_decode
的效率并没有比serialize
和unserialize
그래서 나는 동료의 말이 사실인지 확인하기 위해 실험을 하기로 했습니다.
실험은 각각 PHP 5.2.13과 PHP 5.3.2 환경에서 진행되었습니다.
동일한 변수를 이용하여 위의 방법으로 10,000번 인코딩 또는 디코딩을 하고, 각 기능을 10,000번 실행하는데 필요한 시간을 구합니다.
다음은 PHP 5.2.13 환경에서의 테스트 결과 중 하나입니다.
코드는 다음과 같습니다. <?php
$target = array (
'name' => '全能头盔',
'quality' => 'Blue',
'ti_id' => 21302,
'is_bind' => 1,
'demand_conditions' =>
array (
'HeroLevel' => 1,
),
'quality_attr_sign' =>
array (
'HeroStrength' => 8,
'HeroAgility' => 8,
'HeroIntelligence' => 8,
),
);
$json = json_encode($target);
$seri = serialize($target);
echo "json :\t\t" . strlen($json) . "\r\n";
echo "serialize :\t" . strlen($seri) . "\r\n\r\n";
$stime = microtime(true);
for ($i = 0; $i < 10000; $i ++)
{
json_encode($target);
}
$etime = microtime(true);
echo "json_encode :\t" . ($etime - $stime) . "\r\n";
//----------------------------------
$stime = microtime(true);
for ($i = 0; $i < 10000; $i ++)
{
json_decode($json);
}
$etime = microtime(true);
echo "json_decode :\t" . ($etime - $stime) . "\r\n\r\n";
//----------------------------------
$stime = microtime(true);
for ($i = 0; $i < 10000; $i ++)
{
serialize($target);
}
$etime = microtime(true);
echo "serialize :\t" . ($etime - $stime) . "\r\n";
//----------------------------------
$stime = microtime(true);
for ($i = 0; $i < 10000; $i ++)
{
unserialize($seri);
}
$etime = microtime(true);
echo "unserialize :\t" . ($etime - $stime) . "\r\n\r\n";
echo 'DONE.';
?>
로그인 후 복사
다음은 PHP 5.3.2 환경에서의 테스트 결과 중 하나입니다. 환경: 코드는 다음과 같습니다.🎜rrreee🎜이 실험에서 얻은 결론은 다음과 같습니다. 🎜json_encode
및 json_decode
는 더 이상 그렇지 않습니다. serialize
및 unserialize
보다 효율적입니다. 역직렬화 중 성능 차이는 PHP 5.3의 약 2배입니다. PHP 5.3의 실행 효율성은 PHP 5.2에 비해 약간 향상되었습니다. 🎜🎜코드는 다음과 같습니다.🎜rrreee🎜🎜관련 학습 권장 사항: 🎜초보부터 마스터까지 PHP 프로그래밍🎜🎜🎜
위 내용은 PHP에서 json_encode, json_decode, 직렬화 및 역직렬화의 성능 테스트에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!