减少包含文件的数量

时间:2010-08-15 19:06:49

标签: php zend-framework caching doctrine autoloader

我的基于Zend Framework和Doctrine的应用程序包括>每个请求上有300个文件。它们大多是相同的文件。

这是一个非常巨大的开销。部分由Zend_Cache(和Memcache)解决,但并非所有页面都可以缓存。

  • 如何减少这个数字?怎么加快?

Doctrine可以选择compile the needed files,这对于生产服务器和应用程序的最终版本来说似乎很合理。

我的计划是编译其他库(我已经删除了所有require_once)。

  • 这项任务有什么工具吗?也许一些缓存驱动程序自动执行?如何设置它们?

2 个答案:

答案 0 :(得分:2)

php文件包含的开销通常可以通过操作码缓存来解决,例如APC,可以通过pecl获得扩展。操作码缓存通常通过缓存编译的字节码来工作,以便读取和解析源的开销仅在第一个请求时产生。这将极大地否定您的php文件上任何源编译的需要或好处。

答案 1 :(得分:1)

最佳选择是使用APC或Zend_Accelerator。但是你仍然可以制作这些将类合并为一个文件的“编译”脚本。这将所需的IO降至最低。不幸的是,您还需要重写自动加载过程,以便它查找适当的文件。您通常可以将公共类压缩在一起(Zend_Form + Elements + Decorators,常用验证器,Request + Response + Router + Controller,Zend_Db + adapter + Zend_Db_Select等)。主要是每个请求总是使用的类可以很容易地压缩并手动包含在一个文件中。最好的方法是添加调试调用,将所有包含的文件(http://www.php.net/get_included_files)保存到DB中,然后:

SELECT * FROM files GROUP BY filename WHERE COUNT(filename) = $numOfRequests

结果中的所有文件都可以安全地合并到一个文件中并包含在bootstraping之前:)