我刚刚阅读this thread,其中使用include_once
和require_once
的利弊正在辩论中。从那个讨论(特别是Ambush Commander's answer),我已经拿走了这样的事实(?),PHP中任何类型的包含本身都很昂贵,因为它要求处理器将新文件解析为OP代码等等。
这让我思考。
我编写了一个小脚本,将一些Javascript文件“滚动”成一个(将所有内容附加到另一个文件中),这样可以packed减少HTTP请求和整体带宽使用。
通常对于我的PHP应用程序,我有一个“includes.php”文件,它包含在每个页面上,然后包含我需要的所有类和其他库。 (我知道这可能不是最好的做法,但它确实有效 - PHP5的__autoload
功能在任何情况下都会让这更好。)
我应该在我的PHP文件上应用相同的“滚动”技术吗?
我知道关于过早优化是邪恶的说法,但我们把这个问题理解为理论,好吗?
答案 0 :(得分:4)
Windows上的Apache / PHP存在问题,导致应用程序在加载或甚至触摸太多文件时非常慢(加载大约50-100个文件的页面可能只花费几秒钟来处理文件业务)。包含/要求和使用文件(fopen,file_get_contents等)都会出现此问题。 因此,如果您(或者更可能是其他任何人,由于这篇文章的年龄)将在apache / windows上运行您的应用程序,减少加载文件的数量对您来说是绝对必要的。将更多PHP类合并到一个文件中(一个自动化脚本会很有用,我还没有找到)或者小心不要触摸应用程序中任何不需要的文件。
答案 1 :(得分:1)
正如你所说:“过早优化......”。然后,如果你担心性能,请使用像APC这样的操作码缓存,这会使这个问题几乎消失。
答案 2 :(得分:1)
这在某种程度上取决于解析几个小文件或解析一个大文件是否更多。如果你需要根据需要提供文件(并不是说你必须应该做那样的事情),那么可能对于某些执行路径来说,编译所需的编译要比将所有代码都集成到一个解析器必须编码的大PHP文件是否需要它。
与这个问题保持一致,这是在思考PHP运行时内部的专业知识,而不是听起来好像过度参与其中有任何现实世界的好处。如果你的PHP遇到严重的减速,如果使用require_once成为瓶颈,我会非常惊讶。
答案 3 :(得分:0)
这不是你直接问题的答案,只是关于你的“js打包”。
如果您单独保留javascript文件并允许它们单独包含在HTML源代码中,则浏览器将缓存这些文件。然后在浏览器请求相同javascript文件的后续请求中,您的服务器将返回304未修改的标头,浏览器将使用缓存版本。但是,如果您在每次请求时将javascript文件“打包”在一起,浏览器将在每次加载页面时重新下载该文件。