<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[PHP中用var_export和serialize做数组缓存的性能测试]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Sun, 27 Dec 2009 08:57:07 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	一般我们把数组缓存到文件中的话，都是先要转成字符串的形式，然后再存入文本文件中，一般有两种机制把数组转成字符串，<br/>第一种是<br/>$str = var_export($arr, true);<br/>第二种是<br/>$str = serialize($arr);<br/>这两种机制转换之后的字符串是不一样的，第一种是数组的原型模式，第二种是序列化后的形式。第一种存入文件中的只要加上&lt;?php ?&gt;标签，就形式了一个可用的数组原型，对调用来说，不用转换，直接返回这个数组就可以，但第二种，则需要再用一次unserialize函数反序列化一下。对于第种一说，就多了一步操作。下来我们用数据说话吧:<br/><br/>&lt;?<br/>set_time_limit(50);<br/>$a = array(1,2,3);<br/>$b = array(&#039;a&#039;=&gt;1, &#039;b&#039;=&gt;2, &#039;c&#039;=&gt;3);<br/>$c = array(&#039;a&#039;=&gt;array(1,2,3), &#039;b&#039;=&gt;array(4,5,6));<br/><br/>$time1 = microtime(true);<br/><br/>$times = 1000000; #10w<br/><br/>for($i=1; $i&lt;=$times; $i++){<br/>$A = var_export($a, true);<br/>}<br/><br/>$time2 = microtime(true);<br/><br/>for($i=1; $i&lt;=$times; $i++){<br/>$B = var_export($b, true);<br/>}<br/><br/>$time3 = microtime(true);<br/><br/>for($i=1; $i&lt;=$times; $i++){<br/>$C = var_export($c, true);<br/>}<br/><br/>$time4 = microtime(true);<br/><br/>for($i=1; $i&lt;=$times; $i++){<br/>$X = serialize($a);<br/>}<br/><br/>$time5 = microtime(true);<br/><br/>for($i=1; $i&lt;=$times; $i++){<br/>$Y = serialize($b);<br/>}<br/><br/>$time6 = microtime(true);<br/><br/>for($i=1; $i&lt;=$times; $i++){<br/>$Z = serialize($c);<br/>}<br/><br/>$time7 = microtime(true);<br/><br/>for($i=1; $i&lt;=$times; $i++){<br/>$O = unserialize($X);<br/>}<br/><br/>$time8 = microtime(true);<br/><br/>for($i=1; $i&lt;=$times; $i++){<br/>$P = unserialize($Y);<br/>}<br/><br/>$time9 = microtime(true);<br/><br/>for($i=1; $i&lt;=$times; $i++){<br/>$Q = unserialize($Z);<br/>}<br/>$time10 = microtime(true);<br/><br/>$var_export_time[&#039;a&#039;] = $time2 - $time1;<br/>$var_export_time[&#039;b&#039;] = $time3 - $time2;<br/>$var_export_time[&#039;c&#039;] = $time4 - $time3;<br/><br/>$serialize_time[&#039;a&#039;] = $time5 - $time4;<br/>$serialize_time[&#039;b&#039;] = $time6 - $time5;<br/>$serialize_time[&#039;c&#039;] = $time7 - $time6;<br/><br/>$unserialize_time[&#039;a&#039;] = $time8 - $time7;<br/>$unserialize_time[&#039;b&#039;] = $time9 - $time8;<br/>$unserialize_time[&#039;c&#039;] = $time10 - $time9;<br/>print_r($var_export_time);<br/>print_r($serialize_time);<br/>print_r($unserialize_time);<br/>?&gt;<br/>output:<br/><br/>Array<br/>(<br/>&nbsp;&nbsp;&nbsp;&nbsp;[a] =&gt; 3.3401498794556<br/>&nbsp;&nbsp;&nbsp;&nbsp;[b] =&gt; 5.1394801139832<br/>&nbsp;&nbsp;&nbsp;&nbsp;[c] =&gt; 8.8483898639679<br/>)<br/>Array<br/>(<br/>&nbsp;&nbsp;&nbsp;&nbsp;[a] =&gt; 1.6063709259033<br/>&nbsp;&nbsp;&nbsp;&nbsp;[b] =&gt; 1.7033960819244<br/>&nbsp;&nbsp;&nbsp;&nbsp;[c] =&gt; 3.4534389972687<br/>)<br/>Array<br/>(<br/>&nbsp;&nbsp;&nbsp;&nbsp;[a] =&gt; 1.6037359237671<br/>&nbsp;&nbsp;&nbsp;&nbsp;[b] =&gt; 1.817803144455<br/>&nbsp;&nbsp;&nbsp;&nbsp;[c] =&gt; 3.7992968559265<br/>)<br/><br/>由上面数据说明：<br/>var_export函数性能比serialize函数性能差一倍，而unserialize时间也需要和serialize差不多的时间，serialize加上unserialize时间，和用var_export时间差不多。<br/>所以在应用的时候，如果只用于读取数据的时候，最好存成数组原型，如果只考虑写入缓存，用serialize是不错的选择，还有就是serialize还可以处理Object类型。所以应用上能广泛一些。<br/>但如果论生成后的缓存文件大小，那还是用var_export去除数组中的换行和空白，比用serialize要小大概10%左右，这个测试我就不放上来了，有兴趣的自己可以尝试一下。原因是因为serialize函数中加入了一些冗余字符串。
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] PHP中用var_export和serialize做数组缓存的性能测试]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>