10

这个问题之前在这里被问过,但没有一个答案真的试图回答所问的实际问题,所以我以不同的方式问它。加载一个包含 20,000 行和 100 个函数的类是否比将代码分解为每个函数更少的小类并根据需要加载这些小类更耗费资源?

4

2 回答 2

6

脚本或类越大,每个实例使用的内存就越多。开箱即用,PHP 没有办法共享库和类的内存空间,因此为网站创建大量脚本并不是一个好主意。

典型的方法应该是将类分解成块,这样您只需要在每个脚本中包含运行该脚本实际需要的内容。

此外,除非您有大量流量,否则不太可能导致性能问题 - 然后您可能会比重构类更容易解决您的问题。

加载脚本时,它需要固定数量的内存来解析它。它越大,它需要的内存就越多。接下来,执行脚本本身,运行任何顶级代码(不在类或全局函数中)。如果其中包含任何 require/include 语句,则会加载这些脚本(如有必要)。如果它创建对象,则需要更多内存。

但是,类的每个实例的大小仅受其存储的数据的影响。除了这个更正之外,这里的建议很明确:根据职责划分你的班级。其原因也与易于开发而不是性能有关。假设您有一个充满静态方法的怪物类。如果您的应用程序对每个请求都使用这些方法中的大部分,那么拆分它不会带来性能优势,因为这两个脚本最终都会被加载。但是,如果您可以将这些方法分组到逻辑子系统中,它们将更易于理解和使用。

于 2010-12-26T19:57:43.823 回答
4

一大类需要一个周期才能编译成二进制代码(操作码)。

许多较小的类使用较少的内存但需要更多的编译,并且编译使用的内存将被累积。

真的取决于运行时包含多少类/文件。

因此,对此的解决方案,分为多个类并使用APC或等效。

PS:大文件的内存消耗要小得多,因为PHP不需要重新编译源代码成操作码(如果你不愿意把大类分解成更小的类)

于 2010-12-26T20:26:29.400 回答