【问题标题】:ZF2: Forward controller plugin and performanceZF2:前向控制器插件和性能
【发布时间】:2015-02-17 00:38:39
【问题描述】:

ZF2 forward() 控制器插件会触发新的请求周期吗?还是其中的一部分?

我正在编写一个带有小部件内容的 ZF2 MVC 应用程序。小部件化的内容通过其自己的控制器操作公开,因为有时我需要使用 ajax 来访问它。

当我需要将小部件化内容合并为另一个操作的子视图时(即在整个页面加载时),该操作使用forward() 插件来获取小部件化内容。如果它会引入大量开销,尽管我会直接转到服务层(即使这种方法不那么 DRY)。

我意识到性能测试可以为我回答这个问题,但我距离能够运行这样的测试还有几周的时间。

编辑:当我说“新请求周期”时,我指的是 ZF2 MVC 请求周期,即路由、调度等。直觉上我怀疑它会第二次触发路由,但它可以从调度开始循环。我问这个问题是因为我知道在 ZF1 中它触发了第二个循环,这是一个真正的性能消耗。

【问题讨论】:

    标签: performance plugins zend-framework2


    【解决方案1】:

    “转发”有两个选项。理解 php 作为服务器端语言是一种处理器,用于抓取传入的请求并返回响应。

    也就是说,第一个“转发”使用框架内转发。这意味着只有一个请求和一个响应。在内部,框架调用一个控制器动作,然后调用另一个控制器动作。 Zend Framework 向前调用这个方法。

    第二个“转发”是真正的重定向,其中第一个响应包含 Location 标头和 302 http 状态代码。这会产生第二个请求并连续产生第二个响应。 Zend Framework 调用此方法重定向。

    因此,您在问题中谈到的转发不涉及任何会话或路由匹配参数,因为对操作的第二次调用是在同一个 php 进程中,所以所有变量都是已知的。

    Is it possible to forward data to another controller/action in Zend 2?

    【讨论】:

    • 谢谢奥列格,我在“编辑”标题下澄清了这个问题。
    • 我认为没有第二个循环,因为转发插件在当前循环中调度另一个控制器,使用已经初始化的变量,它提供了发送重定向请求的性能增益。
    猜你喜欢
    • 2023-03-19
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    相关资源
    最近更新 更多