2008-10-17 13 views
7

PHP'de bir web uygulaması geliştirmeye başladım, umarım inanılmaz derecede popüler olur ve beni ünlü ve zengin yapar. :-)Bir PHP sunucusuna daha az yük koyan: SimpleXML veya json_decode?

Eğer bu süre gelirse, API'nın verilerini SimpleXML ile XML olarak mı yoksa json_decode'u kullanıp kullanmama kararı uygulamanın ölçeklenebilirliğinde bir fark yaratabilir.

Bu yaklaşımlardan hangisinin sunucu için daha verimli olduğunu bilen var mı?

Güncelleme

: Ben daha fazla ölçülebilir olduğu yöntem görmek için ilkel testi yaptı. json_decode'un simplexml_load_string'dan biraz daha hızlı yürütüldüğü anlaşılıyor. Bu, son derece anlamlı değildir çünkü eşzamanlı süreçlerin ölçeklenebilirliği gibi şeyleri test etmemektedir. Benim sonucum, XPath ifadeleri için destek nedeniyle şimdilik SimpleXML ile devam edeceğim.

<?php 

$xml = file_get_contents('sample.xml'); 
$json = file_get_contents('sample.js'); 

$iters = 1000; 

// simplexml_load_string 
$start_xml = microtime(true); 
for ($i = 0; $i < $iters; ++$i) { 
    $obj = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); 
} 
$end_xml = microtime(true); 

// json_decode 
$start_json = microtime(true); 
for ($i = 0; $i < $iters; ++$i) { 
    $obj = json_decode($json); 
} 
$end_json = microtime(true); 

?> 
<pre>XML elapsed: <?=sprintf('%.4f', ($end_xml - $start_xml))?></pre> 
<pre>JSON elapsed: <?=sprintf('%.4f', ($end_json - $start_json))?></pre> 

Sonuç:

"hafif" biçiminde olarak
XML elapsed: 9.9836 
JSON elapsed: 8.3606 
+0

Kişisel kriter korkunç gerçekçi değildir: En darboğazları aslında yalan nereye şaşırabilirsiniz. Şüphesiz, verileri bir şekilde manipüle edeceksiniz, sadece yükleme değil. En azından birkaç değerden veya bir şeyden yinelemeyi deneyin. Yükleme süresi, muhtemelen gerçekleştireceğiniz gerçek işlemin büyük bir kısmı değildir. –

cevap

10

, ben JSON sunucu üzerinde biraz daha az stresli olmasını beklersiniz, ama kendinizi bulmak büyük performans sorunu olacaktır şüphesiz sitenizin popülaritesi arttıkça uğraşmak. Daha rahat edeceğiniz biçimleri kullanın.

Alternatif olarak, verilerinizi nasıl yapılandıracağınızı biliyorsanız, XML biçiminde bir sürüm ve JSON biçiminde bir sürüm oluşturmayı deneyebilir ve yalnızca birkaç yüz bin kez kurulumunuza karşı çalıştırır. fark edilir bir fark.

+0

JSON'un biçimi daha az ayrıntılıdır. Kaydedilen baytlar tek başına büyük bir nimet. Ama bunun üzerine, simplexml json_decode() 'ın oluşturduğu basit yerli PHP yapılarından daha ağır olacak simpleksml kaynakları oluşturur. Bunun üzerine, simplexml, yıllar içinde bir dizi bellek sızıntısı hatası geçirmiştir, örneğin: http://bugs.php.net/bug.php?id=38604. Simplexml hakkında basit olan tek şey API'sidir. Bunun ötesinde, çok güçlü değil, verimsiz ve buggy. –

3

Verilerinizle uygulamanızda sunucunuzda hangisinin daha kolay olacağını belirlemek için tek bir yöntem var.

Test edin!

Tercüme edeceğinize benzeyen bazı veriler oluşturup, anlamlı sonuçlar elde edebilmek için SimpleXML ve json_decode'un her birini kullanarak birkaç bin kez kodunu çözmek için birim test çerçevelerinden birini kullanırdım. Ve sonra bize neyin işe yaradığını söyleyebilirsin.

Bu, tam olarak aradığınız cevap türü değil, ama gerçekte bunu yapmanın tek doğru yolu. İyi şanslar!

İlgili konular