【问题标题】:Will including unnecessary php files slow down website?包含不必要的 php 文件会减慢网站速度吗?
【发布时间】:2010-02-04 08:31:04
【问题描述】:

这个问题可能会促使一些人几乎立即说出明确的“是”或“否”,但请继续阅读......

我有一个简单的网站,其中有 30 个 php 页面(每个页面都有一些 php 服务器端代码 + HTML/CSS 等...)。没有复杂的层次结构,什么都没有。只有 30 页。

我还有一组纯粹的后端 php 文件——这些文件包含用于将内容保存到数据库、进行身份验证、发送电子邮件、处理订单等的代码。这些将被这 30 个内容页面重用。

我有一个向其发送参数的主 php 文件。这指定需要这 30 个文件中的哪一个,并且它包含适当的内容页面。但是其中每一个都可能需要包含可变数量的后端文件。例如,一个内容页面可能不需要后端的任何内容,而另一个可能需要数据库代码,而其他内容可能需要电子邮件、数据库和身份验证代码等......

我想无论需要什么后端页面,都可以包含在适当的内容页面中,但是路径中的一个小改动,我必须编辑数十个文件。检查请求哪个内容页面(事物的开关类型)并在主php文件中包含适当的后端文件太麻烦了。同样,如果单个路径发生更改,我必须进行许多更改。

因为懒惰,我将所有后端文件都包含在主文件中,这样没有内容页面可以请求未包含的内容。

第一个问题 - 这是一个好习惯吗?如果它是由任何人完成的。

其次,无论是否需要,包括所有后端文件,是否会因我而出现性能问题或任何类型的问题?

编辑

该网站每天的访问量在 3000 到 4000 之间。

【问题讨论】:

  • 您可以通过自己运行一些简单的性能测试来轻松回答第二个问题,例如测量不同配置下的运行时间...

标签: php web include backend


【解决方案1】:

您应该进行基准测试。使用不同的包含时间执行同一页面。但我想这对 30 个文件影响不大。

但是您可以节省时间,只需在 php.ini 中启用 APC(它是一个 PECL 扩展,因此您需要 install 它)。它将缓存文件的解析内容,这将大大加快速度。

顺便说一句:懒惰并没有错,它甚至是virtue ;)

【讨论】:

  • 嗨,感谢您提出 APC 的建议 :) 看起来它会派上用场 如果我坚持这种包含文件的方式。
  • 刚刚对 APC 做了一些研究,看起来这正是我所需要的。我安装了 APC。必须分析有无它。但从人们的说法来看,不管有明显的性能差异,拥有它是一件好事。
【解决方案2】:

如果您的网站是面向对象的,我建议您使用自动加载 (http://php.net/manual/en/language.oop5.autoload.php)。

这使用一种神奇的方法 (__autoload) 在需要时查找类(它很懒惰,就像你一样!),所以如果特定页面不需要所有类,它就不必获取它们!

不过,这取决于它是否面向对象...

【讨论】:

  • 虽然我一直使用自动加载(这很棒),但当速度成为问题时,这是一个糟糕的建议。自动加载比包含所有内容要慢得多,当有选择地手动包含内容时甚至更慢。最后,使用 __autoload 是一种不好的做法。请改用 spl_autoload。
【解决方案3】:

它会减慢您的网站速度,但幅度可能不会很大。不过,这似乎不是一种组织应用程序的健康方式。我会重新考虑。尝试将应用程序逻辑(例如大部分服务器端代码)与表示层(例如 HTML/CSS)分开。

【讨论】:

  • 即使我这样做,也存在包含多个共享文件的问题。我希望我说得通。假设我删除了演示文稿。但是业务逻辑会有自己的一组 php 文件。所有这些 biz 逻辑文件都需要可变数量的通用 php 文件。同样的包含问题又来了。如果我重新排列/添加/删除/合并一些常用文件怎么办?我必须转到每个 biz 逻辑 php 文件并更改包含路径。如果我对性能影响有很好的了解,我可以做出选择。
【解决方案4】:

如果文件很小并且只包含定义和设置,这不是一个坏习惯。 如果它们实际运行代码或非常大,则会导致性能问题。 现在 - 如果您的网站每小时有 3 个访问者 - 谁在乎,如果您有 30000...这是另一个问题,您需要更加努力地将其最小化。

【讨论】:

    【解决方案5】:

    您可以使用XCache 来减轻 PHP 代码编译的一些缺点。这个 PHP 模块将缓存 PHP 操作码,从而减少编译时间和性能。

    【讨论】:

      【解决方案6】:

      考虑您网站的大小;如果您没有注意到减速,为什么要尝试修复它?

      当涉及到较大的站点时,您应该做的第一件事是安装 APC。即使您当前包含文件的方法可能无法从 APC 中获得尽可能多的好处,但 APC 仍然可以在加快处理速度方面做得非常出色。

      如果响应速度仍然存在问题,您应该考虑包含所有您的文件。 APC 会将源文件的缓存版本保存在内存中,但只有在没有条件包含时才能做到这一点。

      只有当您的 PHP 应用程序的大小可能会导致内存耗尽时(请注意,对于大多数大型网站,内存不是瓶颈),您才可能希望有条件地包含应用程序的某些部分。

      Rasmus Lerdorf(PHP 背后的人)同意:http://pooteeweet.org/blog/538

      【讨论】:

      • 回答您第一行中的问题 - 如果我对这种包含方法深信不疑,并且 marketing 创造了奇迹,然后该网站每天获得 50000 次访问,我有麻烦了。
      • 500000 次访问仍然不必担心。在这种情况下,我建议花时间在网络服务器配置和 sql 查询等事情上。
      【解决方案7】:

      正如其他人所说,它不应该放慢速度,但这并不“理想”。

      如果主要问题是您懒得去更改所有包含文件的路径(如果将来需要更新路径)。然后,您可以使用常量来定义主文件中的路径,并在需要包含/需要文件时使用该常量。

      define('PATH_TO_FILES', '/var/www/html/mysite/includes/go/in/here/');
      
      require_once PATH_TO_FILES.'database.php';
      require_once PATH_TO_FILES.'sessions.php';
      require_once PATH_TO_FILES.'otherstuff.php';
      

      这样如果路径发生变化,只需要修改一行代码。

      【讨论】:

        【解决方案8】:

        它确实会减慢您的网站速度。大部分是因为 PHP 的加载和处理速度相对较慢。您想要包含的代码越多,应用程序的速度就越慢。

        【讨论】:

          【解决方案9】:

          我的生活是“尽可能少地包含,尽可能多地包含”,所以我通常只包含我的配置和会话处理,然后每个页面都使用配置包含中定义的包含路径包含他们需要的内容,所以对于路径更改,您仍然只需要更改一个文件。

          如果您包含所有内容,则在您获得大量页面点击(每秒几次点击)之前,减速不会很明显,因此在您的情况下,仅包含所有内容可能没问题。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-12-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-23
            • 1970-01-01
            相关资源
            最近更新 更多