纯PHP Codeigniter(CI) ThinkPHP效率测试
最近一直想做一个技术类的新闻站点,想做的执行效率高些,想用PHP做,一直纠结于用纯PHP做还是用CI或者THINKPHP。用纯PHP效率高,缺点 n多,比如安全方面、构架方面等等等等;用CI、thinkPHP的话这些需要考虑的就少些,但是怕效率方面差得太多。后来就想先测测吧,如果差得太多, 就自己写个“框架”,满足自己的需求即可的框架。
CI版本是2.1.3,thinkphp用的是3.1。
因为大多数站点所做的事情就是查询数据库,因此此次的测试着重于数据库查询并显示。测试的数据库是dede的sys_enum,631条数据。目标就是查询出这些数据并显示到页面上计算消耗时间。
===========================================================================
      
1.
对于纯PHP,思路是在开始时记一下毫秒数,结束时记一下毫秒数,相减后得结果。纯PHP简单,直接贴代码:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <?php$begin=microtime();$begin=microtime_float($begin);?><?phpfunctionmicrotime_float($time){    list($usec, $sec) = explode(" ", $time);    return(((float)$usec+ (float)$sec)*1000);}?><?php$link= mysql_connect('localhost', 'root', 'founder') ordie('Could not connect: '. mysql_error());mysql_select_db('dedecmsv57utf8sp1') ordie('Could not select database');$query='SELECT * FROM dede_sys_enum';$result= mysql_query($query) ordie('Query failed: '. mysql_error());echo"<table;while($line= mysql_fetch_array($result, MYSQL_ASSOC)) {    echo"\t<tr>\n";    foreach($lineas$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入口文件的前后。
 即
| 1 2 3 4 | <?php$begin=microtime();$begin=microtime_float($begin);?> | 
这段放开头
| 1 2 3 4 | $end=microtime();$end=microtime_float($end);echo'time:'.($end-$begin);?> | 
这段放结尾
 Control是这么写的
| 1 2 3 4 5 6 7 8 | classTest extendsCI_Controller {publicfunctionindex(){$this->load->model('testm');        $data['test']=$this->testm->testmf();        $this->load->view('test',$data);}} | 
为了像那么回事
 我分别用了model 和view
 model是这样的
| 1 2 3 4 5 6 7 | classTestm extendsCI_Model {    publicfunctiontestmf() {        $this->load->database();        $sql="SELECT * FROM dede_sys_enum";        return$this->db->query($sql);    }} | 
View的关键代码是这样的
| 1 2 3 4 | <?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:
我在自建的入口文件里填写如下代码:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $begin=microtime();$begin=microtime_float($begin);functionmicrotime_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
| 1 2 3 4 5 6 7 8 | classIndexAction extendsAction {    publicfunctionindex(){        $Sys_enum=newModel("sys_enum");        $list=$Sys_enum->select();        $this->assign('test', $list);        $this->display();    }} | 
还有View的关键代码如下
| 1 2 3 4 | <?phpforeach($testas$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的框架吧。
纯PHP Codeigniter(CI) ThinkPHP效率测试的更多相关文章
- NHibernate Demo 和 效率测试
		本文关于NHibernate的Demo和效率测试,希望对大家有用. 1.先去官网下载Nhibernate 2.放入到项目中并建立Helper类 private static ISession _Ses ... 
- 关于 pgsql 数据库json几个函数用法的效率测试
		关于 pgsql 数据库json几个函数用法的效率测试 关于pgsql 几个操作符的效率测试比较1. json::->> 和 ->> 测试方法:单次运行100次,运行10个单次 ... 
- Python_线程、线程效率测试、数据隔离测试、主线程和子线程
		0.进程中的概念 三状态:就绪.运行.阻塞 就绪(Ready):当进程已分配到除CPU以外的所有必要资源,只要获得处理机便可立即执行,这时的进程状态成为就绪状态. 执行/运行(Running)状态:当 ... 
- 进程池原理及效率测试Pool
		为什么会有进程池的概念? 当我们开启50个进程让他们都将100这个数减1次减到50,你会发现特别慢! 效率问题,原因: 1,开辟内存空间.因为每开启一个进程,都会开启一个属于这个进程池的内存空间,因为 ... 
- postgresql-int,bigint,numeric效率测试
		在postgresql9.5的时候做过一个测试就是sum()的效率最终的测试结果是sum(int)>sum(numeric)>sum(bigint)当时比较诧异为啥sum(bigint)效 ... 
- ORM for Net主流框架汇总与效率测试
		框架已经被越来越多的人所关注与使用了,今天我们就来研究一下net方面的几个主流ORM框架,以及它们的效率测试(可能会有遗漏欢迎大家讨论). ORM框架:Object/Relation Mapping( ... 
- Python--day39--进程池原理及效率测试
		#为什么要有进程池的概念 #效率 #每次开启进程都要创建一个属于这个进程的内存空间 #寄存器 堆栈 文件 #进程过多 操作系统调度进程 # #进程池 #python中的 先创建一个属于进程的池子 #这 ... 
- 关于pgsql 几个操作符的效率测试比较
		关于pgsql 几个操作符的效率测试比较1. json::->> 和 ->> 测试方法:单次运行100次,运行10个单次取平均时间.测试结果:->> 效率高 5% ... 
- CodeIgniter(CI)框架中的验证码
		在CodeIgniter框架中,CI本身自带了验证码,但是查看文档的时候,发现: 需要新建一个表,用来存储验证码信息.因为习惯了session存储验证码信息,所以我把我认为比较好看的验证码应用在了CI ... 
随机推荐
- python去除rpm仓库中同名低版本的包
			编程思路1 遍历目标路径的rpm包并保存特性包列表: 2 利用python模块rpmUtils提取RPM包的特征信息:包名 版本号 架构 3 遍历特性列表中存在重复包名的rpm, 将低版本的rpm包 ... 
- vue中记录页面的滚动距离
			业务需求:pageOne页面是一个商品列表页面,在这个页面点击商品,就会跳转到pageTwo商品详细页面.此时再从pageTwo页面返回到pageOne页面时,pageOne页面需要做到:1.记录pa ... 
- Redis数据结构之整数集合-intset
			当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis会使用整数集合(intset)来存储集合元素. intset是紧凑的数组结构,同时支持16位.32位和64位整数. 结构 struc ... 
- ArcGis EsriAddin加载项的安装路径与程序启动路径
			安装路径: 在C:\Users\用户名\Documents\ArcGIS\AddIns\Desktop版本号\{…………一组GUID…………}这样的路径下. 例:C:\Users\Adminis ... 
- SingalR  构建 推送服务器初探
			项目需要用到推送,于是重新研究了下推送框架,最好能够独立成一个服务,与业务无关的服务,可以给所有的项目通用.找了好久最终决定用SinglR 框架. Signal 是微软支持的一个运行在 Dot NET ... 
- Java-向上转型后调用方法和属性的注意事项
			/*多态的注意事项 (1)如果子类重写了父类方法, 意味着子类里定义的方法彻底覆盖了父类里同名的方法, 系统将不可能把父类里的方法转移到子类中 补充对(1)的个人理解: 当s向上转型传给了b, b即使 ... 
- 记一次为解决Python读取PDF文件的Shell操作
			目录 一.背景 二.问题 三.解决 四.一顿分析及 Shell 操作 五.后续 一.背景 本想将 PDF 文件转换为 Word 文档,然后网上搜索了一下发现有挺多转换的软件.有的是免费的.收费,咱也不 ... 
- 使用CGIHTTPServer搭建简单网站
			目录 一.前提准备 二.搭建web网站 如何快速搭建web网站?这个问题对于我这样的小白来说简直就是一脸懵逼毫无头绪.在学习python的过程接触到了 CGI 编程,至于CGI是什么?怎么运行的?这我 ... 
- spring mvc hibernate spring 整合的增删改查+后台校验+bootstrap
			整合之前先知道大概的思路,首先要知道每个框架的重点要点. 1.首先我们从数据库开始 --创建数据库 create database gs --创建表 create table food ( id ,) ... 
- spark在collect收集数据的时候出现outOfMemoryError:java heap space
			spark的collect是action算子,所有最后会以数组的形式返回给driver端,当数据太大的时候就会出现堆内存溢出.OutofMemoryError:java heap space. 在sp ... 
