影响php框架性能的原因,window_逐步提升php框架的性能,一、当前框架存在什么问题 - phpStudy...

逐步提升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了,后来不得不考虑分流。但很不理想。

二、问题不是因为面对对象的错

很多人认为“包含多余的冗余代码是面对对象的错误”,我不同意。正如我上篇说的:面对对象能实现面对过程的所有功能,并且做的更好!关键是采用面对对象的思维来使用面对对象,而不是用面对过程的思维来写面对对象的程序。

三、如何解决这个问题呢?

解决的关键就是把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的代码。

但这样又存在两个问题:

第一、实际项目中action文件会非常多,如何有效的管理是个关键。

第二、同一功能模块中的操作可能有共同的代码,如何共享?

第一个问题比较好解决。把同一个模块的action放到一个子文件夹中,也就是说允许多级目录。比如说我们上面的代码中就可以把loginAction.php和registerAction.php放到user目录中。但注意这样会增加路由分配的麻烦度,如何实现就看读者自己去思考了。

第二个问题的解决也不难,关键是具有面向对象的思维。这里,我们就可以采用对象的继承来实现。比如说上面的例子,我们可以先定义一个user抽象类。

class user extends Action()

{

function __contruct()

{

//比如说权限检查

}

}

?>

然后让loginAction 和RegisterAction都继承与user。这样就可以很好解决了。

四、总结

上面的解决方案只是我这几天的想法,可能还不够完善。具体应用大家可以再细化并优化。对于MVC、框架我始终认为在PHP5中,对象比过程更适合,也更有效(除去创建对象本身的成本)。对于使用函数来实现框架,前一段在PCTI的讲课中我也试过,我觉得思路都差不多,但相对来说我更喜欢对象。

最后,上面的解决方案参考了java中的struts的部分思想。在此表示感谢相关阅读:

Oracle正则表达式中注意的问题

详细解析Oracle RAC在Linux下的安装

OpenSUSE Linux下开启3D桌面特效方法

刷新时清空文本框内容的js代码

SQL高级应用之使用SQL查询Excel表格数据的方法

谈谈新手如何学习PHP

基于jquery的图片懒加载js

一个更简单的无限级分类菜单代码

JavaScript框架hover事件处理

Asp中Server.ScriptTimeOut属性需要注意的一点分析

解决Linux和Windows双系统的引导问题

数据库设计指南(三)

dos if 条件判断

php addslashes及其他清除空格的方法是不安全的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值