代码之家  ›  专栏  ›  技术社区  ›  Vitalii Ponomar

金字塔:为什么NewRequest用户每次请求都会打3次电话?

  •  0
  • Vitalii Ponomar  · 技术社区  · 14 年前

    这对我来说很有趣,我已经检查过了。正如你所读到的 NewRequest 订阅者在每个请求上被调用3次(或者在启用debug_toolbar的情况下调用7次…),而 BeforeRender 订阅者在每个请求上被调用1次(在启用debug_toolbar的情况下被调用>30次)。

    所以,如果我想连接 数据库 到我的项目 新建请求 事件,每个请求将执行3次。。。

    为什么?为什么服务器应该在每个请求上做3次相同的工作?

    提前感谢!!!

    1 回复  |  直到 14 年前
        1
  •  6
  •   Michael Merickel    14 年前

    金字塔不调用 NewRequest 每个请求不止一次。发生这种情况的唯一原因是,如果您意外地多次注册您的订户。人们认为它被多次调用的另一个常见原因是,浏览器通常会在请求后发出一个favicon请求,但这只占2次调用。你能显示任何输出或更多地描述你的问题,让我相信订阅者真的被调用了不止一次吗?

    BeforeRender 将被调用多次(每个渲染的模板调用一次)。当调试工具栏被启用时,每个请求上都会呈现很多内容,但即使如此,30听起来也是我预期的3倍。

    新建请求 subscriber,因为该subscriber也被调用用于静态资源(实际上是所有请求)。更好的模式是在 request 对象通过 config.set_request_property 。这将在每次请求中第一次使用数据库时进行连接,如果不这样做,则不会影响性能。