Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包含PHP文件对性能的影响有多大?_Php_Performance_Apc - Fatal编程技术网

包含PHP文件对性能的影响有多大?

包含PHP文件对性能的影响有多大?,php,performance,apc,Php,Performance,Apc,问题几乎说明了这一切,我正在一个大型项目中工作,在这个项目中,对phpinclude()的大多数调用都在100到150个文件之间。php平均花费的时间在150到300毫秒之间。我想知道这其中有多少是因为包含了php脚本?我一直在考虑运行一个脚本,检查大多数访问的文件是否有特定的调用,并将它们合并到一个文件中以加快速度,但据我所知,这不会产生任何影响 我应该注意的是,我使用APC,我不完全知道APC在后台做什么,但我想它可能已经缓存了我的文件,所以文件的数量并没有太大的区别 如果您对此有任何意见,

问题几乎说明了这一切,我正在一个大型项目中工作,在这个项目中,对php
include()
的大多数调用都在100到150个文件之间。php平均花费的时间在150到300毫秒之间。我想知道这其中有多少是因为包含了php脚本?我一直在考虑运行一个脚本,检查大多数访问的文件是否有特定的调用,并将它们合并到一个文件中以加快速度,但据我所知,这不会产生任何影响

我应该注意的是,我使用APC,我不完全知道APC在后台做什么,但我想它可能已经缓存了我的文件,所以文件的数量并没有太大的区别

如果您对此有任何意见,我将不胜感激

当然,300毫秒并不多,但如果我能把它降低到100甚至50毫秒,那将是一个显著的提升

编辑:


为了澄清这一点,我说的是通过php include/require加载文件。

这是相当多的文件,但如果使用框架(Zend by any chance?)也并非意外。包含这么多文件的影响主要取决于服务器硬盘的速度。无论如何,文件访问速度非常慢,因此如果可以,请减少包含的数量

不过,APC确实/可以缓存内存中所有这些文件的操作码,这意味着在缓存失效/销毁之前,不会再进行磁盘搜索

  • 尝试关闭APC,看看它有多大的不同。执行时间应该有一个明显的峰值

  • 尝试使用xdebug分析脚本。您很可能会发现还有其他问题(代码问题)比文件访问更影响性能


    • 文件加载是一件棘手的事情。正如其他人所说,唯一可靠的方法是做一些基准测试。但是,这里有一些仅适用于PHP加载的一般规则,而不适用于使用fopen加载的文件:

      • APC将其操作码缓存存储在共享内存中,因此您将在第一次加载时命中,但不会在后续加载时命中
      • include
        include\u once
        (以及他们的
        需要
        表亲)实际上相当重。以下是一些提高速度的技巧:
        • 使用文件的绝对路径(避免相对路径,如
          。/foo.php
        • 两个
          \u once
          函数都需要检查以确保文件未通过符号链接包含,因为符号链接可以生成指向同一文件的多个路径。这是非常昂贵的。(见下一点)
      • 只加载所需的文件比调用
        include
        便宜得多。使用自动加载程序仅在需要时加载类
      • 本地磁盘几乎总是比网络存储更好的选择。如果可能,如果您有多台服务器,请在每台服务器上保留源代码的副本。这意味着您需要在发布过程中更新多个位置,但在性能方面值得付出努力
      总的来说,这取决于硬盘速度。但与根本不加载文件或从RAM加载文件相比,文件加载速度惊人地慢


      我希望这会有帮助。

      嗯。。和什么相比?一个大文件?记忆?数据库?配置文件。使用xdebug生成探查器输出,并在cachegrind中查看它。这会告诉你时间花在哪里。值得一提的是,有几个PHP库发布了单文件版本(NBBC和HTMLpurifier仅举两个),因此似乎有一些证据表明组合文件可能是值得的。顺便说一下,APC可以告诉您哪些文件最常被访问。使用捆绑的apc.php脚本检查系统缓存。我认为这在很大程度上取决于文件的大小和硬盘的缓存。如果大部分文件都在缓存中,您可能看不到巨大的改进(或者如果您使用的是固态驱动器)。但是如果文件很大,硬盘必须查找每个文件,那么通过限制文件数量,您可以看到一个很好的改进。硬盘性能可能与此无关:首先,他使用的是APC。其次,大多数操作系统在操作系统级别提供文件系统缓存。重复读访问实际上并不经常访问磁盘。感谢所有的回复。让我澄清一下,文件访问是指通过“require”和“include”语句打开的文件。我的意思是,与从更少的文件中运行完全相同的代码相比,它是否会对性能产生影响。感谢您的回复。我使用的是经过大量修改的CodeIgniter版本。我将采纳您的建议,看看使用xdebug进行评测是否能提供一些有用的信息。关闭APC对我没有多大帮助,因为我不知道时间上的差异是否是由于文件加载或APC所做的其他优化造成的。谢谢你提供的信息!非常有帮助!我确实使用了自动加载器,这是我在CodeIgniter中改变的第一件事。我猜你关于include的提示也适用于require?@Naatan是的,两者之间唯一真正的区别是失败时会抛出什么错误/警告。是的,我想,但使用PHP你永远不知道:)再次感谢你的提示。