欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

逐步提升php框架的性能

 更新時間:2008年01月10日 20:32:43   作者:  
逐步提升php框架的性能
一、當前框架存在什么問題

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

<? 
class userController extends controller{ 

      function loginAction(){ 
            //login 
      } 

      function registerAction(){ 

      } 

?>  

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

二、問題不是因為面對對象的錯
   很多人認為“包含多余的冗余代碼是面對對象的錯誤”,我不同意。正如我上篇說的:面對對象能實現(xiàn)面對過程的所有功能,并且做的更好!關(guān)鍵是采用面對對象的思維來使用面對對象,而不是用面對過程的思維來寫面對對象的程序。

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

<? 
class loginAction extends Action{ 

    function run(){ 

    } 


?> 

和registerAction.php

<? 
class registerAction extends Action{ 

    function run(){ 

    } 


?> 

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

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

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

<? 
   class user extends Action(){ 

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

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

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

相關(guān)文章

  • PHP實現(xiàn)預(yù)定義鉤子和自定義鉤子的簡單示例

    PHP實現(xiàn)預(yù)定義鉤子和自定義鉤子的簡單示例

    這篇文章主要給大家介紹了PHP實現(xiàn)預(yù)定義鉤子和自定義鉤子,在PHP中,鉤子(Hooks)是一種機制,允許開發(fā)人員在特定的時機插入自定義代碼,通過使用鉤子,開發(fā)人員可以在應(yīng)用程序的特定事件發(fā)生時執(zhí)行自定義的功能或邏輯,文中有詳細的代碼講解,需要的朋友可以參考下
    2023-11-11
  • PHP實現(xiàn)生成二維碼的示例代碼

    PHP實現(xiàn)生成二維碼的示例代碼

    為了滿足用戶渠道推廣分析和用戶賬號綁定等場景的需要,公眾平臺提供了生成帶參數(shù)二維碼的接口。本文將利用這些接口實現(xiàn)生成臨時二維碼和永久二維碼,需要的可以參考一下
    2022-05-05
  • php通過header增加Key、Sign和Timestamp實現(xiàn)鑒權(quán)機制的流程步驟

    php通過header增加Key、Sign和Timestamp實現(xiàn)鑒權(quán)機制的流程步驟

    在現(xiàn)代Web應(yīng)用程序中,鑒權(quán)是確保只有合法用戶能夠訪問資源的關(guān)鍵部分,在PHP中,你可以通過在HTTP請求的Header中添加Key、Sign和Timestamp來實現(xiàn)鑒權(quán)機制,需要的朋友可以參考下
    2023-10-10
  • PHP設(shè)計模式之模板模式定義與用法詳解

    PHP設(shè)計模式之模板模式定義與用法詳解

    這篇文章主要介紹了PHP設(shè)計模式之模板模式定義與用法,較為詳細的說明了模板模式的原理、功能、應(yīng)用及php定義、使用模板模式的相關(guān)操作技巧,代碼簡單易懂,需要的朋友可以參考下
    2018-12-12
  • php 連接mysql連接被重置的解決方法

    php 連接mysql連接被重置的解決方法

    windows7下 php連接mysql的問題,php 連接mysql連接被重置的解決方法,需要的朋友可以參考下。
    2011-02-02
  • php使用exec shell命令注入的方法講解

    php使用exec shell命令注入的方法講解

    exec()是用于執(zhí)行shell命令的函數(shù),下面說的就是如何使用他用于shell注入的方法講解
    2013-11-11
  • php下批量掛馬和批量清馬代碼

    php下批量掛馬和批量清馬代碼

    批量掛馬和批量清馬程序PHP版,所以黑客工具的對立性,在黑客手里是破壞工具,在維護的站長來說是修正工具。
    2011-02-02
  • 最新評論