为啥人们说 require_once 比 require 慢? [复制]

Posted

技术标签:

【中文标题】为啥人们说 require_once 比 require 慢? [复制]【英文标题】:Why do people say require_once is slower than require? [duplicate]为什么人们说 require_once 比 require 慢? [复制] 【发布时间】:2011-11-11 11:23:26 【问题描述】:

可能重复:Why is require_once so bad to use?

php 包含一个文件时,我假设它将文件名存储在一个数组中。

然后,当包含另一个文件时,它会检查该数组以查看它是否已经包含,对吗?

那么这里有什么大不了的?为什么人们如此害怕这种数组检查?这不像您要包含数百万个文件...

in_array 检查一直进行。我几乎在所有功能中都使用它们:)

【问题讨论】:

我不确定性能是否相关,因为这两个函数做不同的事情。您应该根据其功能而非性能来选择使用哪一个。 您说这只是微观优化是对的,但我不相信“人们如此害怕这种数组检查” 从未听说过。你能指出它是在哪里说的吗? 人们往往会说很多废话,你知道的。 使用 _once 版本比使用 _once 版本需要额外的 MICROSCOPIC 开销。普通的 require(),因为那个数组检查。抱怨它慢的人是那些在鸡尾酒餐巾纸设计阶段进行代码微优化的人。 【参考方案1】:

事实上,对于明智计划的应用程序,像require_once这样的函数是没有用的。

对于缓慢 - 它可以忽略不计。

【讨论】:

你说它们没用是什么意思?例如,Zend 框架如何避免使用require_once 嗯,ZF 只是不明智的计划应用 +1,合理规划是关键,今天给你-1我一次:) 请解释一下。我觉得你说的很荒谬。那么,如何使用两个都需要第三个组件的组件呢?如果他们都使用require,你会得到一个错误,如果require默认使用一次,那么如果你选择不使用这些组件,就会产生不必要的开销。 对于类,您可以定义一个适当的自动加载器并合理地命名您的类文件,它们会在需要定义类时被加载一次。【参考方案2】:

我不确定说这话的“人”是谁,但我相信这是在任何语言中普遍存在的众多微优化神话之一。

这是一篇对这些方法进行基准测试的文章: http://arin.me/blog/php-require-vs-include-vs-require_once-vs-include_once-performance-test

您的里程可能会有所不同,但我怀疑您会通过避免使用x_once 函数而看到任何显着的性能提升。使用适合这种情况的语言结构,并且您没有做错任何事情。 x_once 可能表明您需要重新考虑项目组织或考虑使用autoloader,但不是eval...

【讨论】:

+1 只是为了邪恶的文字游戏【参考方案3】:

require_once() 有两个问题,如果忽略性能问题,第二个也很重要。如果您使用require_once(),这意味着您可以多次使用require 同一个文件。这本质上是错误或错误的设计。现在是性能部分,对于 web 优化的应用程序将无能为力。如果您了解提供静态 html 文件或缓存内容比提供 PHP 文件更快,您就会理解为什么人们说使用 require_once() 更慢。

【讨论】:

以上是关于为啥人们说 require_once 比 require 慢? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

“for(;;)”比“while (true)”快吗?如果不是,人们为啥要使用它?

为啥顺序写入比 HDD 上的随机写入快

如果 SqlDataAdapter 内部使用数据读取器,为啥人们说使用 SqlDataReader 更快?

为啥人们说使用随机数生成器时存在模偏差?

为啥函数require_once会阻止我的代码工作[关闭]

为啥在方法中使用 require_once 有时会失败?