如何提高Zend Framework应用程序中的页面加载速度

时间:2011-04-27 14:51:58

标签: performance zend-framework loading

我使用ZF开发了应用程序。应用程序很小,功能很多。

我使用Zend_Application(已在构造函数中使用自动加载器),Zend_Layout,Zend_view,Zend_form等。我目前的问题是,页面加载非常慢,而且在本地主机上也是如此。

我启用了xdebug,调查问题,在“tmp”文件夹中获得了一个cachegrind文件,并尝试使用WinCachegrind软件查看它。在那里,我可以看到为每个请求或页面加载运行了很多进程和函数。

此外,我已经为firefox安装了YSlow附加组件,并在几秒钟内观察到页面加载的速度......我已经将速度与ZF和非ZF应用程序进行了比较。从比较开始,非zf应用程序的页面加载时间不到1秒,对于ZF应用程序,它至少需要6-7秒。有多大的不同。

应用程序中发生的主要事情是:

1)每个请求都会发生数据库连接。

2)我没有明确地将视图添加到布局,ZF只是根据动作名称自动将它附加到layout.phtml。

3)有些窗口的表单只有很少的下拉框,可以从数据库中获取数据。

4)在为每个请求从DB加载特权之前,让具有ACL的菜单得到满足,但现在我已对其进行优化,以便它只能用于登录,其余的时间将从Zend_Registry。

我想附加cachegrind文件,以便某些人可以看到后台发生了什么,但我无法在此处看到附加选项。

有人请帮我找到解决方案。任何形式的帮助都非常感谢。非常感谢

1 个答案:

答案 0 :(得分:0)

让我们试着给出一些提示。

第一次数据库连接只应发生一次(除非您在数据库或多个数据库上使用多个权限访问权限)。因此,请检查您是否在Zend_Db_Tables对象中使用Singleton模式

然后你不使用 Zend_Cache 。您应该真正开始使用Zend_Cache并构建多个缓存对象。比方说,例如,具有长期存储的File cach,以及存储对象的memcache或Apc Cache。然后在几个层中使用这些缓存:

  • 将FileCache提供给Zend_Db_Table(defaultMetaDataCache),这样就可以避免一堆元数据查询,这些查询要求描述您使用的每个表的列。
  • 存储一个或多个Acl对象(取决于您如何使用Acl,如果您有一个包含所有规则的大型Acl或具有子集的多个规则)。并在构建时将它们存储在持续时间较长的缓存中。
  • 考虑其他用法,检测重型循环,半静态内容(如您选择列表,它们应被视为静态多少时间?)

最后,全面了解应用程序引擎的工作方式,以及数据如何增长和使用。您需要以最佳方式使用应用程序级别缓存(例如,应缓存某些元素)对于用户组?,应该为组构建Acl对象,对于每个用户,对于每个人来说,布局中是否应该为每个人呈现相同的块?)。