比較ThinkPHP5和無框架代碼在高并發(fā)下的效率

下面由thinkphp教程欄目給大家介紹比較thinkphp5和無框架代碼在高并發(fā)下的效率,希望對需要的朋友有所幫助!

比較ThinkPHP5和無框架代碼在高并發(fā)下的效率

測試的業(yè)務(wù)邏輯:測試一個抽獎功能,使用MySQL數(shù)據(jù)庫的樂觀鎖機(jī)制防止超發(fā)。

關(guān)鍵代碼:

$prizeArr?=?array( ????????????array('level'?=&gt;?1,?'name'?=&gt;?'手機(jī)',?'randnum'?=&gt;?10), ????????????array('level'?=&gt;?2,?'name'?=&gt;?'100元話費(fèi)',?'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'];????//剩余數(shù)量 ?????$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代碼部分:

立即學(xué)習(xí)PHP免費(fèi)學(xué)習(xí)筆記(深入)”;

$res?=?Db::table("lottory")-&gt;where('id',$level)-&gt;find(); ????????? ?????????$dataNum?=?$res['prizenum'];????//剩余數(shù)量 ?????????$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測試高并發(fā)下的表現(xiàn):

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

測試在同一服務(wù)器上,web服務(wù)器使用nginx,其中TP5取消了日志寫入(第一次沒有去掉,QPS更低)。

其中關(guān)鍵數(shù)據(jù):

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

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

同樣的業(yè)務(wù)邏輯,無框架是tp5的4.7倍。

不知道TP5是不是還有什么地方?jīng)]有優(yōu)化,兩個頁面代碼均沒有使用緩存。

各位大神有對tp5了解深的指導(dǎo)一下,是否還有其它地方要優(yōu)化?

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊15 分享