SORU
29 NİSAN 2009, ÇARŞAMBA


PHP diziler depolamak için tercih edilen yöntem (json_encode vs seri hale getirmek)

Önbelleğe alma amaçlı düz dosya veri çok boyutlu bir ilişkisel dizi saklamak istiyorum. Zaman zaman dönüştürmek için ihtiyacı üzerinde benim web app kullanın ama doğrudan dizi PHP kullanarak zaman büyük çoğunluğu için JSON edebilirim.

Daha verimli bu metin dosyasında PHP sıralanmış bir dizi olarak JSON veya dizi saklamak için olabilir mi? Etrafıma baktım ve en yeni PHP (5.3) sürümleri json_decode aslında daha hızlı unserialize Daha gibi görünüyor.

Ben şu anda doğru eğilerek depolama dizisi olarak JSON gibi hissediyorum onun için daha kolay okunur bir insan gerektiğinde kullanılır hem de PHP ve JavaScript ile çok az çaba ve okuduğum, belki daha hızlı kod çözme (emin değilim kodlama gerçi).

Kimse herhangi bir tuzaklar biliyor mu? Herkes her iki yöntemin performans avantajları göstermek için iyi kriterler var mı?

CEVAP
29 NİSAN 2009, ÇARŞAMBA


Senin önceliklerine bağlı.

Eğer performans mutlak sürüş özelliği ise, daha sonra çok hızlı bir kullanın. Sadece bir seçim yapmadan önce bu farklılıklar tam bir anlayış var

  • Varsayılan olarak, json_encode() dönüştürür UTF-8 karakter serialize() etmese kaçış dizileri Unicode için.Not:UTF-8 karakter bakir bırakmak, PHP 5.4 olarak seçeneği JSON_UNESCAPED_UNICODE kullanabilirsiniz.
  • JSON ne nesnenin orijinal sınıfı (her zaman stdClass örnekleri olarak geri yüklenir) bellek olacak.
  • JSON ile __sleep() __wakeup() kaldıraç olamaz
  • Tek ortak özellikleri JSON ile sıralanmış
  • JSON daha taşınabilir

Ve muhtemelen şu an aklıma gelmiyor birkaç diğer farklılıklar vardır.

Basit bir hız testi iki karşılaştırmak için

<?php

ini_set( 'display_errors', 1 );
error_reporting( E_ALL );

//  Make a bit, 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<br>";

//  Time serialization
$start = microtime( true );
serialize( $testArray );
$serializeTime = microtime( true ) - $start;
echo "PHP serialized in $serializeTime seconds<br>";

//  Compare them
if ( $jsonTime < $serializeTime )
{
    echo "json_encode() was roughly " . number_format( ($serializeTime / $jsonTime - 1 ) * 100, 2 ) . "% faster than serialize()";
}
else if ( $serializeTime < $jsonTime )
{
    echo "serialize() was roughly " . number_format( ($jsonTime / $serializeTime - 1 ) * 100, 2 ) . "% faster than json_encode()";
} else {
    echo 'Unpossible!';
}

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';
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Glove and Boots

    Glove and Bo

    1 ŞUBAT 2007
  • Microsoft Research

    Microsoft Re

    24 EKİM 2008
  • Paste Magazine

    Paste Magazi

    28 AĞUSTOS 2008