哪个在PHP中性能更好?

时间:2009-08-01 23:49:06

标签: php performance include

我通常在我网站的黑客中加入1个函数文件,现在这个网站的流量非常高,我只想把每件小事做得最好,所以我的问题是,

是否更好地包含多个较小的函数类型文件,只包含该页面所需的代码,或者将它全部加载为1个大文件真的没什么区别,我当前的函数文件具有我的整个函数的所有功能网站,它大约有4,000行,并且在整个网页上加载,是不是很糟糕?

7 个答案:

答案 0 :(得分:5)

很难说。在文件解析领域,4,000行并不是那么大。在代码管理方面,这已经开始变得笨拙,但你不太可能通过将其分解为2,5或10个文件来看到可衡量的性能差异,并且页面只包含他们需要的少数几个(这是更好的编码实践,但这是一个单独的问题)。您的行数读取与解析器需要打开的文件数量之间的差异似乎不足以保证任何重要性。我最初的反应是,这可能不是你需要担心的问题。

在硬币的另一面,我参与了一个企业级项目,其中一些操作具有include()树,该树通常扩展到数百个文件中。对这些操作进行分析表明,include()调用所花费的时间仅占用了10秒加载操作的2-3秒(这是PHP4)。

答案 1 :(得分:3)

如果您可以在服务器上安装扩展程序,则应该查看APCsee also)。
顺便说一句是免费的;-);但您必须是您的服务器的管理员才能安装它;所以它通常不在共享主机上提供......

这就是所谓的“操作码缓存”。

基本上,当调用PHP脚本时,会发生两件事:

  • 脚本被“编译”为操作码
  • 执行操作码

APC将操作码保存在RAM中;因此,每次调用文件时都不需要重新编译文件 - 这对于CPU负载和性能来说都是一件好事。


更多地回答这个问题:

  • 4,000行并不是那么多,谈到表演;打开任何大型应用程序/框架的几个文件,您将快速达到几千行
  • 要考虑的非常重要的事情是可维护性:对您和您的团队来说哪些更容易合作?
  • 加载许多小文件可能意味着很多系统调用,这很慢;但那些可能会被操作系统缓存......所以可能不是那个相关的
  • 如果您正在进行1个数据库查询,那么这个(包括PHP服务器和数据库服务器之间的网络往返)可能需要比解析几千行更多的时间;-)

答案 2 :(得分:1)

通常,文件管理明智的做法是将内容分解为较小的文件,因为您只需要加载实际使用的文件。但是,在4,000行时,它可能不会产生太大的差异。

我建议使用与此类似的解决方案

function inc_lib($name)
{
    include("/path/to/lib".$name.".lib.php");
}

function inc_class($name)
{
    include("/path/to/lib".$name.".class.php");
}

答案 3 :(得分:1)

我认为如果你能将函数文件拆分成适合每个页面的组件会更好;并在适当的页面中调用这些组件。我的2美分!

p / s:我是一名PHP业余爱好者,我正在尝试制作一个PHP网站;我没有使用任何功能。那么你能告诉我你对网站需要什么功能吗?

答案 4 :(得分:1)

根据我的经验,有一个包含在各处的大型包含文件实际上可以扼杀性能。我参与了一个浏览器游戏,我们将所有游戏规则都作为动态生成的PHP(以及其他游戏规则),并且文件的权重大约为500 KiB。它肯定会影响性能,我们考虑生成PHP扩展。

然而,像往常一样,我会说你应该做你现在正在做的事情,直到出现性能问题,然后根据需要进行优化。

答案 5 :(得分:1)

如果您加载4000行文件并使用10行10可能的函数,那么我会说这是低效的。即使您使用了1000行的大量功能,它仍然效率低下。

我的建议是将相关功能组合在一起并将它们存储在单独的文件中。这样,如果页面仅处理数据库函数,则只能加载数据库函数文件/库。

将功能分开的另一个原因是可维护性。如果你需要更改一个函数,你需要在你的monalithic包含文件中找到它。您可能还具有非常非常相似但甚至没有意识到的功能。通过它们的功能对函数进行排序可以让你比较它们并摆脱你不需要的东西,或者将两个函数合并为一个更通用的函数。

答案 6 :(得分:1)

大多数时候Disc IO会杀死你的服务器,所以我认为从光盘中获取的文件越少越好。此外,如果可以安装APC,那么文件将被存储编译到内存中,这是一个很大的胜利。