Drupal ob_flush() 性能缓慢且不稳定
Drupal ob_flush() slow and variable performance
使用 XHProf 分析 Drupal 站点后。我看到 ob_flush() 调用的可变性能,每页只调用一次。
首次加载页面 x
Function Calls Ex Wall Wall %
ob_flush 1 1,712ms 39.5%
第二次加载页面 x
Function Calls Ex Wall Wall %
ob_flush 1 270ms 24.5%
第三次加载页面 x
Function Calls Ex Wall Wall %
ob_flush 1 300ms 25.3%
在 php.ini 设置中我禁用了 out_buffering = 0 似乎是对 Drupal 的建议
我看到其他 queries 对此没有提供明确的解决方案。
有没有办法提高这种性能?
看来 ob_flush 函数受到 Drupal bootstrap 之后的一切的严重影响。我启用了实体缓存模块,该模块将用户缓存到 APCcache 并保留到数据库(无法为其他实体禁用它)。缓存意味着要从数据库发送或检索查询数据。这种减慢反映在 ob_flush 中,因为直到内容不完整 generated/cached 或检索它无法刷新。
禁用实体缓存模块后。现在我看到 ob_flush 消耗低于 300 毫秒,这仍然很高,但不像以前那么多变和极高。
使用 XHProf 分析 Drupal 站点后。我看到 ob_flush() 调用的可变性能,每页只调用一次。
首次加载页面 x
Function Calls Ex Wall Wall % ob_flush 1 1,712ms 39.5%
第二次加载页面 x
Function Calls Ex Wall Wall % ob_flush 1 270ms 24.5%
第三次加载页面 x
Function Calls Ex Wall Wall % ob_flush 1 300ms 25.3%
在 php.ini 设置中我禁用了 out_buffering = 0 似乎是对 Drupal 的建议
我看到其他 queries 对此没有提供明确的解决方案。
有没有办法提高这种性能?
看来 ob_flush 函数受到 Drupal bootstrap 之后的一切的严重影响。我启用了实体缓存模块,该模块将用户缓存到 APCcache 并保留到数据库(无法为其他实体禁用它)。缓存意味着要从数据库发送或检索查询数据。这种减慢反映在 ob_flush 中,因为直到内容不完整 generated/cached 或检索它无法刷新。
禁用实体缓存模块后。现在我看到 ob_flush 消耗低于 300 毫秒,这仍然很高,但不像以前那么多变和极高。