PHP 在处理新请求时是否每次都读取所需的脚本?
你能解释一下PHP在处理单个请求时执行了哪些磁盘IO操作吗
如果 PHP 是 Apache 模块或 PHP-fpm,会发生什么变化
最佳答案
是的。
想象一下:
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 .
它们所做的是在内存中缓存整个脚本(已处理 requires/includes),因此不必将其处理为下一个请求的字节码,而是可以直接执行。这可以转化为显着的性能提升,因为没有磁盘 I/O,并且 Zend 引擎不必再次将脚本转换为字节码。
编辑:
Does something change if PHP is an Apache module or PHP-fpm
不,至少不是 PHP 处理包含/要求的方式。
希望这对您有所帮助。
关于php - PHP 是否在每次请求时都读取所需的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14292223/