首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >到require_once()或非require_once()

到require_once()或非require_once()
EN

Stack Overflow用户
提问于 2011-06-15 14:20:25
回答 3查看 538关注 0票数 2

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

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

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

请有人告诉我,这两种方案中哪一种是最好的,并简要概述其利弊?

谢谢你抽出时间!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-15 14:34:07

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

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

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

优势

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

缺点

  • 考虑这样的情况:

我们有两个类RectangleShapeRectangle是一个子类,即Shape的扩展。但是,核心脚本按字母顺序包括类。因此,当包含Rectangle时,就找不到Shape,并且会抛出一个错误。

Rectangle类:

代码语言:javascript
复制
class Rectangle extends Shape{

}

Shape类:

代码语言:javascript
复制
class Shape{

}
  • 当所有不需要的东西也被加载到内存中时,会产生更多的开销。

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

优势

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

缺点

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

编程代码是为人类编写的。因此,为了使事情更符合逻辑并分解问题,我选择了选项2作为框架。

票数 3
EN

Stack Overflow用户

发布于 2011-06-15 14:28:02

你问的是哪一个是最好的负载策略。这通常是与自动装载机相关的讨论

与任何策略一样,有利有弊。包括所有的文件可以帮你省去忘记一个文件的麻烦。另一方面,一个自动加载程序也不会忘记一个文件。

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

因此,在生产中,将所有核心库合并到一个文件中并在启动时要求它们的策略可能是一个好处,这取决于服务器的负载大小。

为了简单地构建自己的系统,我可以提出一个自动加载器。如果您逐个文件地排列类文件,它们将在您使用类的那一刻自动加载。

当您在开发中完成某一步时,您实际上知道什么是核心文件。然后,您可以在默认情况下加载这些,这样自动加载器就不会再为它们触发了。

票数 6
EN

Stack Overflow用户

发布于 2011-06-15 14:27:00

不要装载你不打算使用的东西。实现一个自动装填机或深化您的需求一次。

即使性能是可忽略的,包含更少的文件也会增加您快速查找bug和确定应用程序流程的能力。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6359207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档