8

PHP 在处理新请求时是否每次都读取所需的脚本?

你能解释一下 PHP 执行哪些磁盘 IO 操作来处理单个请求吗

如果 PHP 是 Apache 模块或 PHP-fpm,会发生什么变化

4

3 回答 3

9

是的。

想象一下:

script_a.php

<?php
$foo = 'bar';
$bar = 'foo';
?>

script_b.php

<?php
require_once 'script_a.php';
echo $foo . ' ' . $bar;
?>

在运行时,script_b.php实际上将包含:

<?php
$foo = 'bar';
$bar = 'foo';
echo $foo . ' ' . $bar;
?>

因此,每次处理新请求时,它都会读取脚本(或多个脚本)。这就是中高负载服务器使用APCeAccelerator等操作码缓存的原因。

它们所做的是将整个脚本(处理了需要/包含)缓存在内存中,因此不必处理它以对下一个请求进行字节码,而只需执行即可。这可以转化为显着的性能提升,因为没有磁盘 I/O 并且 Zend 引擎不必再次将脚本转换为字节码。

编辑:

如果 PHP 是 Apache 模块或 PHP-fpm,会发生什么变化

不,至少不是 PHP 处理包含/要求的方式。

希望这可以帮助。

于 2013-01-12T10:07:19.087 回答
1

执行 PHP 脚本时,将从硬盘驱动器中读取该脚本。最初执行的脚本包含的任何脚本也是如此。但是,如果您担心性能,可以使用某些缓存技术。

见这里: http: //php.net/manual/en/book.apc.php

于 2013-01-12T10:03:38.710 回答
0

PHP 会根据每个请求读取文件。您可以使用诸如 XCache 之类的操作码缓存器将操作码保存在内存中,因此不需要 PHP 实际读取文件(只需检查其修改时间)。FPM 和 apache 模块不影响任何东西

于 2013-01-12T10:04:49.243 回答