读取包含文件会减慢 php 脚本加载速度吗?

2022-08-31 00:12:47

使用文件是很常见的。我认为在不考虑性能的情况下保持代码整洁被过度使用了。对于几个s,磁盘应该读取文件,并且由于我们非常使用磁盘,因此这可能是一个缓慢的过程。但是,这不是主要的慢速过程或速率限制过程,因为加载文件的速度要快几倍。includeincludefile_get_contents

我认为这就是主要网站将javascript放在html文件中而不是按文件加载它们的原因。或者,将一个大的JS文件拆分成几个小的JS文件可能是一个好主意,因为并行的http请求可以更快地加载整个JS代码。但这与php文件不同,因为php脚本在此过程中逐个读取文件。include

  1. 请评论这个问题有多严重?想象一下,一个网页加载在0.60s,10个php文件可以把它变成0.70s吗?include

  2. 虽然这种影响可以忽略不计,但我想知道是否有办法加快这一进程。我不是说php缓存像.APC

附言这个问题不是为了实际应用(一个典型案例),而是一般的理论考虑。


答案 1

include它的同类是必需品。它类似于Java和python,因为它用于类和函数定义。 应该非常快,但是与不存在脚本相比,使用它将延迟脚本执行。 与 完全不同。后者是一个函数而不是一个构造,并返回一个字符串。 将实际执行所包含文件的代码。importincludeincludefile_get_contents()include

您关于拆分 JS 文件的陈述是不正确的,因为从同一域下载脚本会阻止并行下载,并且通常建议在一般情况下尽可能少地包含。

我非常怀疑,假设所有必要,拥有多个s会降低页面的性能。如果您遇到性能问题,请查找其他位置。include

如果你想加快php的速度,可以考虑使用php编译器。


答案 2

请考虑以下情况:

(index.php)
for ($i=0; $i<100000; $i++) {
    include('somefile.php');
}

(somefile.php)
<?php
// nothing here

index.php需要大约115秒(对我来说)来处理100,000次迭代,同时包括一些文件.php,即使某些文件.php中没有任何内容。

然而:

(index.php)
for ($i=0; $i<100000; $i++) {
    // no file included this time
}

index.php现在需要 0.002 秒才能完成,而无需包含() 构造。

(index.php)
for ($i=0; $i<100000; $i++) {
    echo $i .'<br/>';
}

index.php 需要 0.02 秒来回显 100,000 次迭代$i。

当然,由于迭代次数众多,这是一个非常极端的例子,但它确实表明,通过简单地包含包含构造,脚本执行时间可能会呈指数级延迟。下次编写具有大量迭代的进程时,请考虑这一点,即。读取/写入大型 XML 文件等最好保持代码内联,即使这意味着它不那么“可管理”。“因为您不仅通过包含包含()()(somefile.php)具有自己的进程,因此您不仅在每~100,000次迭代中将大约115秒(约2分钟)添加到脚本执行时间。我的例子只是简单地添加一个 include() 构造。包含的文件不包含任何内容。

现在,包括网页上到处的文件,时间可以忽略不计。我只是指出,include() 构造确实需要额外的处理,无论其内容如何。


推荐