读取包含文件会减慢PHP脚本加载吗?

Goo*_*bot 13 php filesystems file include

使用include文件很常见.我认为在不考虑性能的情况下保持代码整洁是过度使用的.对于几个includes,磁盘应该读取文件,因为我们极其使用磁盘,它可能是一个缓慢的过程.但是,这不是主要的慢速过程或速率限制过程,因为加载文件的file_get_contents速度要快几倍.

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

  1. 请评论这个问题有多严重?想象一下,网页是在0.60秒内加载的,include10个php文件可以将它变成0.70秒?

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

PS这个问题不是实际应用(典型案例),而是一般的理论考虑.

Exp*_*lls 16

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

关于拆分JS文件的说法不正确,因为脚本从同一个域块下载并行下载,并且通常建议尽可能少地包含这些文件.

我非常怀疑拥有多个includes,假设一切都是必要的,将会降低页面的性能.如果您遇到性能问题,请查看其他地方.

如果你想加速php,请考虑使用php编译器.


Mar*_*cus 7

考虑一下:

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

(somefile.php)
<?php
// nothing here
Run Code Online (Sandbox Code Playgroud)

index.php需要~115秒(对我来说)处理100,000次迭代,同时包括somefile.php,即使somefile.php中没有任何内容.

然而:

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

如果没有include()结构,index.php现在需要0.002秒才能完成.

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

index.php需要0.02秒才能回复$ i的100,000次迭代.

当然,由于迭代次数很多,这是一个非常极端的例子,但它确实表明,通过简单地包含一个include构造,脚本执行时间可以按指数方式延迟.下次编写具有大量迭代的进程时,请考虑这一点,即.读/写大型XML文件等.最好保持代码内联,即使这意味着它不那么"易于管理".因为只是通过包含一个include(),你不仅要在大约100,000次迭代中为脚本执行时间添加~115秒(~2分钟),还要考虑是否include()(somefile.php)有自己的进程执行.我的例子只是添加一个include()构造..包含的文件什么都没有.

现在,包括文件在这里和那里的文件,时间可以忽略不计.我只是指出include()结构确实需要额外的处理,无论其内容如何.


idm*_*idm 6

是的,它确实.您以前使用的库会因下面的许多包含而导致性能下降.提高性能的最佳方法是:

  1. 将所有包含的文件放在一个文件中
  2. 使用加速器

它可以将您的解决方案加速22倍.阅读更多在这里