文档章节

纯PHP Codeigniter(CI) ThinkPHP效率测试

木川瓦兹
 木川瓦兹
发布于 2012/11/05 13:45
字数 803
阅读 5708
收藏 6
    最近一直想做一个技术类的新闻站点,想做的执行效率高些,想用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的框架吧。

© 著作权归作者所有

共有 人打赏支持
木川瓦兹

木川瓦兹

粉丝 51
博文 6
码字总数 6648
作品 1
丰台
程序员
私信 提问
加载中

评论(18)

夜神的黎曼几何
夜神的黎曼几何
个人水平也不是很高 用过 CI TP YII 综合下来 我比较喜欢CI 和 YII
洞悉
洞悉
这么大的差距 不可能吧
osc特邀杠精
osc特邀杠精
TP第一次会编译的,以后是缓存,debug模式没有缓存,感觉楼主对TP不熟,这个结果没什么意义
plbeast
plbeast
经多次测试tp(部署模式)效率大约是原生php程序的三十五分之一。
木川瓦兹
木川瓦兹

引用来自“zzjin”的评论

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

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

引用来自“pandao”的评论

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

嗯,我也这么觉得,所以打算自己写一个,不过怕心有余而力不足
木川瓦兹
木川瓦兹

引用来自“大德”的评论

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

引用来自“大德”的评论

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

能详细说一下么?@大德

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

嗯,我确实对TP也不太熟,对CI研究的稍多些
桔子
桔子
如果业务逻辑不是太难的话,自己写效率肯定高很多

不过还可以通过写php扩展方法再进一步提高效率
求教各位PHP大佬有关Codeigniter和Thinkphp的项目开发差异

背景: codeigniter现阶段版本为:3.1.9, 前些天刚刚发布了4.0 alpha1版本,早期用过2.2版本。 Thinkphp现阶段版本为:5.0.21,且一直在使用中,从1.5开始就一直在用。 近期由于有一个新项目...

我勒个屮艸芔茻
2018/10/08
201
4
PHP自学新手,求职,有没有企业愿意给个学习机会? 广东地区

自学php和一些框架,codeigniter, thinkphp, yii2 都能参照着官方的手册做一些基础级的网站,想问下,有没有企业建站方面的愿意给我个边工作边学的机会?

hellocpps
2015/11/24
218
1
关于项目选择哪种php框架的问题?

纠结了一段时间,也看了许多框架的一些介绍,还是不能够确定使用那种框架做项目比较好,项目算是中大型的。 因本人技术方面的认知有限,请各位大神帮忙提提意见,小弟在此感谢各位了。 项目介...

BigMans
2015/06/24
7.1K
36
求推荐一款PHP框架

来点干货 1.保证性能,启动加载文件不能过多,类库无过度封装嫌疑. 2.orm有没有无所谓,可手写sql,可缓存查询 3.不要模板引擎,例如结合smarty或者类似smarty那种编译模板的 4.支持多种缓存机制....

我勒个屮艸芔茻
2015/01/04
1K
36
[浙江]半年php工作经验(求职)

自己有过3项目,给公司做的都是电子商务的二次开发。使用过thinkphp,codeigniter框架,掌握div+css,js,jquery,ajax。会基本的linux的基本操作,熟练使用vim编辑代码,浙江地区求职,不做维护...

我叫鸡蛋
2012/03/31
391
1

没有更多内容

加载失败,请刷新页面

加载更多

【机器学习PAI实战】—— 玩转人工智能之商品价格预测

摘要: 我们经常思考机器学习,深度学习,以至于人工智能给我们带来什么?在数据相对充足,足够真实的情况下,好的学习模型可以发现事件本身的内在规则,内在联系。我们去除冗余的信息,可以...

zhaowei121
11分钟前
0
0
Spring拓展接口之FactoryBean,我们来看看其源码实现

是什么 FactoryBean的源码比较简单,大家可以细读下其注释,我做了简单的如下翻译 /** * 实现此接口的bean不能用作普通bean。此bean暴露的对象是通过getObject()创建的对象,而不是它自身...

java菜分享
14分钟前
1
0
Pod在多可用区worker节点上的高可用部署

一、 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可用...

阿里云官方博客
21分钟前
0
0
深入理解 Hive 分区分桶 (Inceptor)

分区是hive存放数据的一种方式。将列值作为目录来存放数据,就是一个分区。这样查询时使用分区列进行过滤,只需根据列值直接扫描对应目录下的数据,不扫描其他不关心的分区,快速定位,提高查...

hblt-j
29分钟前
0
0
数据结构

什么是数据结构 1、数据 数据是描述客观世界的数字、字符以及一切能够输入到计算机中,并且能够被计算机程序处理的符号集合。简言之,数据就是计算机加工处理的原料,是信息的载体。 2、数据...

stars永恒
39分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部