纯PHP Codeigniter(CI) ThinkPHP效率测试

原创
2012/11/05 13:45
阅读数 1.2W
    最近一直想做一个技术类的新闻站点,想做的执行效率高些,想用PHP做,一直纠结于用纯PHP做还是用CI或者THINKPHP。用纯PHP效率高,缺点n多,比如安全方面、构架方面等等等等;用CI、thinkPHP的话这些需要考虑的就少些,但是怕效率方面差得太多。后来就想先测测吧,如果差得太多,就自己写个“框架”,满足自己的需求即可的框架。

    CI版本是2.1.3,thinkphp用的是3.1。

    因为大多数站点所做的事情就是查询数据库,因此此次的测试着重于数据库查询并显示。测试的数据库是dede的sys_enum,631条数据。目标就是查询出这些数据并显示到页面上计算消耗时间。

===========================================================================
      1. 对于纯PHP,思路是在开始时记一下毫秒数,结束时记一下毫秒数,相减后得结果。纯PHP简单,直接贴代码:
 


<?php
$begin=microtime();
$begin=microtime_float($begin);
?>


<?php
function microtime_float($time)
{
    list($usec, $sec) = explode(" ", $time);
    return (((float)$usec + (float)$sec)*1000);
}
?>
<?php
$link = mysql_connect('localhost', 'root', 'founder') or die('Could not connect: ' . mysql_error());
mysql_select_db('dedecmsv57utf8sp1') or die('Could not select database');
$query='SELECT * FROM dede_sys_enum';
$result = mysql_query($query) or die('Query failed: ' . mysql_error());


echo "<table width=\"416\" border=\"0\" cellpadding=\"1\" cellspacing=\"0\"><tr><td>ID</td><td>ename</td><td>egroup</td></tr>";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo "\t<tr>\n";
    foreach ($line as $col_value) {
        echo "\t\t<td>$col_value</td>\n";
    }
    echo "\t</tr>\n";
}
echo "</table>\n";
mysql_free_result($result);
mysql_close($link);


$end=microtime();
$end=microtime_float($end);


echo 'time:'.($end-$begin);
?>




执行结果如下:(单位毫秒)



===========================================================================
2.对于Codeigniter的效率测试如下
CI已经框架化,为了能够计算总时间,我把计算时间的代码加到了index.php入口文件的前后。





<?php
$begin=microtime();
$begin=microtime_float($begin);
?>

这段放开头




$end=microtime();
$end=microtime_float($end);
echo 'time:'.($end-$begin);
?>

这段放结尾
Control是这么写的


class Test extends CI_Controller {
public function index()
{
$this->load->model('testm');
        $data['test']=$this->testm->testmf();
        $this->load->view('test',$data);
}
}



为了像那么回事
我分别用了model 和view
model是这样的




class Testm extends CI_Model {
    public function testmf() {
        $this->load->database();
        $sql="SELECT * FROM dede_sys_enum";
        return $this->db->query($sql);
    }
}



View的关键代码是这样的




<?php
  foreach($test->result() as $row)
  echo "<tr><td>".$row->id."</td><td>".$row->ename."</td><td>".$row->evalue."</td><td>".$row->egroup."</td><td>".$row->disorder."</td><td>".$row->issign."</td></tr>";
  ?>


下面是10次的执行时间

===========================================================================
3.对于thinkPHP:

      我在自建的入口文件里填写如下代码:

$begin=microtime();
$begin=microtime_float($begin);
function microtime_float($time)
{
    list($usec, $sec) = explode(" ", $time);
    return (((float)$usec + (float)$sec)*1000);
}

require("./tp/ThinkPHP.php");

$end=microtime();
$end=microtime_float($end);

echo 'time:'.($end-$begin);
然后按要求做了action
class IndexAction extends Action {
    public function index(){
        $Sys_enum=new Model("sys_enum");
        $list =$Sys_enum->select();
        $this->assign('test', $list);
        $this->display();
    }
}

还有View的关键代码如下

<?php
  foreach($test as $row)
  echo "<tr><td>".$row['id']."</td><td>".$row['ename']."</td><td>".$row['evalue']."</td><td>".$row['egroup']."</td><td>".$row['disorder']."</td><td>".$row['issign']."</td></tr>";
  ?>

得到10次的访问时间如下:




4.结论哈:
然后取10次的平均值是:

11.565332031250 (PHP) 

54.319799804790 (CI)

132.997436523438 (ThinkPHP)


CI与纯PHP
54.319799804790/11.565332031250=4.696778238447 约等于4.7倍

ThinPHP与PHP

132.997436523438/11.565332031250=11.499664355859 约等于11.5倍



5:总结

那么也就是说,纯PHP是CI的4.5是ThinkPHP的11.5倍


我想还是我自己写个简单的框架吧,能够完成开发效率就OK的框架吧。

展开阅读全文
打赏
0
6 收藏
分享
加载中
个人水平也不是很高 用过 CI TP YII 综合下来 我比较喜欢CI 和 YII
2014/02/21 02:05
回复
举报
这么大的差距 不可能吧
2014/02/17 17:29
回复
举报
TP第一次会编译的,以后是缓存,debug模式没有缓存,感觉楼主对TP不熟,这个结果没什么意义
2013/11/05 16:26
回复
举报
经多次测试tp(部署模式)效率大约是原生php程序的三十五分之一。
2013/07/25 23:51
回复
举报
木川瓦兹博主

引用来自“zzjin”的评论

LZ用thinkphp的时候开启了debug吗?感觉数据像是开了debug的效率...只是一个select然后渲染的话不会这么差的吧....

没有开,下载完之后直接测试的。估计像上边几楼说的似的,可能TP默认开启了session一类的数据了吧
2013/03/04 15:47
回复
举报
LZ用thinkphp的时候开启了debug吗?感觉数据像是开了debug的效率...只是一个select然后渲染的话不会这么差的吧....
2013/03/04 15:24
回复
举报
纯优化php不是好事,这样会破坏代码架构,毕竟PHP是一次性,不是java,c++,常驻进程.
应该是想办法跳过PHP,用其它手段加速每次的http请求
2013/01/26 09:35
回复
举报
木川瓦兹博主

引用来自“pandao”的评论

框架的实际意义是提高开发效率,但性能大多随之下降,太多冗余的东西了。

嗯,我也这么觉得,所以打算自己写一个,不过怕心有余而力不足
2012/11/08 09:43
回复
举报
木川瓦兹博主

引用来自“大德”的评论

引用来自“耿晓晓”的评论

引用来自“大德”的评论

比起业务逻辑处理消耗的时间,框架消耗的时间基本可以忽略不计。

能详细说一下么?@大德

比如在实际业务中,你要做一个大数据修改或修改,整个过程中处理数据可能占去了 95%的执行时间,而框架本身也就消耗了5% 左右的时间。
另外,你的测试稍显不够全面,TP在执行时会生成runtime,按道理说不会太慢,当然我对TP不是太熟悉,我对CI更熟悉一些。

嗯,我确实对TP也不太熟,对CI研究的稍多些
2012/11/08 09:35
回复
举报
如果业务逻辑不是太难的话,自己写效率肯定高很多

不过还可以通过写php扩展方法再进一步提高效率
2012/11/08 08:58
回复
举报
更多评论
打赏
18 评论
6 收藏
0
分享
返回顶部
顶部