使用include
文件非常常见。我认为在不考虑性能的情况下保持代码整洁是过度使用的。对于几个include
,磁盘应该读取文件,因为我们极其使用磁盘,这可能是一个缓慢的过程。但是,这不是主要的缓慢过程或速率限制过程,因为使用file_get_contents
加载文件的速度要快几倍。
我认为这是主要网站将javascripts放在html文件中而不是按文件加载的原因。或者,将大型JS文件拆分为几个小型JS文件可能是个好主意,因为并行http请求可以更快地加载整个JS代码。但这与php文件不同,因为php脚本在此过程中逐个读取include
个文件。
请评论这个问题有多严重?想象一下,网页加载的时间为0.60秒,10个php文件中的include
可以将其转换为0.70秒吗?
虽然这种影响可以忽略不计,但我想知道是否有办法加快这一过程。我不是指像APC
这样的PHP缓存。
P.S。这个问题不是实际应用(典型案例),而是一般的理论考虑。
答案 0 :(得分:16)
include
及其同类是必需的。它类似于Java和python中的import
,因为它用于类和函数定义。 include
应该非常快,但使用它会延迟脚本执行,相比之下,如果它不存在。 include
与file_get_contents()
完全不同。后者是一个函数而不是一个构造并返回一个字符串。 include
实际上会执行包含文件的代码。
关于拆分JS文件的说法不正确,因为脚本从相同的域下载并行下载,并且通常建议尽可能少地包含这些文件。
我非常怀疑拥有多个include
,假设一切都是必要的,会降低页面的性能。如果您遇到性能问题,请查看其他地方。
如果你想加速php,请考虑使用php编译器。
答案 1 :(得分:6)
是的,确实如此。您以前使用的库会因下面的许多包含而导致性能下降。 提高性能的最佳方法是:
它可以将您的解决方案加速22次。阅读更多Here
答案 2 :(得分:6)
考虑一下:
(index.php)
for ($i=0; $i<100000; $i++) {
include('somefile.php');
}
(somefile.php)
<?php
// nothing here
index.php需要大约115秒(对我来说)处理100,000次迭代,同时包含somefile.php,即使somefile.php中没有任何内容。
然而:
(index.php)
for ($i=0; $i<100000; $i++) {
// no file included this time
}
index.php现在需要0.002秒才能完成而没有include()结构。
(index.php)
for ($i=0; $i<100000; $i++) {
echo $i .'<br/>';
}
index.php需要0.02秒才能回复100,000次迭代的$ i。
当然,由于迭代次数很多,这是一个非常极端的例子,但它确实表明,通过简单地包含一个include构造,脚本执行时间可以按指数方式延迟。下次编写具有大量迭代的进程时,请考虑这一点,即。读/写大型XML文件等。最好保持代码内联,即使这意味着它不那么“易于管理”。因为只是通过包含一个include(),你不仅要在大约100,000次迭代中为脚本执行时间添加~115秒(~2分钟),还要考虑是否include()(somefile.php)有自己的进程执行。我的例子只是添加一个include()构造..包含的文件什么都没有。
现在,包含网页的文件,时间可以忽略不计。我只是指出include()结构确实需要额外的处理,无论其内容如何。
答案 3 :(得分:4)
PHP必须解析代码,无论它是在主php文件还是包含中。将它放入包含可能没有任何区别。磁盘速度没有任何区别,因为它将在第一次之后缓存。
答案 4 :(得分:1)
因此,当然,包括文件可能会减慢php脚本的速度。有时您需要包括文件以阐明您的编码结构,体系结构和设计。但是,有一些方法和解决方案可以提高包含更多内容的php脚本的速度。
您可以使用以下方法来加速脚本: