此问题之前被问过here,但没有一个答案真的试图回答实际提出的问题,所以我以不同的方式问它。是否加载单个类的20,000行,其中100个函数的资源密集程度更高,而不是将代码分解为每个函数较少的较小类,并根据需要加载这些较小的类?
答案 0 :(得分:6)
脚本或类越大,每个实例使用的内存就越多。开箱即用,PHP没有办法共享库和类的内存空间,因此为网站创建大量脚本并不是一个好主意。
典型的方法应该是将类分解为块,这样您只需要在每个脚本中包含运行该脚本所需的内容。
此外,除非你有大量的流量,否则它不太可能导致你的性能问题 - 然后你可能比重构类更容易解决你的问题。
加载脚本时,需要一定量的内存来解析它。它越大,它需要的内存就越多。接下来,脚本本身被执行,运行任何顶级代码(不在 类或全局函数)。如果包含任何require / include语句,则会加载这些脚本(如有必要)。如果它创建对象,则会占用更多内存。
但是,类的每个实例的大小仅受其存储的数据的影响。除了这个修正之外,这里的建议就是:根据职责划分你的课程。其原因还在于易于开发而不是性能。假设你有一个充满静态方法的怪物类。如果您的应用程序对每个请求使用大多数这些方法,则拆分它将没有性能优势,因为无论如何这两个脚本最终都会被加载。但是,如果您可以将方法分组到逻辑子系统中,它们将更容易理解和使用。
答案 1 :(得分:4)
一个大类要求单周期编译成二进制代码(操作码)。
许多较小的类使用较少的内存但需要更多的编译,并且将累积用于编译的内存。
确实取决于运行时中包含了多少个类/文件。
因此,解决此问题,分成多个类并使用APC
或等效的。
PS:大文件的内存消耗要小得多,因为PHP不需要将源代码重新编译为操作码(如果你不愿意将大类破解成更小的代码)