PHP使用单个大文件还是多个小文件?

3
我有一台服务器,我试图优化它的速度(php/mysql)。就速度而言,将所有函数放在一个大文件中以便只需要包含一个文件是否更好?还是有许多小的、针对任务优化的包含文件,根据手头的工作而包含(这种解决方案会产生4/5甚至6个要包含的文件)更好?
此外,我使用pear/MDB2库进行数据库访问。与使用纯php调用相比,这会增加额外开销吗?(包括pear/MDB2是一个include plus,至少是)
提前感谢您所有人!

1
你为什么认为需要在服务器上优化这些特定的事情? - jbindel
1
包含6个文件很简单,特别是如果它们很小。一旦在初始化时达到数百个包含(例如Zend Framework..),那么缓存/优化就开始变得有价值了。 - Mahdi.Montgomery
1
在考虑任何类似的事情之前,请分析您的应用程序。最有可能的是,您会发现include调用是您最不用担心的问题。 - deceze
3个回答

7

就速度而言,这并不重要。函数只有在被调用时才会被执行,就像您文件中不应该加载的任何代码一样。它确实经过解析器,但我们谈论的是您永远不会注意到任何关于速度的事情。

更重要的是可访问性和可维护性。通过将代码分成不同的文件,可以使您、可能是您的同事以及您的文本编辑器更容易进行维护(在具有代码高亮的大型文件中工作可能会变得非常缓慢)。

不过,您可以看看PHP的自动加载。这使您可以调用该类或该类中的任何函数,而无需在脚本中特别包含它。这节省了代码行数,并且仅在需要时才会被包含和加载。但除了对代码非常方便之外,它不会使其变快/变慢。


4
这取决于文件和功能的大小。对于一些小脚本,我建议:为了简单起见,只使用一个文件,并使其易于复制。请考虑以下几点:
- 读取小分离文件的每次操作都需要磁盘操作,而每个磁盘操作都相当缓慢 - 即使在服务器上也是如此。 - 只有一次读取更快。但是,如果文件读取的大小达到数兆字节,则服务器将每次读取它(并需要“长时间”进行),实际上只有文件的一小部分用于手头的任务。这似乎浪费了大量资源,特别是 RAM。 - 当然,我们忘记了缓存、虚拟文件系统等等,但是这个论点仍然成立。
最终,请问您自己:您是否愿意滚动数千行代码并搜索要更改/修复的函数?还是您宁愿将它们分成一些小而清晰的文件?

3
我的项目通常包含几十个文件,有些很小,有些很大。多年前我自己包含它们,导致了两个问题:非常长的包含列表(对于大多数任务而言,其中大部分是冗余的),依赖性问题(代码对加载顺序非常敏感)。然后我尝试了一个简单的自动加载程序。
请参见:http://pl2.php.net/manual/en/ref.spl.php 它使生活更轻松,因为它自动地只包含必要的文件。默认的spl_autoload非常快,但在类名中使用大写字母会导致问题。此外,它要求将文件命名为类名完全相同,如果您决定在一个文件中放置多个类,则可能会出现问题(有时会有原因)。我用PHP编写了自己的自动加载程序,实现了非常高级的类映射。起初,我预计它会显著减慢我的应用程序。我进行了一些测试,以下是我发现的内容。
与正常数据处理相比,文件包含微不足道。由于每个文件仅被包含一次,因此几乎没有影响,而任何愚蠢的foreach操作都可以运行数千次。请注意,所有文件请求实际上并不从服务器硬盘读取文件,它们使用内存缓存,其持续时间比任何PHP代码循环短得多(因为OS调用是用C编写的)。
我的意见:忘记它。不要在意。唯一可能导致性能影响的事情是加载太多冗余文件-它们使用服务器内存,在重载下可能会有所影响。使用自动加载程序-您将忘记包含或需要存在的东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接