<?php
for($i=0; $i<1000000;$i++){
$str .= ‘a’;
}
$s = gettimeofday(1);
for($i=0; $i<1000000;$i++){
$str .= ‘a’;
}
$s = gettimeofday(1);
file_put_contents(‘a.html’,$str.”<br />”);
$a = file_get_contents(“a.html”);
echo $a;
//include(“a.html”);
$a = file_get_contents(“a.html”);
echo $a;
//include(“a.html”);
$e = gettimeofday(1);
echo “—-时间为:”.($e-$s);
?>
echo “—-时间为:”.($e-$s);
?>
输出5次为:
—-时间为:0.265200853348
—-时间为:0.0284519195557
—-时间为:0.0298850536346
—-时间为:0.0236079692841
—-时间为:0.0396289825439
改用include(),由于用include后会直接输出文本,不用echo $a
输出5次为:
—-时间为:0.0882611274719
—-时间为:0.115392923355
—-时间为:0.0823900699615
—-时间为:0.097953081131
—-时间为:0.131741046906
将.html换成.php
file_get_contents
输出5次为:
—-时间为:0.016459941864
—-时间为:0.0171048641205
—-时间为:0.0136158466339
—-时间为:0.0132119655609
—-时间为:0.0154759883881
include
输出5次为:
—-时间为:0.0655369758606
—-时间为:0.0598900318146
—-时间为:0.0600018501282
—-时间为:0.0751519203186
—-时间为:0.073942899704
结论:
.php要比html要快
file_get_contents 时,html一般都是0.02,第一次出资0.2级别不知道是何因。用php时都是0.01
include 用html接近0.1,用php里都是0.05,0.06,0.07
但好像file_get_contents都比include快,以前有个测试,好像include比file_get_contents快。
以下附上别上的测试
关于require, include的性能
测试数据:
有一个数组 , 一共3万条数据, 1MB大小, 我分成2种方法放数据来测试//sexinsex
1. array.php 直接新建个空php文件, 把数组放进去 <?php $array = array(…3万数组…); ?>
2. array.txt 把数组serialize后保存
测试程序:
代码:
for ($i=0 ;$i<100; $i++) {
require(dirname(__FILE__).’/array.php’);
}
结果:
页面执行时间: 12.8904 秒
页面执行时间: 12.8863 秒
页面执行时间: 12.8942 秒
页面执行时间: 12.8992 秒
页面执行时间: 12.9013 秒
require和include速度一样,结果就不写了
测试 程序:
代码:
for ($i=0 ;$i<100; $i++) {
$all = unserialize(file_get_contents(dirname(__FILE__).’/array.txt’));
}
结果:
页面执行时间: 3.7988 秒
页面执行时间: 3.8125 秒
页面执行时间: 3.8118 秒
页面执行时间: 3.8062 秒
页面执行时间: 3.8311 秒
因此,引申出2点结论此
1. 在写一些类或函数的时候, 大数组不要放在程序里, 应该用file_get_contents方法读取
2. 做缓存的方式, file_get_contents再unserialize要比require和include快, 比如sablog和discuz的缓存方式就有问题, 它们是把数据库里 的内容, 程序读出来再存成可以require的数组, 具体程序我没再看了, var_export就可以搞定, 但实现起来, serialize要方便直观容易得多
3. 关于安全性, php直接require的方式, 虽然可以在头顶上加上 defined()来判断
但file_get_contents方法安全性可以这样做, 把重要数据都放在一个目录里, 如/data/然后在/data/里放个.htaccess, 写deny from all, 或者在根目录放.htaccess加个文件后缀的规则禁止都可以
小技巧, just so so…..
———————————————————————————————————————————
网上看到的这篇文章,后来想想用处不大,因为两者不是用在同样的环境中的。.php很多情况下是用来做配置文件的。discuz好像也是。serialize用来做文件缓存。两者应用环境不一样。不过了解下也是可行的。
测试数据:
有一个数组 , 一共3万条数据, 1MB大小, 我分成2种方法放数据来测试//sexinsex
1. array.php 直接新建个空php文件, 把数组放进去 <?php $array = array(…3万数组…); ?>
2. array.txt 把数组serialize后保存
测试程序:
代码:
for ($i=0 ;$i<100; $i++) {
require(dirname(__FILE__).’/array.php’);
}
结果:
页面执行时间: 12.8904 秒
页面执行时间: 12.8863 秒
页面执行时间: 12.8942 秒
页面执行时间: 12.8992 秒
页面执行时间: 12.9013 秒
require和include速度一样,结果就不写了
测试 程序:
代码:
for ($i=0 ;$i<100; $i++) {
$all = unserialize(file_get_contents(dirname(__FILE__).’/array.txt’));
}
结果:
页面执行时间: 3.7988 秒
页面执行时间: 3.8125 秒
页面执行时间: 3.8118 秒
页面执行时间: 3.8062 秒
页面执行时间: 3.8311 秒
因此,引申出2点结论此
1. 在写一些类或函数的时候, 大数组不要放在程序里, 应该用file_get_contents方法读取
2. 做缓存的方式, file_get_contents再unserialize要比require和include快, 比如sablog和discuz的缓存方式就有问题, 它们是把数据库里 的内容, 程序读出来再存成可以require的数组, 具体程序我没再看了, var_export就可以搞定, 但实现起来, serialize要方便直观容易得多
3. 关于安全性, php直接require的方式, 虽然可以在头顶上加上 defined()来判断
但file_get_contents方法安全性可以这样做, 把重要数据都放在一个目录里, 如/data/然后在/data/里放个.htaccess, 写deny from all, 或者在根目录放.htaccess加个文件后缀的规则禁止都可以
小技巧, just so so…..
———————————————————————————————————————————
网上看到的这篇文章,后来想想用处不大,因为两者不是用在同样的环境中的。.php很多情况下是用来做配置文件的。discuz好像也是。serialize用来做文件缓存。两者应用环境不一样。不过了解下也是可行的。