2

我正在从头开始构建 PHP CMS。我的系统中有一个超级核心文件,目前我已经自动导入了构成系统核心的所有其他包和类。在一个典型的页面上,只使用了其中的几个类和方法。

考虑到require_once()服务器上的负载包括所有这些文件,以及用户必须等待页面加载的时间,我想知道我应该采用哪条路径:

  1. 保持超级核心原样,并自动包含包含此核心文件的每个页面的所有系统核心。
  2. 使用超核心仅包含基本包,例如数据库管理,并根据需要导入其他包/类。

有人可以让我知道这两个选项中哪一个是最好的,以及它的优缺点的简要概述吗?

感谢您的时间!!!

4

3 回答 3

6

您在问一个关于哪个是最佳负载策略的问题。这通常与自动加载器有关。

与任何策略一样,有利也有弊。包括所有文件可以让您省去忘记一个文件的麻烦。另一个自动加载器也不会忘记文件。

但是,您不能总是使用一种或其他策略,但如果您实施多种策略,您可以根据需要进行选择。例如,如果您开发 CMS,事情可能会经常发生变化。但如果 CMS 安装在服务器上,则该版本不会经常更改。

因此,在生产中,将所有核心库组合到一个文件中并在启动时要求它们的策略可能会带来好处,具体取决于服务器的负载量。

对于构建自己的系统的简单方法,我可以建议使用自动加载器。如果您按文件排列类文件,它们将在您使用该类的那一刻自动加载。

当您在开发中达到某个步骤时,您实际上知道核心文件是什么。然后,您可以默认加载它们,这样就不会再为它们触发自动加载器。

于 2011-06-15T14:28:02.640 回答
3

今年早些时候,我在用 PHP 开发框架时遇到了这个确切的问题。

我考虑了利弊,这是我的评价:

选项 1 - 前端控制器模式脚本包括所有其他脚本

好处

  • 包的包含在一个脚本中完成;您可以一目了然地看到包含哪些文件。
  • 包含一个特定的包总是被调用一次,没有开销。

缺点

  • 考虑这种情况:

我们有两个班级RectangleShapeRectangle是一个子类,即Shape. 然而,核心脚本按字母顺序包含类。因此,当Rectangle包含时,Shape未找到,PHP 将抛出错误。

Rectangle班级:

class Rectangle extends Shape{

}

Shape班级:

class Shape{

}
  • 当不需要的所有内容也都加载到内存中时,开销会更大。

选项 2 - 加载主包,然后根据需要加载其他包

好处

  • 仅在需要时才包含文件。以另一种方式减少开销
  • 解决了选项 1 中提到的问题。
  • 您可以专注于每个包对其他包的要求,只需加载它们

缺点

  • 可能会出现对特定包的多个请求的开销。
  • 包包含在每个文件中完成。

编程代码是为人类服务的。因此,为了使事情更合乎逻辑并解决问题,我选择了选项 2 来选择框架。

于 2011-06-15T14:34:07.400 回答
2

不要加载你不会使用的东西。实现自动加载器或加深您的 require_once。

即使性能可以忽略不计,包含的文件更少也会提高您快速查找错误并确定应用程序流程的能力。

于 2011-06-15T14:27:00.323 回答