【问题标题】:single big files for PHP or lots of small ones?PHP 的单个大文件还是许多小文件?
【发布时间】:2010-10-02 23:00:07
【问题描述】:

我有一个服务器,我尝试优化速度(php/mysql)。从速度的角度来看,保留一个包含我所有功能的大文件以便只包含一个文件会更好吗?或者根据手头的工作包含许多小型的任务优化包含会更好(该解决方案会产生 4/5 甚至 6 个要包含的文件)。

此外,我确实使用 pear/MDB2 库来访问数据库。这会增加任何开销而不是使用普通的 php 调用吗? (至少包括 pear/MDB2 是一个 include plus)

提前谢谢大家!

【问题讨论】:

  • 是什么让您认为需要优化服务器上​​的这些特定内容?
  • 包含 6 个文件是微不足道的,尤其是在它们很小的情况下。一旦你在初始化时遇到数百个包含(如 Zend Framework..),那么缓存/优化就开始值得了。
  • Profile 你的应用程序,然后再考虑这样的事情。您很可能会发现include 呼叫是您最不关心的问题。

标签: php mysql optimization include


【解决方案1】:

就速度而言,这并不重要。除非被调用,否则函数将被忽略,就像文件中不应加载的任何代码一样。它确实会通过解析器,但我们谈论的是您永远不会注意到的速度。

更重要的是可访问性和可维护性。通过将您的代码分成不同的文件,这对您、可能是您的同事以及您的文本编辑器来说会变得更容易(处理带有代码突出显示的大文件可能会真的变慢)。

您可以看看 PHP 的 autoload。这允许您调用该类中的任何类或函数,而无需将其专门包含在脚本中。这节省了代码行,它只会在需要时被包含和加载。但除了这在代码方面非常方便之外,它不会让它更快/更慢。

【讨论】:

    【解决方案2】:

    这取决于文件和函数的大小。对于一些小脚本,我会说:为了简单起见,选择一个文件并使其易于复制。

    这样想:

    • 每次读取分离的小文件都意味着一次磁盘操作,而且每次磁盘操作都很慢 - 即使在服务器上也是如此。

    • 只有一次读取速度更快。但是,如果读取的文件有几兆字节,则服务器每次都会读取它(并且需要“很长”的时间),并且实际上只有一小部分文件用于手头的任务。似乎是对资源的极大浪费——尤其是 RAM。

    当然,我们忘记了缓存、虚拟文件系统和类似的东西,但争论仍然存在。

    最后问问自己:您是否愿意翻遍成千上万的代码行并搜索找到您必须更改/修复的功能?还是您更愿意将它们很好地分开并放在一些小而清晰的文件中?

    【讨论】:

      【解决方案3】:

      我的项目通常包含几十个文件,有些很小,有些很大。几年前,我自己将它们包括在内,这导致了两个问题:非常长的包含列表(其中大多数对于大多数任务来说都是多余的),依赖性问题(代码对加载顺序非常敏感)。然后我尝试了一个简单的自动加载器。

      http://pl2.php.net/manual/en/ref.spl.php

      它让生活更轻松,因为它自动神奇地只包含必要的文件。默认 spl_autoload 非常快,但会导致类名中的大写字母出现问题。此外,它需要将文件命名为与类完全相同,如果您决定将多个类放在一个文件中,这可能是一个问题(有时这是有原因的)。我用 PHP 编写了自己的自动加载器,它执行非常高级的类映射。首先,我预计它会显着降低我的应用程序的速度。我做了一些测试,这就是我发现的。

      与正常的数据处理相比,文件包含微不足道。这几乎是微不足道的,因为每个文件只包含一次,而任何愚蠢的 foreach 操作都可以运行数千次。请注意,所有文件请求并没有真正从服务器 HD 读取文件,它们使用的内存缓存持续时间比任何 PHP 代码循环都要短(因为操作系统调用是用 C 编写的)。

      我的意见:忘记它。不管。唯一真正会导致一些性能影响的事情是加载过多的冗余文件 - 它们使用服务器内存,并且在重负载下可能很重要。使用自动加载器 - 你会忘记 include 或 require 的存在。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-09
        • 1970-01-01
        • 2013-02-20
        • 1970-01-01
        相关资源
        最近更新 更多