Php 减少包含的文件数量

Php 减少包含的文件数量,php,zend-framework,caching,doctrine,autoloader,Php,Zend Framework,Caching,Doctrine,Autoloader,我的应用程序基于Zend框架和条令,每个请求包含超过300个文件。它们大多是相同的文件 这是一个相当大的开销。通过Zend_Cache(和Memcache)部分解决,但并非所有页面都可以缓存 如何减少这个数字?如何加速 对于生产服务器和应用程序的最终版本来说,条令有一个选项似乎是相当合理的 我的计划是编译其他库(我已经剥离了所有require\u一次) 这项任务有什么工具吗?也许某些缓存驱动程序会自动执行此操作?如何设置它们 php文件包含的开销通常可以通过操作码缓存(如通过pecl提供的

我的应用程序基于Zend框架和条令,每个请求包含超过300个文件。它们大多是相同的文件

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

  • 如何减少这个数字?如何加速
对于生产服务器和应用程序的最终版本来说,条令有一个选项似乎是相当合理的

我的计划是编译其他库(我已经剥离了所有
require\u一次)

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

php文件包含的开销通常可以通过操作码缓存(如通过pecl提供的扩展名)来抵消。操作码缓存通常通过缓存编译后的字节码来工作,这样读取和解析源代码的开销只在第一次请求时产生。这将大大减少对php文件进行任何源代码编译的需要或好处。

最好的选择是使用APC或Zend_Accelerator。但仍然可以制作这些“编译”脚本,将类合并到一个文件中。这将所需IO降至最低。不幸的是,您还需要重写自动加载过程,以便它能够查看适当的文件。通常可以将公共类压缩在一起(Zend_表单+元素+装饰器、常用的验证器、请求+响应+路由器+控制器、Zend_Db+适配器+Zend_Db_选择等)。主要是每次请求总是使用的类可以很容易地压缩并手动包含在一个文件中。最好的方法是添加调试调用,将所有包含的文件()保存到DB中,然后:

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

结果中的所有文件都可以安全地合并到一个文件中,并在引导之前包括在内:)

300+听起来有点过分。它们都是需要的课程吗?你在最大限度地使用自动加载器吗?你在使用操作码缓存吗?@Pekka我已经删除了所有的require once,所有文件都由Zend的自动加载器加载。我已经安装了APC扩展。有什么聪明的方法可以用APC缓存替换application.ini中设置的文件缓存吗?@takshin APC将自动缓存操作码。您可以关闭stat(在生产环境中),这样它甚至不会检查文件系统上的文件是否已更新。如果要缓存应用程序数据,也可以使用APC。我相信Zend_Cache有一个用于APC的后端,这使得.300文件在与APC一起使用时实际上什么都不是。它们将从共享内存中提供,当然没有问题。@beberlei那么为什么条令有编译选项呢?我的猜测是,在操作码缓存的使用变得如此普遍之前,条令大多是过时的想法。即将发布的Doctrine 2将在未来几个月内推出beta版,它没有编译选项。事实上,在文档中显示编译选项的地方,现在建议使用操作码缓存。如何确定正确的顺序?尝试/错误或逐个修复错误。总体思路是先有接口,然后是抽象类和其他类。在调用方法之前,代码中存在许多不需要的依赖项。