2009-09-21 138 views
3

這就是我需要問的所有問題。檢查了PHP手冊,看到一篇用戶帖子說serialize比json_encode慢45-90%(他跑了一些基準測試)。但是「慢」怎麼慢呢?我可以找到很多「對比」的東西,但沒有一個像我這樣的初學者可以涉及到。在什麼情況下使用json_encode()比使用serialize()更好?

我剛剛寫了一個腳本,它在json中編碼一個數組,並且另一個腳本將它解碼。我對serialize做了同樣的處理。明顯地,這不會告訴我他們之間有任何顯着的差異。

+0

重複http://stackoverflow.com/questions/804045/preferred-method-to-store-php-arrays-json-encode-vs-serialize – 2011-05-04 23:18:20

回答

1

如果你在一個應用程序,另一個之間傳輸數據,它通常是幾乎總是更好地使用JSON編碼數據,而不是PHP序列數據作爲後來是具體到PHP和不一樣便攜JSON格式。

即使在服務器和客戶端都是基於PHP的情況下,您也應該使用便攜式格式(如JSON)來允許將來創建新客戶端,而無需更改服務器的響應格式。

我還沒有對這兩個人進行任何基準測試,但是如果您發現json編碼比序列化更快,那麼比使用它的更多理由。

此外,我更喜歡JSON編碼的數據,因爲它比序列化數據更容易閱讀,並且可以很快被扔進螢火蟲中以便可視化。

3

做10000次(每次)(希望)得到一個可測量的內存使用率和CPU時間差異的想法。

大多數情況下,性能方面的差異不會很大。在兩種特殊情況下使用JSON非常有用:用於返回到Web瀏覽器以及與其他應用程序(通過Web服務和其他方式)的互操作性,尤其是在非PHP平臺上。

+0

所以我可以在php中做一個json編碼,並將其傳遞給一個jQuery腳本? – yretuta 2009-09-21 03:59:46

+0

@Ygam:您可以使用$ .getJSON jQuery函數從服務器,PHP或其他平臺接收JSON數據。 – 2009-09-21 04:00:26

+0

是的,這是編碼爲json的主要好處之一。 Actionscript也會接受json對象。 – 2009-09-21 04:01:07

2

當你只對一些對象/數組進行編碼/序列化時,我會說速度上的差異並不那麼重要:你一定會覺察不到它。

不同之處在於serialize是專門爲PHP製作的;例如,作爲類的信息不會隨着序列化而丟失,並且在反序列化時可以被檢索。另一方面,JSON並不特定於PHP,這意味着它是一種很好的交換格式 - 其主要用途是在Javascript和PHP之間交換數據。


例如,考慮這段代碼:

class A { 
    public $a; 
    public function __construct($a) { 
     $this->a = $a; 
    } 
} 

$test = new A(10); 

現在,讓我們序列化和反序列化$測試:

var_dump(unserialize(serialize($test))); 

我們得到:

object(A)[2] 
    public 'a' => int 10 

即一個對象,類A的實例。


現在,讓我們做同樣的JSON:

var_dump(json_decode(json_encode($test))); 

我們現在只有一個stdClass的實例:

object(stdClass)[2] 
    public 'a' => int 10 

JSON是不錯的數據交換(以下簡稱 'A級'信息對於PHP來說很重要,但對另一個應用程序可能沒有多大意義);但也有其侷限性。

相關問題