4

我想检查一下我的理解是否正确require_once()。我在文件中有一堆函数foo.php。假设它们中的 7/8 总是被使用,其中一个相当罕见且相当大。我必须将此函数的定义保留在foo.php. 您能否告诉我以下方法是否取得了任何成就,以及您是否认为它所取得的成就值得。

  • 取出函数体,放到一个外部文件中。
  • 将原始函数重新定义require_once()为该特定文件并将执行传递给辅助函数。

我知道这可以在未运行该功能的请求上节省服务器内存。我到底在保存什么?只是保存函数体所需的内存?这意味着它必须是一个相当大的功能,然后才值得我猜。另外,如果我使用 APC 之类的东西,它会变得不那么有用吗?

请酌情更正或补充!

非常感谢你。

4

3 回答 3

2

我非常怀疑你会从将它重构到一个单独的文件中获得什么。此外,您是否真的对代码有任何问题,因为现在让您考虑这一点?你知道过早的优化是万恶之源。在您将时间浪费在无意义的 µ 优化上之前,分析您的代码以查看它是否以及在哪里存在瓶颈。

于 2010-08-23T10:20:28.107 回答
1

更新:从您对 Gordon 的评论中,我看到您正在使用 Drupal:这种方法在那里不起作用,因为 Drupal 已经非常面向对象。这里描述的是利用静态类的基于函数的项目的自动加载机制。

正如 Gordon 所说,这只会为非常庞大的函数节省内存。但是,根据我的经验,将包含加载到内存中所占用的空间比保存代码所需的确切字节数要多得多。我不是 PHP 内部专家,但我认为代码已被解析或至少以任何一种方式进行了预处理。

假设您的 PHP 应用程序完全基于函数而没有 OOP,那么您可以用来拆分包含的一个想法是将您的函数放入类中,并利用自动加载机制:

class maintenance_functions
 { 

   public static function xyz() { ................  }

并开始静态调用它们:

 maintenance_functions::xyz();

一个类将占用一个文件。

将所有很少使用的功能分组到单独的文件中。

然后,您可以使用自动加载机制。这将在需要时自动加载所需的类。例如,如果我打电话

 datamining_functions::xyz();

自动加载器将查找包含datamining_functions并包含该文件的文件。这消除了完整的“require()”麻烦,让您专注于如何最有效地对函数进行分组。

这并不是真正向 OOP 过渡:我们只是使用类构造来对函数进行分组,以便能够使用自动加载器。应该可以将函数迁移到此类类中,而无需进行重大重写。

于 2010-08-23T10:30:50.327 回答
0

您应该使用Xdebug 来找出答案——价值与否是主观的。

于 2010-08-23T10:35:20.513 回答