PHP性能提升方案
一、背景与介绍
PHP语言开发效率高,特别应用于适合中小型项目,对于创业初期敏捷开发验证项目可行性或者Demo演示绝对占据优势。 但是随着现在Web应用的复杂性,针对项目要适应高并发、高流量的访问特性,PHP确实在性能方面相对Go、Java存在一定的差距。
那真的这种情况,我们如何应对呢?
1、旧的PHP项目要全部推翻重构? 例如使用Go、Java重写,这个投入的开发成本和测试成本太高,老板基本上都不会采用这个方案的,除非他脑子有问题。 旧的项目至少还能跑,你这个上来就大刀阔斧搞革命,那真的要凉了。 所以这种方案是老板或者大领导下令决心重改,否则想都不要想。
2、旧项目找出存在性能瓶颈的接口,针对这些接口做优化,或者某些模块拆分微服务。 这种方案,我觉得至少比第一种方案可行。 因为根据二八定律, 百分之八十的访问流量决定在百分之二十的接口里面,所以要进行服务拆分或者重构,开发和测试的工作量要小N倍 。例如拆分出来的微服务,可以使用Go进行实现, 但是还是存在一定的开发工作量,队员要学习心得语言、学习新技术
3、直接找到一种方案,能够直接应用在当前项目,同时相对第二种方案的工作量更少。继续使用PHP开发,减少额外技术学习时间成本, 这个就是今天要讨论的主题。 其实也存在一些方案能针对PHP项目提速,改造工作量相对较少同时能提高性能。 例如接下来介绍的Laravel Octane、Swoole以及(衍生框架Hyperf、EasySwoole)、RoadRunner、FrankenPHP
二、提速方案
1、Laravel Octane
Laravel Octane通过使用高性能的应用程序服务器(包括FrankenPHP、Open Swoole、Swoole和RoadRunner)为您的应用程序提供服务,从而提高应用程序的性能。Octane引导您的应用程序一次,将其保存在内存中,然后以超音速向其提供请求。
官网: https://laravel.com/docs/11.x/octane#introduction
语言要求: PHP8.1+ 以上、Laravel10+
如果你正在使用的Laravel框架, 通过Laravel Octane的部署方式替换以往的Nginx+PHP-FPM方式,应该是比较方便的。 虽然说有版本限制,但是终归官方确实有这种提高性能的方式支持,可以一试.
Laravel Octane只是做了部署整合,底层还是使用的其它的引擎加速, 例如目前支持Swoole、RoadRunner、FrankenPHP的相关适配
2、Swoole以及衍生框架Hyperf、EasySwoole等
大名鼎鼎的Swoole就无需我都说了吧,韩天峰老师主导的开源项目,使用过PHP的基本上都有所耳闻。 使用Swoole或者衍生框架如Hyperf、EasySwoole等对PHP项目进行改造, 这样也是可以的,应该大部分的PHP代码逻辑是无需改动的,只需要改动部分代码方式,符合Swoole规范即可
3、RoadRunner
官网文档: https://roadrunner.dev/
github地址: https://github.com/roadrunner-server/roadrunner
RoadRunner是一款开源(MIT)高性能PHP应用服务器,使用Go编写并提供插件的进程管理器. 它支持作为服务运行,并能够使用插件在每个项目的基础上扩展其功能。
说白了,这个RoadRunner是Go编写的新版PHP-FPM, 可以针对PHP进程进行常驻运行,从而提高性能
4、FrankenPHP
官方文档: FrankenPHP: the modern PHP app server
github地址: https://github.com/dunglas/frankenphp
FrankenPHP是一个现代的PHP应用服务器,构建在Caddy web服务器之上。
FrankenPHP凭借其惊人的功能为您的PHP应用程序提供了超能力:早期提示、工作模式、实时功能、自动HTTPS、HTTP/2和HTTP/3支持…
FrankenPHP可与任何PHP应用程序配合使用,并使您的Laravel和Symfony项目比以往任何时候都更快,这要归功于它们与工作模式的官方集成。
FrankenPHP也可以作为一个独立的Go库,使用net/http将PHP嵌入任何应用程序中。
FrankenPHP也是Go语言编写、基于Caddy构建的PHP应用服务器。本质上还是通过Go的协程能力来管理PHP常驻进程,减少PHP进程针对框架每次都要重复加载,提高性能
三、总结
上述的这几种提高PHP运行性能方案,可以斟酌进行选择,找到属于自己项目合适的提速方案。无论任何的提速方案都会有一些开发和适配的工作量,只是看工作量大小和可控性,这个任何一种改造方案都无法避免的。
如果要大刀阔斧进行项目重构,使用Go进行重构是一个不错的方案。 因为Go和云原生K8S、Docker容器化关系相对紧密, 占用资源小、跨平台性也OK、开发效率也高。相对Java占用资源确实很大,JVM动不动就是1G起步是标配, Go用到500M都算大应用了, 不过这个看团队选择,没有绝对的最优解。
未来云原生肯定是潮流和趋势,体验过容器化的遍历,再让你回到物理机的部署方式十分难受。
既然是潮流风口,为什么不乘早一步到位呢? 雷军说, 站在风口,一头猪都能被吹起来! 我认为我们做程序的也可以适用这个方法论,选择正确的技术方向+努力,才会让技术能力变现!
相关文章:
PHP性能提升方案
一、背景与介绍 PHP语言开发效率高,特别应用于适合中小型项目,对于创业初期敏捷开发验证项目可行性或者Demo演示绝对占据优势。 但是随着现在Web应用的复杂性,针对项目要适应高并发、高流量的访问特性,PHP确实在性能方面相对Go、J…...
关系(二)利用python绘制热图
关系(二)利用python绘制热图 热图 (Heatmap)简介 热图适用于显示多个变量之间的差异,通过颜色判断彼此之间是否存在相关性。 快速绘制 基于seaborn import seaborn as sns import pandas as pd import numpy as np i…...
P8597 [蓝桥杯 2013 省 B] 翻硬币
# [蓝桥杯 2013 省 B] 翻硬币 ## 题目背景 小明正在玩一个“翻硬币”的游戏。 ## 题目描述 桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零),比如可能情形是 **oo***oooo&#x…...
主流公链 - Fantom
Fantom:高性能的区块链协议 Fantom是一种开创性的区块链协议,旨在革新去中心化应用和数字金融领域 技术特点 共识机制 Lachesis协议:Fantom使用了Lachesis协议作为其共识算法。Lachesis是一种 异步拜占庭容错(ABFT)共…...
vue-quill-editor 富文本编辑器(可上传视频图片),组件挂载的方式实现
1.安装 npm install vue-quill-editor --save npm install quill-image-drop-module --save npm install quill-image-resize-module --save2.在组件下面新增组件 QlEditor (1)index.vue <template><div><div idquillEditorQiniu><!-- 基于element…...
入门编程第一步,从记住这些单词开始
** 入门编程第一步,从记住这些单词开始 ** 2023-10-18 一、交互式环境与 print 输出 1、print : 打印/输出 2、coding : 编码 3、syntax : 语法 4、error : 错误 5、invalid : 无效 6、idenfifier : 名称/标识符 7、character : 字符 二、字符串的操作&#x…...
[C++]使用OpenCV去除面积较小的连通域
这是后期补充的部分,和前期的代码不太一样 效果图 源代码 //测试 void CCutImageVS2013Dlg::OnBnClickedTestButton1() {vector<vector<Point> > contours; //轮廓数组vector<Point2d> centers; //轮廓质心坐标 vector<vector<Point&…...
vscode连接不上,终端ssh正常,一直输入密码正确但是无法登录
若是之前链结果突然等不上,使用第一个链接 若是第一次链接连不上,先使用第二个链接,在使用第一个链接 原因:原因是服务器端的wget命令不能使用,vscode需要服务器端下载个文件,无法下载就导致了如上的错误…...
Hive on Spark 配置
目录 1 Hive 引擎简介2 Hive on Spark 配置2.1 在 Hive 所在节点部署 Spark2.2 在hive中创建spark配置文件2.3 向 HDFS上传Spark纯净版 jar 包2.4 修改hive-site.xml文件2.5 Hive on Spark测试2.6 报错 1 Hive 引擎简介 Hive引擎包括:MR(默认)…...
ROS 基本
ROS创建自己的功能包 ROS中工作空间(workspace)是一个存放工程开发相关文件的文件夹,其中有四个文件夹。 src:代码空间(Source Space)build:编译空间(Build Space)devel:开发空间(Development Space)install:安装空间(Install Space) OK接下来创作工作空间&#…...
Pygame基础9-射击
简介 玩家用鼠标控制飞机(白色方块)移动,按下鼠标后,玩家所在位置出现子弹,子弹匀速向右飞行。 代码 没有什么新的东西,使用两个精灵类表示玩家和子弹。 有一个细节需要注意,当子弹飞出屏幕…...
Ps:颜色查找
颜色查找 Color Lookup命令通过应用预设的 LUT 来改变图像的色彩和调性,从而为摄影师和设计师提供了一种快速实现复杂色彩调整的方法,广泛应用于颜色分级、视觉风格的统一和创意色彩效果的制作。 Ps菜单:图像/调整/颜色查找 Adjustments/Colo…...
vue3+vite 模板vue3-element-admin框架如何关闭当前页面跳转 tabs
使用模版: 有来开源组织 / vue3-element-admin 需要关闭的.vue 页面增加以下方法 //setup 里import {LocationQuery, useRoute, useRouter} from "vue-router"; const router useRouter(); function close() {console.log(|--router.currentRoute.value, router.cur…...
JavaScript 对象管家 Proxy
JavaScript 在 ES6 中,引入了一个新的对象类型 Proxy,它可以用来代理另一个对象,并可以在代理过程中拦截、覆盖和定制对象的操作。Proxy 对象封装另一个对象并充当中间人,其提供了一个捕捉器函数,可以在代理对象上拦截…...
Qt + Vs联合开发
Qt + Vs联合开发 文章目录 Qt + Vs联合开发环境说明VS+Qt安装注意事项QtCreator msvc编译器配置Visual Studio 2019 + Qt 5.12.10Visual Studio 2015 + Qt5.12.10VsQt环境配置安装插件 Qt Visual Studio Tools插件配置Qt创建项目Vs创建Qt项目VsQt工程转换Vs工程转Qt工程Qt工程转…...
开源知识库平台Raneto--使用Docker部署Raneto
文章目录 一、Raneto介绍1.1 Raneto简介1.2 知识库介绍 二、阿里云环境2.1 环境规划2.2 部署介绍 三、环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Raneto镜像五、部署Raneto知识库平台5.1 创建挂载目录5.2 编辑config.js文件5.3 编…...
鸿蒙原OS开发实例:【ArkTS类库单次I/O任务开发】
Promise和async/await提供异步并发能力,适用于单次I/O任务的场景开发,本文以使用异步进行单次文件写入为例来提供指导。 实现单次I/O任务逻辑。 import fs from ohos.file.fs; import common from ohos.app.ability.common;async function write(data:…...
C语言:二叉树的构建
目录 一、二叉树的存储 1.1 顺序存储 1.2 链式存储 二、二叉树的顺序结构及实现 2.1堆的概念及结构 2.2堆的构建 2.3堆的插入 2.4堆顶的删除 2.5堆的完整代码 三、二叉树的链式结构及实现 3.1链式二叉树的构建 3.2链式二叉树的遍历 3.2.1前序遍历 …...
软件测试工程师面试汇总功能测试篇
Q:一、进行测试用例设计的时候用到的方法有哪些? A:最常使用的测试用例设计方法包括等价类划分法、边界值分析方法、场景法、错误推测法。其中,最容易 发现错误的是边界值法,使用最多的是场景法。以注册为例:首先从需求确定用户名…...
javaAPI1
API application pragramming interface 应用程序编程接口 除java.lang包以外,其他包中的类在使用时需要导入 建包 package com.abc.javabean; 导包格式,import 包名.类名 API使用技巧 1,先看关键字 2,看参数列表 3,看返回值类型 String 封装字符串和处理字符串的类…...
案例研究|DataEase实现物业数据可视化管理与决策支持
河北隆泰物业服务有限责任公司(以下简称为“隆泰物业”)创建于2002年,总部设在河北省高碑店市,具有国家一级物业管理企业资质,通过了质量体系、环境管理体系、职业健康安全管理体系等认证。自2016年至今,隆…...
Android Studio Iguana | 2023.2.1 补丁 1
Android Studio Iguana | 2023.2.1 Canary 3 已修复的问题Android Gradle 插件 问题 295205663 将 AGP 从 8.0.2 更新到 8.1.0 后,任务“:app:mergeReleaseClasses”执行失败 问题 298008231 [Gradle 8.4][升级] 由于使用 kotlin gradle 插件中已废弃的功能&#…...
iOS17 隐私协议适配详解
1. 背景 网上搜了很多文章,总算有点头绪了。其实隐私清单最后做出来就是一个plist文件。找了几个常用三方已经配好的看了看,比着做就好了。 WWDC23 中关于隐私部分的更新(WWDC23 隐私更新官网),其中提到了第三方 SDK 的…...
LeetCode 每日一题 Day 116-122
2580. 统计将重叠区间合并成组的方案数 给你一个二维整数数组 ranges ,其中 ranges[i] [starti, endi] 表示 starti 到 endi 之间(包括二者)的所有整数都包含在第 i 个区间中。 你需要将 ranges 分成 两个 组(可以为空…...
linux离线安装jenkins及使用教程
本教程采用jenkins.war的方式离线安装部署,在线下载的方式会遇到诸多问题,不宜采用 基本环境: 1.jdk环境,Jenkins是java语言开发的,因需要jdk环境。 2.git/svn客户端,因一般代码是放在git/svn服务器上的&a…...
NXP-S32DS软件安装
文章目录 一、安装包获取二、S32DS安装三、芯片插件安装 一、安装包获取 登录NXP官网,进入软件目录https://www.nxp.com/ 下载S32DS软件和RTD驱动库,并安装S32DS软件。 单击“S32DS.3.5_b220726_win32.x86_64.exe”下载该软件 点击“License Keys”&…...
26版SPSS操作教程(初级第十五章)
前言 #由于导师最近布置了学习SPSS这款软件的任务,因此想来平台和大家一起交流下学习经验,这期推送内容接上一次第十四章的学习笔记,希望能得到一些指正和帮助~ 粉丝及官方意见说明 #针对官方爸爸的意见说的推送缺乏操作过程的数据案例文件…...
docker部署实用的运维开发手册
下载镜像 docker pull registry.cn-beijing.aliyuncs.com/wuxingge123/reference:latestdocker-compose部署 vim docker-compose.yml version: 3 services:reference:container_name: referenceimage: registry.cn-beijing.aliyuncs.com/wuxingge123/reference:latestports:…...
Oracle VM(虚拟机)性能监控工具
Oracle VM是一个独立的虚拟化环境,由 Oracle 提供支持和设计,旨在为运行虚拟机提供轻量级、安全的基于服务器的平台。Oracle VM 能够在受支持的虚拟化环境中部署操作系统和应用软件,Oracle VM 将用户和管理员与底层虚拟化技术隔离开来&#x…...
1.8 python 模块 time、random、string、hashlib、os、re、json
ython之模块 一、模块的介绍 (1)python模块,是一个python文件,以一个.py文件,包含了python对象定义和pyhton语句 (2)python对象定义和python语句 (3)模块让你能够有逻辑地…...
dz论坛做视频网站教程/目前搜索引擎排名
亲爱的忍忍:为了给忍忍们带来更好的游戏体验,《忍者必须死3》预计于2021年3月25日2:00-10:00进行停服维护(根据具体情况提前或推迟开放)。请各位忍忍相互转告,并合理安排游戏时间,以免造成损失。【维护时间】2021年3月25日2:00-10:00【更新内…...
网站建设服务属于信息技术服务吗/关键词在线播放免费
在数据仓库中的转换和装载过程中,经常会使用MERGE语句,这里简单总结一下。 MERGE 语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹…...
广州做外贸网站/网络推广网站推广方法
题意: 每次只能取两端,然后第 i 次取要val[ i ]*i,求一个最大值 一切都是错觉【读者省略此段】 这道题目一开始想的就是记忆化搜索,然后太天真了?好像是,一开始用一维dp[ i ]直接代表一个点的最大。。。…...
乡镇政府可以做网站认/刷排名seo
一、条件断点循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值。参考上图,在断点的位置,右击断点旁边的小红点,会出来一个界面,在Condition这里填入断点条件即可&…...
网站基础功能介绍/做网站哪个公司最好
针对蒙蔽软件遮挡剔除的扩展,本文提供了一种灵活的解决方案,可以在不影响原始蒙蔽遮挡算法性能的情况下,为无法充分预分类的场景提高深度缓冲区的最终精度。该方法中的合并时间与分辨率呈线性关系,并且与场景中的几何复杂度无关。…...
免费建站网站一级大录像不卡/百度一下百度主页官网
背景當我再搭建WSUS的時候,搭建Vcenter的時候,等等,如果提示你80端口被佔用,或者報端口佔用的error的時候。如何去查找哪個程序佔用了這個端口呢?命令:netstat -ano : 查看所有連接的PID 及端口號 1、netst…...