【问题标题】:How many PHP includes are too many?有多少 PHP 包含太多?
【发布时间】:2011-01-25 22:45:14
【问题描述】:

我网站上的每个页面都是使用 PHP 呈现的。

每个 PHP 文件使用大约 10 个包含。因此,对于显示的每个页面,除了其他功能(MySQL 等)之外,服务器还需要获取 10 个文件。

我应该将它们组合成一个单独的包含文件吗?这会对现实世界的速度产生任何影响吗?这不是一项微不足道的任务,因为需要整理一个可变范围的意大利面条。

【问题讨论】:

    标签: php optimization include


    【解决方案1】:

    包含文件在服务器上处理,因此浏览器不会“获取”它们。使用包含与复制和粘贴代码或合并文件的性能差异是如此微不足道(我猜我们谈论的绝对是 10 毫秒到 100 毫秒的范围内),它不是完全值得。

    尽情享受includerequire 吧。干净的代码比将页面加载时间缩短不到 100 毫秒要重要得多。如果您正在构建时间如此关键的东西,那么无论如何您都不应该使用 PHP。

    【讨论】:

    • 我认为它比这更复杂,因为这取决于文件是从内存还是磁盘读取。从磁盘 - 它可能需要几个毫秒,取决于它是否碎片和文件的大小。 (操作系统可以缓存文件,或者硬盘设备本身..)
    • @Dor 不要低估磁盘缓存能力 :) 磁盘碎片永远不会影响您的站点
    • 如果您有很多包含文件,您甚至可以通过增加 realpatch_cache_size 来降低性能影响。
    【解决方案2】:

    include\ andrequires` 只在服务器端打开文件,但这可能会很耗时,具体取决于硬件/文件系统等。

    无论如何,如果可以,请使用autoloader。只有需要的文件才会以这种方式加载。

    那么,如果您认为包含的文件是导致速度变慢的原因(而且我认为之前还有很多其他需要改进的地方),您可以尝试自动合并文件。开发时每个类仍然有一个文件,但您可以构建一个包含每个类定义的文件,使其只有一个include(类似于cat <all your included file>.php > to_include.php)。

    【讨论】:

      【解决方案3】:

      尽管磁盘 I/O 操作是性能消耗最大的操作,但常规站点不会注意到包含的任何合理数量。 在遇到任何包含问题之前,您可能已经有了一些操作码缓存来消除这个问题。

      【讨论】:

        【解决方案4】:

        确定文件在包含路径中的实际位置是需要时间的。如果您的包含路径中有多个位置,PHP 将搜索每个位置,直到找到文件或失败(在这种情况下,它会引发错误)。这就是为什么您应该将大多数包含文件所在的包含路径放在包含路径的顶部。

        如果您在包含路径中使用绝对路径,PHP 会将该路径缓存在实际路径缓存中,但请注意,这很快就会过时。所以是的,包含十个文件可能比包含一个大文件慢,这仅仅是因为 PHP 必须更频繁地检查包含路径。但是,除非您的网络服务器是一台非常薄弱的​​机器,否则十个文件不足以产生影响。这只有在包含数百个文件或有许多要搜索的位置时才会变得有趣,在这种情况下,无论如何您都应该使用 OpCode 缓存。

        另请注意,在包含文件时,最好在开头包含每个文件,因为您可能会包含应用程序从未针对特定请求调用的文件。


        参考

        【讨论】:

          猜你喜欢
          • 2013-04-23
          • 2011-02-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多