PHP在处理新请求时是否每次都读取所需的脚本?
您能解释一下PHP执行哪些磁盘IO操作来处理单个请求
如果PHP是Apache模块或PHP-fpm
,是否会发生变化答案 0 :(得分:7)
是
想象一下:
<强> 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;
?>
因此,每次处理新请求时,它都会读取脚本(或脚本)。这就是为什么中高负载的服务器使用APC或eAccelerator等操作码缓存的原因。
这些操作是将整个脚本(需要/包括已处理)缓存在内存中,因此不必将其处理为下一个请求的字节码,而是可以执行。这可以转化为显着的性能提升,因为没有磁盘I / O,Zend引擎不必再将脚本转换为字节码。
修改强>
如果PHP是Apache模块或PHP-fpm
,是否会发生变化
不,至少不是PHP处理包含/要求的方式。
希望这有帮助。
答案 1 :(得分:1)
当执行PHP脚本时,它将从硬盘驱动器中读取。对于最初执行的脚本包含的任何脚本也是如此。但是,如果您担心性能,可以使用某些缓存技术。
答案 2 :(得分:0)
PHP会在每次请求时读取文件。您可以使用操作码cacher(如XCache)将操作码保留在内存中,因此不需要PHP实际读取文件(只检查其修改时间)。 FPM和apache模块不会影响任何内容