好吧,我不知道我是否可以在这里发布类似的东西。但我很确定这一切都是我们可以讨论新想法以提高知识的正确场所。正确的?
我在想这个:当使用 PHP 作为 APACHE 模块时,对 PHP 文件的每个请求都会生成一个新进程来运行您的代码。通常我们加载多个文件(include
's)并执行各种程序。所以猜猜我们在哪里运行了“index.php”,整个过程会重复几次,必要时会重复几次。
一个实际的例子:如果我们运行一个加载 10 个类的特定 index.php,PHP 将解析所有文件并在需要时执行有趣的部分。它将生成 CPU、内存和存储的 I/O 使用情况。
<?php
require_once 'classes/File.php';
require_once 'classes/Event.php';
require_once 'classes/Mobile.php';
// ...
File::emptyDir('tmp');
?>
它将加载每个类,解析并执行它。好的。
因此,在我不需要多次执行所需文件的环境中,只需执行一次,并且只使用您的方法,如果我创建一个套接字环境以将其用于每个用户请求,是否可以通过避免冗余来超速 PHP 访问?
一个简单的用户交互示例:
- 用户发起请求
/page?version=1.3
。 .htaccess
重定向到request.php
引擎。- 引擎检查是否存在空闲的预加载服务(
service.php
的套接字)并使用它。如果没有,请启动一个新服务(预加载您的代码)并使用它。 - 将用户数据(as
$_SERVER
和$_GET
)发送到服务(例如 JSON),它将变为 WORKING 状态。 - 服务将
request.php
再次返回用户数据。并将其转为 IDLE 以在下一个请求中使用。并且会在很长的空闲时间后关闭。
问题是:这种方法可以通过避免每次都解析所有代码(不包括操作码优化器)、准备类等来超速 PHP?
我想到了一些理论上的缺点/优势:
- GOOD:可能会很快转过请求;
- GOOD:将避免每次加载同一个文件,或者每次都创建一个新进程;
- 好:可以控制每个线程实例和你的状态;
- 中性:如果您更改某些文件,您需要关闭所有服务以创建一个新的更新文件。解决方案:避免这种情况,在开发环境中,每个主要请求都会启动一个新服务。
- 坏:将使用内存更多时间,而不是在每次请求后释放;