php /代码层和html /视图层分离

时间:2011-06-23 11:32:47

标签: php model-view-controller templates n-tier-architecture

更新

我已经研究了各种php框架(yii framework看起来特别好/有趣),与简单的模板引擎(包括MVC和其他功能,如数据库集成)相比,它们似乎提供了一些非常好的功能。我确信需要一些代码和显示之间的分离。这是否只是简单的php(作为模板引擎),模板引擎(例如smarty)或框架可能在很大程度上取决于应用程序和公司/程序员的选择。 (我可以在自己的时间继续研究一个问题,并且可能无法得到明确的答案)

我还有一个问题。是否可以进行多层设置(如在多个单独的单独服务器中),其中一个运行php代码(“应用程序逻辑”),以XML或JSON或任何其他数据交换格式的形式输出被发送到web / HTML服务器,它接收来自php代码的输出并将其转换为HTML ,这样每秒服务的总平均页数比仅使用单层更快。 (即使那个单层从两个单独的层中获得了所有服务器的组合。我也猜测XML的解析时间(可能是JSON)会减少它,但是可以使用两个层之间的新协议为此目的进行了优化。)


我正在思考HTML和代码分离(实现MVC并允许Web设计人员(如外观/视图)和Web开发人员(如代码/控制器)独立工作)我认为应该可以拥有应用程序运行PHP(应用程序/业务逻辑/控制器)的服务器和从服务器服务器获取输出并将其插入HTML标记(外观/视图)的Web服务器。

理论上它有点像应用程序服务器和数据库服务器的分离,而对于单个请求,由于网络开销,对于那个用户来说可能稍微慢一点,你可以用两个小的处理来处理更多的同时请求服务器比一个大服务器。例如,应用程序服务器可以将其处理(视图无关)信息发送到Web服务器,然后将其插入到HTML中(取决于客户端,例如移动浏览器,这可能是不同的)。有可能将HTML缓存在ram而不是动态内容中,这样即使页面对于每个用户(例如Facebook)看起来相当不同,与单个HTML / PHP组合相比仍然可以获得一些速度优势。当然,它也会将HTML与应用程序代码(PHP)分开。

我调查了这个,我遇到了许多PHP模板引擎,这将有助于HTML与代码的分离,但是其中一些比使用PHP慢得多,“编译”模板似乎没有那么多差异(并将阻止使用单独的Web / HTML和代码/ PHP服务器)。虽然使用PHP本身作为模板引擎可能对我来说可以作为单个开发人员使用,但它不适用于具有单独Web设计人员的环境。

总而言之,我正在寻找/创建一个MVC框架和模板引擎/系统的组合,这将促进HTML和代码分离以及实际上更快的视图和模型/控制器分离< / em>而不仅仅是使用单层。或者,更准确地说,具有比单层更好的可扩展性(尽管我不希望单页的速度降低,如果有的话)。

1 个答案:

答案 0 :(得分:1)

你有没有看过一个庞大的PHP框架?他们中的大多数以这种或那种形式运动所有这些。哎呀,我自己写了一些,虽然有一个严格的XML模板引擎来摆脱贪婪的PHP开发人员。 :)(xSiteable如果你想查看代码)

MVC很好,但是有很多方法可以让这只猫变亮,而坦率地说,MVC(或其任何一种化身,突变和变化)会以复杂性为代价进行分离,所以你肯定不会让它本身更快。我唯一能想到的是你的模板引擎以后端业务逻辑为基础吐出(即以缓存方式写入磁盘)纯PHP文件,然后你就可以使用各种加速器了。但是,你仍然需要决定模板环境应该是什么。带有散布符号或PHP,XML或其他内容的HTML?

编译器很容易制作,但我有点谨慎。我怀疑你会在一个良好缓存的模板引擎上获得更多的速度改进(至少不会增加复杂性),但它肯定是可行的。

但为什么不只使用PHP本身,以及简单的Apache重写规则(使用'uri'作为参数)?

$theme = 'default' ;
$dbase = 'mysql; '
$logic = $_REQUEST['uri'] ;  // or some other method, like __this__ with starting folder snipped

include 'themes/top.html' ;
include 'logic/'.$logic.'/header.php' ;
include 'themes/mid.html' ;
include 'logic/'.$logic.'/menu.php' ;
include 'themes/section1.html' ;
include 'logic/'.$logic.'/section1.php' ;
include 'themes/section2.html' ;
include 'logic/'.$logic.'/section2.php' ;
include 'themes/section3.html' ;
include 'logic/'.$logic.'/section3.php' ;
include 'themes/bottom.html' ;
include 'logic/'.$logic.'/footer.php' ;
include 'themes/end.html' ;

它是粗野的,快速的,并且确实提供了你想要的东西,虽然它既不优雅也不漂亮,呃,推荐。 :)