目前主流的框架Zend Framework、Cakephp等都采用了MVC模式,同時(shí)實(shí)現(xiàn)了URL的路由分配。比如說(shuō)http://www.xxx.com/user/login就會(huì)映射到userController對(duì)象中的loginAction方法,http:// " /> WWW国产色情在线观看APP,亚洲 欧美 日韩 精品 自拍,女性酥酥影院

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

逐步提升php框架的性能

一、當(dāng)前框架存在什么問(wèn)題

     目前主流的框架Zend Framework、Cakephp等都采用了MVC模式,同時(shí)實(shí)現(xiàn)了URL的路由分配。比如說(shuō)http://www.xxx.com/user/login就會(huì)映射到userController對(duì)象中的loginAction方法,http://www.xxx.com/user/register對(duì)應(yīng)為userController對(duì)象中的registerAction方法。這樣對(duì)應(yīng)的userController對(duì)象就很可能是這樣的。

<? 
class userController extends controller{ 

      function loginAction(){ 
            //login 
      } 

      function registerAction(){ 

      } 

?>  

    那么這存在什么樣的問(wèn)題呢?很明顯:包含了不必要的代碼!比如說(shuō)你訪問(wèn)/user/login完全沒(méi)必要包含registerAction()方法里面的內(nèi)容。上面的代碼只是簡(jiǎn)單的例子,一般來(lái)說(shuō)controller對(duì)應(yīng)的是一個(gè)小功能模塊,它會(huì)有比較多的功能操作的,尤其在比較大的項(xiàng)目中。這樣,如果一個(gè)controller里面有十幾個(gè)方法,那么每請(qǐng)求就包含了很多冗余的代碼。而在php性能提升中很重要的一點(diǎn):盡量避免包含不相關(guān)代碼!
  在我最近的小項(xiàng)目中,我采用自己的phpbean框架(框架類似Zend Framework),在后來(lái)的開發(fā)發(fā)現(xiàn)的確每個(gè)controller包含太多action了,后來(lái)不得不考慮分流。但很不理想。項(xiàng)目地址:http://www.songjin.NET:8080。

二、問(wèn)題不是因?yàn)槊鎸?duì)對(duì)象的錯(cuò)
   很多人認(rèn)為“包含多余的冗余代碼是面對(duì)對(duì)象的錯(cuò)誤”,我不同意。正如我上篇說(shuō)的:面對(duì)對(duì)象能實(shí)現(xiàn)面對(duì)過(guò)程的所有功能,并且做的更好!關(guān)鍵是采用面對(duì)對(duì)象的思維來(lái)使用面對(duì)對(duì)象,而不是用面對(duì)過(guò)程的思維來(lái)寫面對(duì)對(duì)象的程序。

三、如何解決這個(gè)問(wèn)題呢?
     解決的關(guān)鍵就是把a(bǔ)ction分離開來(lái)。如何分離呢?首先要清楚controller的作用。controller是控制器,主要是做請(qǐng)求的轉(zhuǎn)發(fā),把http請(qǐng)求轉(zhuǎn)發(fā)到具體的action上。注意:在struts中是沒(méi)有存在controller文件的(注意不是說(shuō)沒(méi)有控制器),它是直接映射到action文件。所以我們完全可以把controller直接放到路由轉(zhuǎn)發(fā)中,而真正的流程控制、邏輯處理等放到action中。
   比如說(shuō)上面的例子,我們就可以分離成兩個(gè)文件:
loginAction.php

<? 
class loginAction extends Action{ 

    function run(){ 

    } 


?> 

和registerAction.php

<? 
class registerAction extends Action{ 

    function run(){ 

    } 


?> 

    這樣就實(shí)現(xiàn)了action的分離。當(dāng)你訪問(wèn)/user/login請(qǐng)求的時(shí)候就不會(huì)包含registerAction的代碼。
  但這樣又存在兩個(gè)問(wèn)題:
    第一、實(shí)際項(xiàng)目中action文件會(huì)非常多,如何有效的管理是個(gè)關(guān)鍵。
  第二、同一功能模塊中的操作可能有共同的代碼,如何共享?

  第一個(gè)問(wèn)題比較好解決。把同一個(gè)模塊的action放到一個(gè)子文件夾中,也就是說(shuō)允許多級(jí)目錄。比如說(shuō)我們上面的代碼中就可以把loginAction.php和registerAction.php放到user目錄中。但注意這樣會(huì)增加路由分配的麻煩度,如何實(shí)現(xiàn)就看讀者自己去思考了。

  第二個(gè)問(wèn)題的解決也不難,關(guān)鍵是具有面向?qū)ο蟮乃季S。這里,我們就可以采用對(duì)象的繼承來(lái)實(shí)現(xiàn)。比如說(shuō)上面的例子,我們可以先定義一個(gè)user抽象類。

<? 
   class user extends Action(){ 

         function __contruct(){ 
               //比如說(shuō)權(quán)限檢查 
         } 
   } 
?> 

    然后讓loginAction 和RegisterAction都繼承與user。這樣就可以很好解決了。

四、總結(jié)
    上面的解決方案只是我這幾天的想法,可能還不夠完善。具體應(yīng)用大家可以再細(xì)化并優(yōu)化。對(duì)于MVC、框架我始終認(rèn)為在php5中,對(duì)象比過(guò)程更適合,也更有效(除去創(chuàng)建對(duì)象本身的成本)。對(duì)于使用函數(shù)來(lái)實(shí)現(xiàn)框架,前一段在PCTI的講課中我也試過(guò),我覺(jué)得思路都差不多,但相對(duì)來(lái)說(shuō)我更喜歡對(duì)象。
   最后,上面的解決方案參考了Java中的struts的部分思想。在此表示感謝!

php技術(shù)逐步提升php框架的性能,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲欧洲无码AV在线观看你懂的 | 动漫美女人物被黄漫在线看 | 我和黑帮老大第365天第2季在线 | 视频区 国产 欧美 日韩 | 成人在线观看播放 | 欧美精品色视频 | 午夜啪啪免费视频 | 久久yy99re66| 日韩av片无码一区二区不卡电影 | WINDOWSCHANNEL老太 | 美女裸露胸部100%无遮挡 | 国产午夜在线视频 | 伊人网站在线 | 菊地凛子av | 1313久久国产午夜精品理论片 | 日日摸夜添夜夜夜添高潮 | 91嫩草国产在线观看免费 | 嫩草影院久久99 | 怡春院院日本一区二区久久 | 亚洲VA欧美VA天堂V国产综合 | 99视频这里只有精品 | 一个人免费完整观看日本 | 冰山高冷受被c到哭np双性 | CHINA末成年VIDEO学生 | 在线观看精品视频看看播放 | 久久视频精品3线视频在线观看 | 99精品国产电影 | 暖暖视频大全免费观看 | 亚州笫一色惰网站 | 富婆找黑人老外泻火在线播放 | 97精品国产亚洲AV超碰 | 欧美性xxxx18| 亚洲人成网站在线观看90影院 | 成人国产三级在线播放 | 日韩精品熟女一区二区三区中文 | 午夜国产大片免费观看 | 精品无码一区二区三区不卡 | 99在线观看视频 | 秋霞伦理手机在线看片 | 友田真希息与子中文字幕 | 乌克兰内射私拍 |