比较ThinkPHP5和无框架代码在高并发下的效率

下面由thinkphp教程栏目给大家介绍比较thinkphp5和无框架代码在高并发下的效率,希望对需要的朋友有所帮助!

比较ThinkPHP5和无框架代码在高并发下的效率

测试的业务逻辑:测试一个抽奖功能,使用MySQL数据库的乐观锁机制防止超发。

关键代码:

$prizeArr = array(             array('level' =&gt; 1, 'name' =&gt; '手机', 'randnum' =&gt; 10),             array('level' =&gt; 2, 'name' =&gt; '100元话费', 'randnum' =&gt; 5010),             array('level' =&gt; 3, 'name' =&gt; '自拍杆', 'randnum' =&gt; 15010),             array('level' =&gt; 4, 'name' =&gt; '5元红包', 'randnum' =&gt; 115010),         );          $rand_num = mt_rand(1, 115010);         $level = 4;                  for ($i = 0; $i <p>不用框架代码:</p><pre class="brush:php;toolbar:false">$sql = "select * from `lottory` where id=".$level." ";      $res = $rnpdo-&gt;RnFetchRow($sql, array());      $dataNum = $res['errmsg']['prizenum'];    //剩余数量      $version = $res['errmsg']['version'];    //版本号            $updatesql = "update `lottory` set prizenum=prizenum-1,version=version+1 where id=".$level." and version=".$version." ";      $updateres = $rnpdo-&gt;RnExec($updatesql, array());      //print_r($res);      if(!empty($updateres['errmsg'])) {          //插入抽奖记录          $openid = $version.'-'.createOpenid();          $time = time();          $insertSql = "insert into `lottory_list` ( `openid`, `prize`, `posttime`) values ('$openid','$level','$time') ";          $rnpdo-&gt;RnPtmQuery($insertSql, array());                    echo 'success';      }      else      {          echo 'fail';      }

使用thinkPHP5代码部分:

立即学习PHP免费学习笔记(深入)”;

$res = Db::table("lottory")-&gt;where('id',$level)-&gt;find();                    $dataNum = $res['prizenum'];    //剩余数量          $version = $res['version'];    //版本号          dump($res);                    $result = Db::table('lottory')-&gt;where('id', $level)-&gt;where('version', $version)-&gt;update(['prizenum' =&gt; ['exp','prizenum-1'],'version' =&gt; ['exp','version+1']]);          dump($result);          if($result) {              //插入抽奖记录              $openid = $version.'-'.createOpenid();              $time = time();              $data = ['openid' =&gt; $openid, 'prize' =&gt; $level,'posttime'=&gt;$time];              Db::table('lottory_list')-&gt;insert($data);                            echo 'success';          }          else          {              echo 'fail';          }

使用ab测试高并发下的表现:

ab -c 1000 -n 10000 http://localhost/lottory.php ab -c 1000 -n 10000 http://localhost/index.php?s=index/index/hello

测试在同一服务器上,web服务器使用nginx,其中TP5取消了日志写入(第一次没有去掉,QPS更低)。

其中关键数据:

无框架QPS:Requests per second:   972.21 [#/sec] (mean)

thinkPHP5:Requests per second:    206.92 [#/sec] (mean)

同样的业务逻辑,无框架是tp5的4.7倍。

不知道TP5是不是还有什么地方没有优化,两个页面代码均没有使用缓存。

各位大神有对tp5了解深的指导一下,是否还有其它地方要优化?

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享