前言
近期我专注于这项研究,此前总是听闻他人提及它能提升效率,对此我感到十分困惑。经过一番探究,我对这一概念有了自己独到的见解。
PHP-CGI 的黑历史
在处理网络请求方面,PHP 的应用普遍采用 CGI 方法。那么,CGI究竟是什么呢?
CGI
公共网关接口,简称为CGI,在中文中被称为“公共网关接口”。许多人可能觉得CGI是一种程序,确实,我之前也是这样想的。然而,当我开始深入研读《图解HTTP》并详细了解HTTP协议后,我才意识到,实际上CGI是一种协议。几乎所有的编程语言都能实现CGI,因此,任何编程语言都可以用作网站的后台语言——不过这里稍微扯远了。
PHP-CGI
如前所述,CGI协议得以应用,因此PHP开发了一套自己的CGI实现,即PHP-CGI。然而,随着科技的进步,人们逐渐发现PHP-CGI的性能并不十分理想。众所周知,PHP在执行过程中,需要依赖于php.ini配置文件。因此,每当 PHP-CGI 程序启动运行,它都会成为一个全新的进程,必须重新读取配置文件并进行初始化,这一过程导致了大量资源与时间的无效消耗。
如何防止此类浪费呢?机智的程序员们提出了另一策略:我们为何不事先加载配置,接着,每个执行的任务仅需复制现有进程,这样不就可以避免之前的浪费了吗?于是,一种全新的方法便应运而生。
Fast,即快速公共网管接口,其全称如此。没错,这确实是一种协议。然而,该协议并非仅因PHP而存在。
(httpd)
几乎所有网络容器都具备了该功能。其中,httpd 首当其冲。对于 PHP 而言,httpd 能够自行构建一个模块。它会在启动时预先加载 php.ini 文件中的配置信息。一旦有请求需要 PHP 处理,PHP 就无需再次重新加载 php.ini。这也是为何每次对 php.ini 进行修改后,都必须重新启动 httpd 服务的原因所在。
Nginx 与 php-fpm
PHP-FPM同样属于此类实现之一。在常规操作中,我们通常会将Nginx中的PHP处理任务代理至php-fpm的端口,由php-fpm负责处理。php-fpm通过预先加载配置信息,并将任务分配给子进程,进而对进程进行管理。
辣么,问题随之而来,尽管php-fpm已经实现了相应的功能,但在处理请求时,它仍需重新执行一个脚本。例如,某些框架在启动阶段就需要加载大量的依赖和文件,这无疑增加了一定的资源消耗。接下来,我们来查看一下/index.php的源代码。
引入文件路径为`__DIR__`所在目录的上一级目录中的`bootstrap/autoload.php`文件。
引入了应用程序实例,通过执行如下命令:require_once(__DIR__ . '/../bootstrap/app.php');
将应用程序的实例与HTTP内核接口的实例进行关联,通过调用make方法,并指定Illuminate框架下的Http\Kernel类。
$response = $kernel->handle(
);
$response->send();
内核执行了请求的终止操作,并处理了相应的响应。
审视前述两句,不禁让人感叹,究竟需要引入多少依赖项呢?这无疑意味着大量的时间和资源投入,而且每发起一次请求,这些依赖项都得重新加载,真是让人心痛不已。
为何我们不能像过去那样,不重新导入配置文件,而采取一种无需加载大量依赖项的方法呢?
当然没问题,这时它就发挥了作用。既然是通过调用 $app->make 方法来创建一个新的对象,那么原有的 $app 对象自然不会受到影响。因此,我们可以在处理请求之前,提前生成 $app 对象,这样一来,处理速度就会更快,对吧?我们还可以对其进行一些简单的调整。
require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
创建了一个新的Swoole HTTP服务器实例,该实例监听在本地地址127.0.0.1的9501端口。
服务器在接收到请求时,会触发一个函数,该函数接收请求对象和响应对象作为参数,并且在这个函数内部,可以访问到应用实例。
kernel变量被赋值为app对象通过make方法创建的IlluminateContractsHttpKernel类实例。
$response = $kernel->handle(
请求对象通过捕获操作被创建,由 Illuminate\Http\Request 类实例化。
);
$res->end($response);
内核执行了请求的终止操作,并处理了相应的响应。
});
$serv->start();
现在,我们已准备好执行脚本,进而实现对9501端口的监听。接着,参照Nginx配置php-fpm的方式对其进行配置。由此,我们能够观察到,在请求到来之前,所有依赖已经被彻底加载完毕,接下来的任务便是处理这些请求。
我的这个调整相当粗略,根本不适合用于实际的生产场景,仅此提供一个示范。
后记
这仅仅是基于我个人的看法,对我个人看法的一个归纳总结。我目前仍在不断探寻,因为涉及的领域知识实在太过广泛,需要逐步积累。文中或许存在不妥之处,诚挚邀请各位专家不吝赐教,指正批评!
PHP作为网络开发的顶尖技术,其性能并不亚于其他编程语言,一旦加以扩展,其能力更是大幅提升,犹如猛虎添翼!它已成功涉足通信和物联网领域,开发了诸如百度地图、百度订单中心等众多知名应用。年后该语言在程序员招聘领域排名第二,随着寒冬裁员期的结束,正值众多企业纷纷扩大招聘规模之际,目前初级程序员供过于求,而具备中高级技能的程序员则成为企业争相寻求的紧缺人才。本教程专为那些拥有1至6年PHP开发经验的开发者量身打造,旨在帮助他们提升中高级技能,以便在金九银十的招聘旺季中找到薪资优厚的工作岗位!

领取方式:点赞关注小编后私信【资料】获取资料领取方式!
部分资料展示:





领取方式:点赞关注小编后私信【资料】获取资料领取方式!
扫一扫在手机端查看
- 上一篇:阿里云app云资源管理_阿里云app
- 下一篇:_容灾切换必备--全局流量管理介绍
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1