【问题标题】:php/code tier and html/view tier separationphp/code 层和 html/view 层分离
【发布时间】:2011-06-23 11:32:46
【问题描述】:

更新

我研究了各种 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 本身作为模板引擎可能对我作为单个开发人员来说可以正常工作,但它不适用于具有单独网页设计师的环境。

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

【问题讨论】:

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


    【解决方案1】:

    您是否研究过其中一个数不胜数的 PHP 框架?他们中的大多数人都以一种或另一种形式运动所有这些。哎呀,我自己写了一些,尽管使用严格的 XML 模板引擎来摆脱贪婪的 PHP 开发人员。 :) (xSiteable 如果你想看代码)

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

    编译器很容易制作,但我有点谨慎。我怀疑通过良好缓存的模板引擎,您会获得很多速度提升(至少与增加的复杂性相比),但它肯定是可行的。

    但为什么不直接使用 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' ;
    

    它粗鲁、快速,并且确实提供了您想要的东西,虽然它不优雅也不漂亮,也不推荐。 :)

    【讨论】:

    • 如果我完全不使用 MVC,您认为我可以提高速度吗? (只是为了争论)
    • 更少的复杂性 = 更快的代码,当然,除非你做了一些非常愚蠢的事情。任何人都可以那样让它变慢。 :)
    • 你知道这样的系统吗?
    • 是的。 PHP 本身,真的。 :) 我知道这是一个半傻的答案,但是简单地组织包含目录,也许带有一个主题变量,几乎就足够了。我已经更新了我上面的帖子。
    • “虽然它不优雅也不漂亮,也不推荐。”确切地。暂时忽略 MVC 方面,是否有一个系统/引擎/框架允许 php 在一台服务器上运行,并将该 php 代码的输出插入到另一台服务器上的 HTML 中?我确定您可以将 PHP 输出为 xml,然后在另一台服务器上使用 XSLT 转换将其转换为 HTML,但怀疑 xml 的解析和转换与直接输出到 HTML 相比是否会提高速度(即使额外的服务器用于转换)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2014-09-04
    相关资源
    最近更新 更多