首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
vba
java
audio
less
header
case
bytecode
buffer
int
solr
php5
python2
yaml
utf-8
php
jsp
node.js
match
hook
loops
char
join
express
text
email
web
grid
stream
usb
window
frameworks
js
future
php7
c语言
settings
config
jar
command
dockerfile
get
cPlusPlus
heap
regex
shell
foreach
nodejs
lua
javascript
chat
controller
list
request
range
blob
bitmap
plugins
python3
erlang
metadata
main
object
input
keyword
python
dll
testing
数组
bit
ascii
httpclient
split
datetime
typescript
emoji
httprequest
vbscript
netty
go
当前位置:
开发笔记
>
编程语言
> 正文
逐步提升php框架的性能
作者:撒药拿拉的唐小妄 | 来源:互联网 | 2018-03-17 14:52
逐步提升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的代码。
但这样又存在两个问题:
第一、实际项目中action文件会非常多,如何有效的管理是个关键。
第二、同一功能模块中的操作可能有共同的代码,如何共享?
第一个问题比较好解决。把同一个模块的action放到一个子文件夹中,也就是说允许多级目录。比如说我们上面的代码中就可以把loginAction.php和registerAction.php放到user目录中。但注意这样会增加路由分配的麻烦度,如何实现就看读者自己去思考了。
第二个问题的解决也不难,关键是具有面向对象的思维。这里,我们就可以采用对象的继承来实现。比如说上面的例子,我们可以先定义一个user抽象类。
class user extends Action(){
function __contruct(){
//比如说权限检查
}
}
?>
然后让loginAction 和RegisterAction都继承与user。这样就可以很好解决了。
四、总结
上面的解决方案只是我这几天的想法,可能还不够完善。具体应用大家可以再细化并优化。对于MVC、框架我始终认为在PHP5中,对象比过程更适合,也更有效(除去创建对象本身的成本)。对于使用函数来实现框架,前一段在PCTI的讲课中我也试过,我觉得思路都差不多,但相对来说我更喜欢对象。
最后,上面的解决方案参考了java中的struts的部分思想。在此表示感谢!
php
mvc
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
php
MVC设计模式的介绍和演化过程
本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ...
[详细]
蜡笔小新 2023-12-11 14:58:14
php
MySQL中的MVVC多版本并发控制机制的应用及实现
本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ...
[详细]
蜡笔小新 2023-12-11 13:09:19
text
Smarty / views / templates中的数据库调用 - Database calls in Smarty/views/templates
Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ...
[详细]
蜡笔小新 2023-12-10 20:58:53
php
数据库锁的分类和应用
本文介绍了数据库锁的分类和应用,包括并发控制中的读-读、写-写、读-写/写-读操作的问题,以及不同的锁类型和粒度分类。同时还介绍了死锁的产生和避免方法,并详细解释了MVCC的原理以及如何解决幻读的问题。最后,给出了一些使用数据库锁的实际场景和建议。 ...
[详细]
蜡笔小新 2023-12-09 10:28:49
hook
php simplemvc,学习猿地一个简单的 PHPsimplemvc (提供基本的功能)
ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ...
[详细]
蜡笔小新 2023-10-17 20:32:19
web
Sencha Touch学习使用心得 Unit 1 搭架构
本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ...
[详细]
蜡笔小新 2023-12-11 12:42:44
int
MVP架构模式及其在国庆技术博客中的应用
本文介绍了MVP架构模式及其在国庆技术博客中的应用。MVP架构模式是一种演变自MVC架构的新模式,其中View和Model之间的通信通过Presenter进行。相比MVC架构,MVP架构将交互逻辑放在Presenter内部,而View直接从Model中读取数据而不是通过Controller。本文还探讨了MVP架构在国庆技术博客中的具体应用。 ...
[详细]
蜡笔小新 2023-12-11 11:57:58
web
从零基础到精通的前台学习路线
随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ...
[详细]
蜡笔小新 2023-12-10 20:05:15
web
Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ...
[详细]
蜡笔小新 2023-12-10 19:32:05
web
ASP.NET Core MVC入门及基础使用教程
本文介绍了ASP.NET Core MVC的入门及基础使用教程,根据微软的文档学习,建议阅读英文文档以便更好理解,微软的工具化使用方便且开发速度快。通过vs2017新建项目,可以创建一个基础的ASP.NET网站,也可以实现动态网站开发。ASP.NET MVC框架及其工具简化了开发过程,包括建立业务的数据模型和控制器等步骤。 ...
[详细]
蜡笔小新 2023-12-10 16:58:35
text
MySQL数据库锁机制及其应用(数据库锁的概念)
本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ...
[详细]
蜡笔小新 2023-12-10 15:54:07
jsp
从坚持到喜欢——我对软件工程的选择和学习经历
本文讲述了作者从最初对软件工程的选择迷茫到逐渐喜欢并坚持学习的经历。作者在大学期间通过学习专业课和参与项目开发,不断挑战自己并取得成就感。虽然曾考虑过转专业和复读,但最终决定坚持学习软件工程,并为自己的未来努力奋斗。作者还提到了大学生活与自己最初的预期不同,但对此并没有太多抱怨。 ...
[详细]
蜡笔小新 2023-12-10 13:30:14
jsp
使用J2SE模拟MVC模式开发桌面应用程序的工程包的介绍
以我开发过的一个娱乐管理系统为例:下图为我系统的业务逻辑的MVC流程:下图为以Eclipse开发中各包的说明:转载于:https:blog ...
[详细]
蜡笔小新 2023-12-10 13:16:52
web
wpf+mvvm代码组织结构及实现方式
本文介绍了wpf+mvvm代码组织结构的由来和实现方式。作者回顾了自己大学时期接触wpf开发和mvvm模式的经历,认为mvvm模式使得开发更加专注于业务且高效。与此同时,作者指出mvvm模式相较于mvc模式的优势。文章还提到了当没有mvvm时处理数据和UI交互的例子,以及前后端分离和组件化的概念。作者希望能够只关注原始数据结构,将数据交给UI自行改变,从而解放劳动力,避免加班。 ...
[详细]
蜡笔小新 2023-12-10 10:07:44
web
shiro java配置问题:加入Shiro listener后启动失败
本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ...
[详细]
蜡笔小新 2023-12-10 09:43:05
撒药拿拉的唐小妄
这个家伙很懒,什么也没留下!
Tags | 热门标签
vba
java
audio
less
header
case
bytecode
buffer
int
solr
php5
python2
yaml
utf-8
php
jsp
node.js
match
hook
loops
char
join
express
text
email
web
grid
stream
usb
window
RankList | 热门文章
1
测试是诗,唱诵远方,不该苟且!
2
软件生命周期SDLC的六个阶段简单介绍
3
怎样添加删除控制文件
4
进销存里2个很头疼的问题求解决方法???
5
建立数据库索引的优缺点,分析一张表上如何建立索引
6
生物仿生技术能够运用到AI智能上?
7
Oracle项目管理系统之环境与职业健康管理
8
AI 赋能 DAO,ONEDAO 上会出现什么形态的 DAO?( 三)
9
近千亿文娱市场成巨头必争之地 网经社数字文娱台上线
10
腾讯QQ会保存从开始至今所有用户聊天记录吗?
11
无法通过8192在表空间中扩展
12
Navicat连接Oracle时报错ORA28547:完美解决2022
13
在关系数据库中允许空值的一些缺点
14
价值_楚才国科携手格凡软件CEO尹俊文:让数据更加安全,与安全共创价值
15
sql字段包含逗号
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有