是否值得使用require_once()来节省内存?

时间:2010-08-23 10:10:20

标签: php memory require-once

我想检查一下我对require_once()的理解是否正确。我在文件foo.php中有很多函数。假设其中7/8总是被使用,其中一个相当罕见且相当大。我必须在foo.php中保留此函数的定义。你能告诉我以下方法是否能实现任何目标,并且你认为它是否值得实现它。

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

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

请在适当时更正或添加此内容!

非常感谢。

3 个答案:

答案 0 :(得分:2)

我非常怀疑你将从重构到单独的文件中获得任何收益。此外,你真的有任何代码问题,因为它现在让你考虑这个?你知道过早的优化是所有邪恶的根源。在浪费您的时间进行无意义的优化之前,查看您的代码以查看它是否存在瓶颈以及在哪里存在瓶颈。

答案 1 :(得分:1)

  

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

正如戈登所说,这将只为真正难以置信的巨大功能节省内存。但根据我的经验,加载包含到内存中占用的空间比保存代码所需的确切字节数要多得多。我不是PHP内部专家,但我认为代码是解析或至少预处理的方式。

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

class maintenance_functions
 { 

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

并开始静态调用它们:

 maintenance_functions::xyz();

一个类会占用一个文件。

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

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

 datamining_functions::xyz();

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

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

答案 2 :(得分:0)

你应该使用Xdebug来找出答案 - 值得与否是主观的。