2

假设我们安装了所有默认设置的 Linux + Apache + PHP。我有一些使用大型第三方 PHP 库的 PHP 网站,比如说 1 Mb 的 PHP 源。这个库很少使用,假设只用于 POST 请求。我不能将这个库的使用移动到单独的 PHP 文件中是有原因的。所以,我必须为每个 HTTP 请求包含这个库,但很少使用它。在这种情况下,我应该担心 PHP 解析所花费的时间吗?让我解释。我可以这样做:

<?php
require_once('heavy_library.php');
// do regular stuff
if(we need heavy library)
{
    heavy_library_function();
}
?>

我认为这个解决方案很糟糕,因为在这种情况下,heavy_library.php 会针对每个 HTTP 请求进行解析。我可以将它移到 if 语句中:

<?php
// do regular stuff
if(we need heavy library)
{
    require_once('heavy_library.php');
    heavy_library_function();
}
?>

现在据我了解,只有在我们需要库时才会对其进行解析。

现在,回到问题上来。Apache 和 PHP 的默认设置。我应该关心这个问题吗?我应该将 require_once 移到真正使用它的地方,还是可以像往常一样保留它,Apache / PHP 会做某种缓存来阻止解析每个 HTTP 请求?

4

2 回答 2

3

不,Apache 不会进行缓存。您应该保留require_once内部,if以便仅在需要时使用。

如果您确实想要缓存 PHP,请查看类似eaccelerator的内容。

于 2012-12-29T18:09:25.603 回答
1

当你告诉 PHPrequire()某事时,它无论如何都会做;唯一可以防止每次从头开始解析该文件的方法是使用操作码缓存,例如APC

在这种情况下,最好有条件地加载文件。如果您担心这些条件会使生活变得更加复杂,请执行一个小型基准测试。

您还可以使用自动加载“按需”自动加载文件;看spl_autoload

于 2012-12-29T18:11:57.687 回答