【发布时间】:2011-01-25 22:45:14
【问题描述】:
我网站上的每个页面都是使用 PHP 呈现的。
每个 PHP 文件使用大约 10 个包含。因此,对于显示的每个页面,除了其他功能(MySQL 等)之外,服务器还需要获取 10 个文件。
我应该将它们组合成一个单独的包含文件吗?这会对现实世界的速度产生任何影响吗?这不是一项微不足道的任务,因为需要整理一个可变范围的意大利面条。
【问题讨论】:
标签: php optimization include
我网站上的每个页面都是使用 PHP 呈现的。
每个 PHP 文件使用大约 10 个包含。因此,对于显示的每个页面,除了其他功能(MySQL 等)之外,服务器还需要获取 10 个文件。
我应该将它们组合成一个单独的包含文件吗?这会对现实世界的速度产生任何影响吗?这不是一项微不足道的任务,因为需要整理一个可变范围的意大利面条。
【问题讨论】:
标签: php optimization include
包含文件在服务器上处理,因此浏览器不会“获取”它们。使用包含与复制和粘贴代码或合并文件的性能差异是如此微不足道(我猜我们谈论的绝对是 10 毫秒到 100 毫秒的范围内),它不是完全值得。
尽情享受include 和require 吧。干净的代码比将页面加载时间缩短不到 100 毫秒要重要得多。如果您正在构建时间如此关键的东西,那么无论如何您都不应该使用 PHP。
【讨论】:
include\ andrequires` 只在服务器端打开文件,但这可能会很耗时,具体取决于硬件/文件系统等。
无论如何,如果可以,请使用autoloader。只有需要的文件才会以这种方式加载。
那么,如果您认为包含的文件是导致速度变慢的原因(而且我认为之前还有很多其他需要改进的地方),您可以尝试自动合并文件。开发时每个类仍然有一个文件,但您可以构建一个包含每个类定义的文件,使其只有一个include(类似于cat <all your included file>.php > to_include.php)。
【讨论】:
尽管磁盘 I/O 操作是性能消耗最大的操作,但常规站点不会注意到包含的任何合理数量。 在遇到任何包含问题之前,您可能已经有了一些操作码缓存来消除这个问题。
【讨论】:
确定文件在包含路径中的实际位置是需要时间的。如果您的包含路径中有多个位置,PHP 将搜索每个位置,直到找到文件或失败(在这种情况下,它会引发错误)。这就是为什么您应该将大多数包含文件所在的包含路径放在包含路径的顶部。
如果您在包含路径中使用绝对路径,PHP 会将该路径缓存在实际路径缓存中,但请注意,这很快就会过时。所以是的,包含十个文件可能比包含一个大文件慢,这仅仅是因为 PHP 必须更频繁地检查包含路径。但是,除非您的网络服务器是一台非常薄弱的机器,否则十个文件不足以产生影响。这只有在包含数百个文件或有许多要搜索的位置时才会变得有趣,在这种情况下,无论如何您都应该使用 OpCode 缓存。
另请注意,在包含文件时,最好在开头包含每个文件,因为您可能会包含应用程序从未针对特定请求调用的文件。
参考
【讨论】: