PHP文件緩存內容保存格式主要有三種:
1.變量 var_export 格式化成PHP正常的賦值書寫格式,用的時候直接include文件
2.變量 serialize 序列化之後保存,用的時候反序列化
3,變量 json_encode格式化之後保存,用的時候json_decode
一直以來,我都以為第一種效率最高,因為那是PHP腳本解釋器解析PHP腳本的格式,原生的,應該最快,至少讀取緩存的效率應該是最高的,可是今天做了個測試,令我大跌眼鏡!原來 serialize序列化效率才是最高的,不論是讀還是寫!
下面是用來測試的PHP文件緩存的代碼:
- view plaincopy to clipboardprint?
- $st = microtime(1);
- for ($i=0;$i<1000;$i++){
- /*
- $file = var_export($_SERVER,1);
- $file = "";
- file_put_contents("data/in.php",$file);
- */
- include("data/in.php");
- }
- echo "include讀:".(microtime(1)-$st)." ";
- $st = microtime(1);
- for ($i=0;$i<1000;$i++){
- $file = file_put_contents("data/se.php"
- ,serialize($_SERVER));
- //$file = file_get_contents("data/se.php");
- //$file = unserialize($file);
- }
- echo "serialize寫:".(microtime(1)-$st)." ";
- $st = microtime(1);
- for ($i=0;$i<1000;$i++){
- //$file = file_put_contents("data/se.
- php",serialize($_SERVER));
- $file = file_get_contents("data/se.php");
- $file = unserialize($file);
- }
- echo "serialize讀:".(microtime(1)-$st)." ";
- $st = microtime(1);
- for ($i=0;$i<1000;$i++){
- $file = file_put_contents("data/js.php
- ",json_encode($_SERVER));
- //$file = file_get_contents("data/js.php");
- //$file = json_decode($file);
- }
- echo "json寫:".(microtime(1)-$st)." ";
- $st = microtime(1);
- for ($i=0;$i<1000;$i++){
- //$file = file_put_contents("data/js.
- php",json_encode($_SERVER));
- $file = file_get_contents("data/js.php");
- $file = json_decode($file);
- }
- echo "json讀:".(microtime(1)-$st)." ";
- $st = microtime(1);
- for ($i=0;$i<1000;$i++){
- /*
- $file = var_export($_SERVER,1);
- $file = "";
- file_put_contents("data/in.php",$file);
- */
- include("data/in.php");
- }
- echo "include讀:".(microtime(1)-$st)." ";
- $st = microtime(1);
- for ($i=0;$i<1000;$i++){
- $file = file_put_contents("data/se.
- php",serialize($_SERVER));
- //$file = file_get_contents("data/se.php");
- //$file = unserialize($file);
- }
- echo "serialize寫:".(microtime(1)-$st)." ";
- $st = microtime(1);
- for ($i=0;$i<1000;$i++){
- //$file = file_put_contents("data/se.
- php",serialize($_SERVER));
- $file = file_get_contents("data/se.php");
- $file = unserialize($file);
- }
- echo "serialize讀:".(microtime(1)-$st)." ";
- $st = microtime(1);
- for ($i=0;$i<1000;$i++){
- $file = file_put_contents("data/js.
- php",json_encode($_SERVER));
- //$file = file_get_contents("data/js.php");
- //$file = json_decode($file);
- }
- echo "json寫:".(microtime(1)-$st)." ";
- $st = microtime(1);
- for ($i=0;$i<1000;$i++){
- //$file = file_put_contents("data/js.
- php",json_encode($_SERVER));
- $file = file_get_contents("data/js.php");
- $file = json_decode($file);
- }
- echo "json讀:".(microtime(1)-$st)." ";
結果太神奇了!include寫:0.559882879257include讀:0.185745000839serialize寫:0.255033969879serialize讀:0.0853068828583json寫:0.284864902496json讀:0.145938873291 序列化是最快,無論讀或寫,都是第一種的效率的兩倍,json比序列化的PHP文件緩存效率稍低,表現還可以!
如果撇開文件讀寫所耗費的時間,他們的效率差別可能會更大!include那個,雖然是PHP腳本賦值的格式,但是也是要分析解析文本,PHP腳本解釋器需要動用整個解釋器分析PHP腳本,而序列化不需要,只用啟用序列化文本分析就行了,所以PHP文件緩存效率更高。