首页 > 编程语言 >PHP现代化构建工具: 无需修改任何代码和扩展将你的ThinkPHP项目性能提高20倍

PHP现代化构建工具: 无需修改任何代码和扩展将你的ThinkPHP项目性能提高20倍

时间:2024-07-24 17:19:07浏览次数:16  
标签:Laravel fiber 20 项目 header proxy ThinkPHP PHP

我要分享一个令人激动的黑科技:PRipple

使用这个项目能够在无需修改任何代码且无需第三方扩展的前提下,将你的 Laravel 项目性能提高 20 倍。他仅仅依赖于PHP原生的 pcntl/posix/fiber/sockets

项目灵感

这个项目灵感来源于 PHP 8.1 引入的 fiber 特性,以及 Swoole 和 Workerman 的启发。起因是看到官方发布的PHP 8.1更新中引入了fiber特性,看到这则消息时我非常激动,仿佛看到了PHP的更多可能性。结合我对 Swoole 和 Workerman 的工作流程了解得出结论:它能够完美应用到 Laravel 和 ThinkPHP 等这些规范的面向对象标准框架中。

思路

我的思路是通过利用 fiber 特性,将 Laravel 项目中的 I/O 操作异步化,从而减少阻塞时间,提高整体性能。具体方法包括以下几个方面:

  • 利用 fiber 实现协程:将传统的同步 I/O 操作改为异步 I/O 操作,使得 PHP 代码能够在等待 I/O 操作时执行其他任务。
  • 集成到现有框架:在不修改现有业务逻辑代码的前提下,通过中间件或扩展包的形式,将新的异步 I/O 操作集成到 Laravel 项目中。
  • 优化资源利用率:通过减少阻塞时间,提高服务器的并发处理能力,从而提升整体性能。

结果

经过一系列的测试和优化,这个项目最终成型, 到目前为止我已经在生产环境中部署且能够在Unix/Linux服务器上正常工作,以下为性能对比结果
image

安装方法

通过composer安装

composer require cclilshy/p-ripple-drive

运行

php artisan p:run

# -l | --listen 服务监听地址,默认为 http://127.0.0.1:8008
# -t | --threads 服务线程数,默认为4

Nginx伪静态配置

location / {
	try_files $uri $uri/ @backend;
}

location @backend {
	proxy_pass http://127.0.0.1:8008;
	proxy_set_header Host $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_set_header X-Forwarded-Proto $scheme;
}

不出意外应该是这样的运行结果
image

至此,你的工作已经完毕,无需进行额外配置,但仍然需要有一定了解CLI运行模式的机制,并知悉下列函数在运行过程中会发生什么以决定如何使用它们,如 dd var_dump echo exit die, 如果你的项目中充斥了 header('content-type: application/json'); die(json_encode($data)); 这样的写法那这个项目不适用于它

更多

该项目不仅提供了性能提升,还提供了多个协程助手以让开发者能够充分利用协程的特性,当然你也可以忽略这一项

如你可以在控制器中做这些事:

特性 defer

public function index(Request $request) : string
{
	\P\defer(function(){
	//TODO: 这里的代码将在return之后运行,允许返回请求后做某些事情
	});
	return 'Hello PRipple';
}

特性 await

public function index(Request $request) : string
{
	// 非堵塞进程模式读取某个文件
	$content = \P\await(
		\P\IO::File()->getContents(__FILE__)
	);

	return $content;
}

特性 组件原生化

PRipple不会干涉组件的规范, 你可以使用任何你喜欢的组件,并得到预期的结果,
如以下例子将得到GuzzleHttp的标准Response对象

public function index(Request $request) : string
{
	// 非堵塞进程模式请求某个URL
	$response = \P\await(
		\P\Net::Http()->Guzzle()->getAsync('http://www.baidu.com')
	);
	return $response;
}

附言

目前,该项目已经支持 ThinkPHP 和 Laravel。未来我计划将他扩展到更多的 PHP 框架中,
尽管该项目在我的服务器上完全正常工作,我甚至觉得它很完美,但依然需要 bug 提交。期待大家在使用过程中反馈问题,共同完善这个项目。也欢迎大家参与到项目的开发和优化中,共同推动 PHP 生态的发展。如果你想了解它是怎么工作的以及更多的使用方法欢迎查阅文档

项目驱动: https://github.com/cloudtay/p-ripple-drive/blob/main/README.zh_CN.md
项目核心: https://github.com/cloudtay/p-ripple-core/blob/main/README.zh_CN.md

标签:Laravel,fiber,20,项目,header,proxy,ThinkPHP,PHP
From: https://www.cnblogs.com/cclilshy/p/18321305

相关文章

  • 学习pcie—20240724
    因为前一段时间看了xdma的IP核手册,发现只看xdma看不太懂,不清楚pcie的传输的流程,不了解报文格式,所以看看pcie手册,主要关注发送接收时序首先是pcieIP核与xdmaIP核的区别:IntegratedBlockforPCIExpress:7SeriesIntegratedBlockforPCIExpress是最基础的PCIeIP,实现的是......
  • VS2022 安装.NET4.5目标包
    转载自https://www.cnblogs.com/Stay627/p/15549958.html[VS2022安装.NET4.5目标包]众所周知VS2022将不再支持.NET4.5,即使在VisualStudioInstaller中也找不到.NET4.5的选项在不改变项目结构的情况下,要么选择继续使用VS2019,当然博主已经卸掉了,那么还有什么方法呢?我们可以......
  • [atcoder utpc2023_p] Priority Queue 3
    PriorityQueue3题意:有一个小根堆和\(1\)~\(n\)个数,以及一个操作序列,+表示\(push\),-表示\(pop\),\(pop\)有\(m\)次,问你有多少种插入顺序使得最后的pop集合与给出的的数字集合\(Y\)相同。首先有个浅显的发现:对于不在\(Y\)集合中的数,可选范围形如一个阶梯,换句话......
  • 2024 牛客多校 3
    https://ac.nowcoder.com/acm/contest/81598睡到十点多起床,吃完早饭开打。。。下午倒是不困了,脑子还是不转a有个显然的贪心,没办法加速模拟,1WA1T后给zsy了。这种前期题没秒掉的话还是趁早丢出去吧h随机数据本地1.4s,牛客十连重测,以为卡卡常就行了,最后也没过。看榜很早......
  • DASCTF 2023 & 0X401七月暑期挑战赛【PWN】(FileEditor篇)
    DASCTF2023&0X401七月暑期挑战赛【PWN】(FileEditor篇)题目保护情况(保护全家桶)64位ida逆向模拟了一个类似vim的功能,有打开文件,打印内容,插入行,删除行,复制行,和编辑行,还有查找字符和替换字符的功能,然后就是保存退出一个一个来分析吧1.open就是打开一个file文件。没有会创建......
  • php判断文件真实后缀(防止修改后缀)
    <?php//判断文件真实类型functionget_file_type($fileName){$file=fopen($fileName,"rb");$bin=fread($file,2);//只读2字节fclose($file);$strInfo=@unpack("C2chars",$bin);//将字节转换为字节二进制的数组$typeCode=(int)($str......
  • SketchUp v2023 激活版下载与安装教程 (强大的绘图三维建模工具)
    前言Sketchup草图大师专业版,一套面向建筑师、城市规划专家、制片人、游戏开发者以及相关专业人员的3D建模程序,全球知名的三维建模软件,强大的绘图工具、建模渲染、扩展插件和渲染器模板、海量3D模型库及建模灯光材质渲染效果图,用于建筑师、城市规划专家、游戏开发等行业。......
  • 中望CAD 机械 v2024 解锁版下载与安装教程 (CAD三维制图)
    前言中望CAD机械版是一款国产CAD制图软件,专为机械设计而打造。中望CAD机械版2024中文版拥有丰富的标准零件图库,提供绘图标准规范,并支持定制化需求。其智能注释功能更是一大亮点,通过一个命令即可完成80%的标注工作,极大提高了绘图效率。一、下载地址下载链接:中望CAD机械......
  • [题解]P3187 [HNOI2007] 最小矩形覆盖
    P3187[HNOI2007]最小矩形覆盖调了半天居然是因为没判断浮点精度误差才\(\colorbox{IndianRed}{\texttt{\color{White}{WA}}}\)了\(3\)个点,其他都没有问题!警钟长鸣……首先有一个结论:凸多边形的最小外接矩形一定和它的一条边重合。这个结论,网上几乎找不到完整的证明,目前发现......
  • [POI2012] PRE-Prefixuffix 题解
    前言题目链接:洛谷。题意简述给出长为\(n\)的串\(\texttt{S}\)。求最大的\(l\)满足:\[2l\leqn\land\texttt{S}[1\ldotsl]\doteq\texttt{S}[n-l+1\ldotsn]\]其中\(\doteq\)表示循环相同。题目分析看到循环相同,套路化想到,两个字符串一定可以表示成\(\tex......