程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 逐步提升php框架的性能

逐步提升php框架的性能

編輯:PHP綜合

一、當前框架存在什麼問題

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

<?
class userController extends controller{
function loginAction(){
//login
}
function registerAction(){
}
}
?>

那麼這存在什麼樣的問題呢?很明顯:包含了不必要的代碼!比如說你訪問/user/login完全沒必要包含registerAction()方法裡面的內容。上面的代碼只是簡單的例子,一般來說controller對應的是一個小功能模塊,它會有比較多的功能操作的,尤其在比較大的項目中。這樣,如果一個controller裡面有十幾個方法,那麼每請求就包含了很多冗余的代碼。而在PHP性能提升中很重要的一點:盡量避免包含不相關代碼!

在我最近的小項目中,我采用自己的phpbean框架(框架類似Zend Framework),在後來的開發發現的確每個controller包含太多action了,後來不得不考慮分流。但很不理想。項目地址:http://www.songjin.net:8080。

二、問題不是因為面對對象的錯

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

三、如何解決這個問題呢?

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

比如說上面的例子,我們就可以分離成兩個文件:

loginAction.php

<?
class loginAction extends Action{
function run(){
}
}
?>

和registerAction.php

<?
class registerAction extends Action{
function run(){
}
}
?>

這樣就實現了action的分離。當你訪問/user/login請求的時候就不會包含registerAction的代碼。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved