PHP中用var_export和serialize做數組緩衝的效能測試____PHP

來源:互聯網
上載者:User

一般我們把數組緩衝到檔案中的話,都是先要轉成字串的形式,然後再存入文字檔中,一般有兩種機制把數組轉成字串,

第一種是 $str = var_export($arr, true);
第二種是
$str = serialize($arr);

這兩種機制轉換之後的字串是不一樣的,第一種是數組的原型模式,第二種是序列化後的形式。第一種存入檔案中的只要加上<?php ?>標籤,就形式了一個可用的數組原型,對調用來說,不用轉換,直接返回這個數組就可以,但第二種,則需要再用一次unserialize函數還原序列化一下。對於第種一說,就多了一步操作。下來我們用資料說話吧:

<?set_time_limit(50);$a = array(1,2,3);$b = array('a'=>1, 'b'=>2, 'c'=>3);$c = array('a'=>array(1,2,3), 'b'=>array(4,5,6));$time1 = microtime(true);$times = 1000000; #10wfor($i=1; $i<=$times; $i++){$A = var_export($a, true);}$time2 = microtime(true);for($i=1; $i<=$times; $i++){$B = var_export($b, true);}$time3 = microtime(true);for($i=1; $i<=$times; $i++){$C = var_export($c, true);}$time4 = microtime(true);for($i=1; $i<=$times; $i++){$X = serialize($a);}$time5 = microtime(true);for($i=1; $i<=$times; $i++){$Y = serialize($b);}$time6 = microtime(true);for($i=1; $i<=$times; $i++){$Z = serialize($c);}$time7 = microtime(true);for($i=1; $i<=$times; $i++){$O = unserialize($X);}$time8 = microtime(true);for($i=1; $i<=$times; $i++){$P = unserialize($Y);}$time9 = microtime(true);for($i=1; $i<=$times; $i++){$Q = unserialize($Z);}$time10 = microtime(true);$var_export_time['a'] = $time2 - $time1;$var_export_time['b'] = $time3 - $time2;$var_export_time['c'] = $time4 - $time3;$serialize_time['a'] = $time5 - $time4;$serialize_time['b'] = $time6 - $time5;$serialize_time['c'] = $time7 - $time6;$unserialize_time['a'] = $time8 - $time7;$unserialize_time['b'] = $time9 - $time8;$unserialize_time['c'] = $time10 - $time9;print_r($var_export_time);print_r($serialize_time);print_r($unserialize_time);?>

output:

Array
(
    [a] => 3.3401498794556
    [b] => 5.1394801139832
    [c] => 8.8483898639679
)
Array
(
    [a] => 1.6063709259033
    [b] => 1.7033960819244
    [c] => 3.4534389972687
)
Array
(
    [a] => 1.6037359237671
    [b] => 1.817803144455
    [c] => 3.7992968559265
)

由上面資料說明:
var_export函數效能比serialize函數效能差一倍,而unserialize時間也需要和serialize差不多的時間,serialize加上unserialize時間,和用var_export時間差不多。
所以在應用的時候,如果只用於讀取資料的時候,最好存成數組原型,如果只考慮寫入緩衝,用serialize是不錯的選擇,還有就是serialize還可以處理Object類型。所以應用上能廣泛一些。

但如果論產生後的快取檔案大小,那還是用var_export去除數組中的換行和空白,比用serialize要小大概10%左右,這個測試我就不放上來了,有興趣的自己可以嘗試一下。原因是因為serialize函數中加入了一些冗餘字串。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.