【问题标题】:Which is more efficient between __autoload() or include/require?__autoload() 和 include/require 哪个更有效?
【发布时间】:2011-07-25 10:57:45
【问题描述】:

哪个执行时间更快:__autoloadinclude 在嵌套 if 语句中? 两者之间哪个更不容易出错?

【问题讨论】:

  • 做一个基准测试或使用spl_autoload_register。无论如何,这是一个毫无意义的 µ 优化,答案将没有什么实用价值。
  • 我不明白你的反对意见...
  • @mo 我没有 dv,但 dv 是合理的,因为这个问题没有用,也没有显示任何研究成果。 µ-opts 在应用程序上下文之外基本上是无趣的,如果他对此感兴趣,OP 可以对他/她自己进行基准测试。此外,所有这些类型的问题的答案通常是“不要打扰,使用操作码缓存。编写可读代码”。
  • @Gordon 这个问题很有道理。例如在 Zend Framework 中,许多类都有明确的 require_once 以提高性能并避免使用自动加载器。
  • @matthieu 和 ZF Performance Guide tells you to strip them 以最大限度地提高自动加载器的性能并从延迟加载中受益。除此之外,这是一个不同的问题,因为 ZF 中没有 __autoload 的类。

标签: php autoload micro-optimization


【解决方案1】:

spl_autoload_register(而不是__autoload)应该是更健壮的选项:它允许您编写比include 语句更灵活的代码,并且您可以保持一切集中。

关于性能,恕我直言,除非您测量到页面加载时间的很大一部分用于加载包含,否则讨论它没有意义。即使这是真的,您也应该使用 PHP 操作码缓存来加速您的应用程序,而不是试图通过在 include 和自动加载之间切换来获取边际收益。

【讨论】:

  • @Downvoter:请通过发表评论帮助我改进这个问题。
  • 你在质疑 OP 想要做什么,而你不知道他的需求是什么。这是一个有效的问题,请查看:framework.zend.com/manual/en/performance.classloading.html(对于延迟发表评论感到抱歉)
  • @Matthieu:我不会质疑他们想要做什么,尽管如果我认为这是一个坏主意,我会毫不犹豫地这样做(如果我们不这样做,那么我们将不得不关闭OP甚至做出一个错误假设的任何问题)。据我所知,您提供的链接与此特定问题无关。最后,您不认为我的回答表明我也认为它是有效的吗?
  • 好吧,他问的是表演,你的回答建议 spl_autoload_register 出于“实际原因”(至少不是为了表演)。你说的是“除非……否则讨论它是有意义的”。这部分应该是(IMO)一个评论,询问“您是否测量了页面加载时间的很大一部分......?” (或类似的东西,但在评论中)。因为也许他做到了,也许他知道自己在做什么。
  • 总结一下:我认为你质疑他的意图是对的,但这应该在评论中,因为否则你会根据假设给出答案(可能是对或错)
【解决方案2】:

只需使用 include/require 即可获得可读、可维护和标准的代码。这比您可能节省的 0.001 秒重要得多。

顺便问一下,您真的确定您需要 PHP 脚本的极致性能吗?包含真的是瓶颈吗?

【讨论】:

  • 您不是在提供问题的答案,而是在质疑他想做什么。这应该在 IMO 的评论中。
  • 我在思考问题之外,并想象我处于提问者的位置。我正在提供关于他应该使用什么的答案。
  • “他应该”。你怎么能说它不会对他的表演产生影响(甚至很小)?
  • 因为我无法想象这样的场景。他似乎更有可能以错误的方式/位置进行优化。
  • 我可以,采埃孚的人也可以:framework.zend.com/manual/en/performance.classloading.html。他们可能没有准确地谈论__autoload,但他们仍在比较自动加载与需求。
【解决方案3】:

无论您使用的是include/require 还是__autoload/spl_autoload,大部分时间(在大多数情况下)都将花在加载、解析和编译包含的源代码上。相比之下,执行那几行 autolaoder 函数几乎无关紧要。

【讨论】:

    【解决方案4】:

    看看:http://framework.zend.com/manual/en/performance.classloading.html

    require_once 实际上是一个昂贵的操作(检查文件是否已经加载)。 自动加载会提高您的性能

    正如 Jon 建议的那样,您可能想尝试 spl_autoload_register 而不是 __autoload(请参阅他的回答)。

    但是,请注意,这是一个小的优化,我只是为您的问题提供答案。

    编辑:起初,我写的与我现在建议的相反,所以我更新了我的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 2012-07-08
      • 1970-01-01
      • 2010-09-24
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多