当前位置: 首页 > news >正文

纯PHP Codeigniter(CI) ThinkPHP效率测试

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

    最近一直想做一个技术类的新闻站点,想做的执行效率高些,想用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的框架吧。

转载于:https://my.oschina.net/muchuanwazi/blog/87079

相关文章:

  • Spring Cloud-Honghu Cloud分布式微服务云系统—技术点
  • 在Winform,Silvelight,WPF等程序中访问Asp.net MVC web api
  • python中的json和pickle
  • 接口库设计总结
  • 庆祝一下开通了第一条博客!
  • 微软私有云
  • fileUpload(草稿)
  • .NET多线程执行函数
  • jdk1.5新特性2之动态参数列表
  • 进阶第二十一课 Python多线程
  • 【ASP】简单Url编码和Url解码实例
  • Flannel网络组件部署
  • EXCEL应用技巧:如何在每行下插入一个空行
  • docker 关闭镜像后,容器无法启动---Conflict. The container nam
  • 【翻译】Nova国际化
  • “大数据应用场景”之隔壁老王(连载四)
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • download使用浅析
  • HTTP 简介
  • Java,console输出实时的转向GUI textbox
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • js写一个简单的选项卡
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Lucene解析 - 基本概念
  • Object.assign方法不能实现深复制
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • spring学习第二天
  • 包装类对象
  • 程序员该如何有效的找工作?
  • ------- 计算机网络基础
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 三分钟教你同步 Visual Studio Code 设置
  • 实战|智能家居行业移动应用性能分析
  • 小程序测试方案初探
  • PostgreSQL之连接数修改
  • scrapy中间件源码分析及常用中间件大全
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (31)对象的克隆
  • (C++17) optional的使用
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (三)elasticsearch 源码之启动流程分析
  • (四)JPA - JQPL 实现增删改查
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)项目管理杂谈-我所期望的新人
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .NET CLR Hosting 简介
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET Framework杂记