【问题标题】:Zend Framework performance (autoload)Zend 框架性能(自动加载)
【发布时间】:2011-04-30 21:45:21
【问题描述】:

我已经阅读了很多关于 ZF 性能的文章,但仍然无法理解,如果我启用了字节码缓存 (APC),那么使用其他一些技巧是否有意义?例如。禁用自动加载并使用一个包含所有必要类的大 php 文件。

【问题讨论】:

标签: php performance zend-framework autoload


【解决方案1】:

我惊讶地发现这是网站上唯一标记性能、自动加载、php 的问题。有比这更好的地方来消除 #1 自动加载神话:

现代、精心设计的自动加载器不会破坏 APC(或 PHP 5.5 的 OPcache),并且在性能方面也不比 require_once 差(当然,函数调用开销除外)。

为什么?好吧,现在我们有了spl_autoload_register,它可以让你添加多个自动加载处理程序。这允许每个第三方库发布它自己的自动加载器,该自动加载器知道如何加载该库的文件,并跳过其余部分。

例如,Zend Framework 1 的Zend_Loader_Autoloader 限制自己尝试加载以特定伪命名空间开头的类——Zend_(以及用户要求加载的任何其他内容)。如果它没有以所需的伪命名空间开始,它只是返回并让堆栈上的下一个加载器运行。它还知道它可以在Zend/Foo/Bar/Baz.php 中找到Zend_Foo_Bar_Baz,因此它不需要 需要手动搜索包含路径。与其他现代框架自动加载器一样,它遵循PSR-0 autoloading standard。

通过composer 安装的任何依赖项也会以同样的方式自动生成命名空间自动加载器。

正是路径冲刷让设计不佳的自动装载机很糟糕。在现代 PHP 代码中通常看不到这些。试图查找文件导致的密集文件系统stat 调用是一种常见的性能拖累。查看this presentation by PHP creator Rasmus Lerdorf,他在其中通过基准测试、分析和小心删除慢操作(如stat 调用)来提高Wordpress 的性能。

当您使用现代库并且没有糟糕的自动加载器时,过去的require_once-everything-up-front 是不必要的。如果您使用 APC,则只有在 disable apc.stat 或在使用 OPcache 时摆弄 OPcache's validate_, revalidate_, and enable_file_override INI options 时,这才是重大胜利。

tl;dr: 除非你知道 statting 包含文件是你最大的瓶颈,否则 Zend 自动加载器就可以了,你不需要参加require_once fest。

【讨论】:

  • 感谢您如此详细的回答,这对我来说是非常有价值的信息。我没有忘记它。这段时间我一直在研究))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2011-01-07
  • 2011-12-07
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多