1
Kylinsun 2023-12-08 11:35:45 +08:00 3
|
2
shermie 2023-12-08 11:37:05 +08:00 3
为什么你们写 php 的动不动就把 go 带上,go 并不是你性能的解决方案啊,它只是一门语言而已。php 很多业务场景 go 开发起来是无法胜任的,每个语言有适合自己的场景,以我的经验:
1.写 windows 程序,调用 win32 ,我选 c++ 2.写网络服务或代理,我选 go 3.写小脚本,训练模型,我选 python 4.写网站,写接口,我选 php 6.写桌面程序,调用 COM ,我选 c# 其他的什么 lua 、js 就不提了,先把 php 写明白吧 |
3
kidlj 2023-12-08 11:37:33 +08:00 3
|
4
lifei6671 2023-12-08 11:40:53 +08:00 3
给你举个例子吧,我们公司有 TOB 和 TOC 两类业务,TOB 的是 PHP 开发,目前日活 3000 个用户,QPS 也就几百个,但是后端部署了 200+的 8C+16G 容器,还经常连接超时。而 TOC 的业务访问量日均十几亿,每天几万活跃用户,是 Go 开发,QPS 几千,后端只部署了 4C+8G 的容器 70 台。😂
|
5
brader 2023-12-08 11:44:51 +08:00
@lifei6671 那我只能说你们的 PHP 架构师不行,我在上家,PHP 项目 QPS 也是几百,K8S 节点只部署了 4 台 4C8G ,上面的节点还附带跑了一些 IM 、文档、定时任务服务器。
|
6
agdhole 2023-12-08 11:45:53 +08:00 2
asp 做 web 全方位胜出
|
9
v2li32 OP @shermie 因为到处都是 php 不行了,转 go/其他语言,只是举例 go(我的,标题应该是 php 转其他语言), 从社区大概看下搞 php 的水平。 没有引战或者其他什么的. 我在 append 下的。
|
10
insert000 2023-12-08 12:10:38 +08:00
目前还在开发 PHP ,但是公司已经开始往 Java 架构过度了 ,我们目前不是 PHP 不行,公司 80%挣钱的业务和大流量都是 PHP 开发的,峰值 tps 在 1 万+ ,30 多台机器 8c16g 。往 Java 过度,更多是因为面对金融行业和 toB ,甲方要求私有化或者对接必须统一语言体系。不转变业务萎缩会越来越厉害,更多是处于国内业务的妥协转型 Java 。
|
11
GooMS 2023-12-08 12:14:48 +08:00
因为性能而转 go 的场景目前还不存在,楼上那个 3000 用户就 200+节点的建议开除,污染环境。
|
12
lyxxxh2 2023-12-08 12:15:24 +08:00
@lifei6671
...不小心 ctrl+回车了 打微信回车符习惯了 我司也有 tob 和 toc 的, 都是 php tob 几十 qps, toc 几百几千 qps 。 *** tob 之所以这么低,是因为我一堆 n+1 sql,问题在 mysql,就是我代码。 至于优化,不敢。 修复数据比修复 bug 麻烦多了。 *** collection(10 万条数据)->where('status','3') 3s array_filter(fn($item) => $item['status'] === 3,10 万条数据) 100ms 对于小数据,collection 很方便。 对于数据大,只能转原生,毕竟可是 10 万个闭包。 而像 go, 想用 collection 这种? 自己 for 去吧,所以性能不需要担心。 至于双方语言的"痛点“分析,讲起了太麻烦了。 |
13
charlestang 2023-12-08 12:17:02 +08:00 5
我觉得 abcdef 都能做到,其实已经进入比较高的层次,语言对你来说,只是一个表现工具,很多时候只是个人喜好问题了。你根本就是用任何语言都能解决任何问题的。在没有特定约束的情况下,你肯定关注自己的喜好就行了。
当你是一个这么高级工程师的时候,你在团队里不可能只是做一个小兵,十有八九要带团队,带项目。而这时候,你不得不考虑各种因素,想方设法促进你项目的成功。比如说,团队,比如说环境等等,都是要考量的。 PHP 有高级用法,swoole 之类的,甚至可以自己用 c 写个扩展。但是你能得到一个什么样的 PHP 团队,是你需要考虑的,比如,你能得到一个人人都是 abcdef 的 PHP 团队么? 有的时候我们说 PHP 不行了,就是说,PHP 界人才凋零。因为,abcdef 的 PHP 在市场上不可得,多数都是 crud 水平的 PHP ,这时候,你需要的项目里正好有一些 Go 很适合的场景。一个 a 级 go 程序员能解决的问题,可能需要一个 abc 的 PHP ,这时候,你作为 Leader ,不得以,是需要考虑转 Go 的。简历数量和简历质量可能就是你的约束。 |
14
asasjajsajsd 2023-12-08 12:51:22 +08:00
个人觉得聊语言对立没啥用;
各有各的优缺点,自己习惯用的顺手就行;公司就听公司的话(毕竟是给钱的爸爸) 其次就是你成不成功其实大部分人是不关心你用的什么语言的; 先站稳市场能盈利再说吧,再烂的代码,能跑就行 而且说实话淘宝、jd 那种体量的代码也不会只用一种语言的; 属于庸人自扰的话题 自己好用就行,自己的小功能的话咔咔写完功能就行;公司就听公司的话 |
15
BBCCBB 2023-12-08 13:04:05 +08:00
ORM 框架一对多, 多对多. java 也有
|
16
lesismal 2023-12-08 13:32:57 +08:00
@lifei6671 #4
> 是 Go 开发,QPS 几千,后端只部署了 4C+8G 的容器 70 台。😂 我怎么感觉你这是在黑 go 。。。QPS 才几千就 70 台 4C+8G 。。。 这么多 4C+8G ,如果瓶颈,猜测是你们数据库、缓存等基础设施瓶颈,日志量大 io 慢,或者其他这些语言无关的架构、系统瓶颈。否则我怀疑应该是你们 golang 代码写得太渣了。。。 对比下 golang 本身的能力: https://www.v2ex.com/t/945827 |
17
picone 2023-12-08 13:43:12 +08:00
我个人干过两家公司,很不幸都是帮忙做重构。一个是做 PHP 重构到 Go ,一个是 NodeJS 重构到 Go 。
首先说性能,PHP 性能是不行,第一家公司做的,亿级请求量,重构完后大概数百个 Pod 减少到 50 左右,节约了一半。但是你说他性能不行吧,其实也可以了,PHP 单实例( 1C )扛起 100+ QPS 。至于 Node 吧那是真拉胯,就暂且不提了。 总的来说,性能不会是你选语言的第一要义,他只能作为第二、第三条的优点。但是 PHP 没有强类型,array 乱传真的很让人烦恼。重构的时候经常踩这种坑,就是因为类型不明。业务量大了,团队大了,又或者业务历史久了(多个人接手过),这种业务都建议用强类型语言,不然真的很难维护下去。 |
18
lesismal 2023-12-08 13:54:21 +08:00 5
建议 OP 多想想吧,那么多大厂跟进 golang ,人家的 CTO 、技术管理层,哪个不是背景闪耀、身经百战,哪个不是血雨腥风海量业务里杀出来的?你以为这些技术领头羊们都是弱智都是吃素的嘛。。。
另一个侧面,阿里当年从 LAMP 转型,放弃 PHP 到 Java 的时候跟 golang 也没关系,如果 PHP 给力还需要还 Java 吗? 别说什么 PHP 现在性能也提升了,语言指令性能的提升并不是性能的全部,只是一部分,甚至只是一小部分。 能写同步代码的编程语言,HTTP 服务的性能瓶颈多数时候都是慢 IO 占用系统线程。 能写异步代码的编程语言,又要面对 callback hell ,比如传统的 c/c++,脚本里 nodejs 。 简单 CURD 你不需要 RPC 、不需要各种基础设施的慢 IO 操作、你的 API 通常也不是海量并发,这时候一切看上去都还很美好,因为你搞定了业务、性能指标也并不比其他语言差,开发效率贼高,心里贼爽。 但是,如果接口里需要这些同步代码进行慢 IO 操作、并且会导致直接阻塞了线程,又遇到海量业务场景高并发的时候,系统线程数量瓶颈、并发度有限、会导致几何级的响应性能降级、请求积压,这时候如果跟那些异步非阻塞语言相比( golang 这种同步代码但底层 runtime 实际上是异步非阻塞、不需要因为系统线程数量为 N 就只能并发处理 N 个请求,本质上也是异步非阻塞,但让用户可以写同步代码),差距就下来了。 所以别被那些语言指令性能的 benchmark 灌醉。 语言慢 IO 占用系统线程不只是 PHP ,Java 非 Netty ,或者 Java Netty+同步方式操作慢 IO 基础设施之类的,或者其他语言类似的方式,也同样有这些瓶颈。 |
19
lesismal 2023-12-08 14:06:23 +08:00 3
最近好几次看到有人说脚本语言 ORM 牛逼,强类型语言 ORM 垃圾。
保持清醒一点好吗?弱类型 ORM 当然轻松了,但是你失去的是编译期检查,失去的是强类型系统规范安全保障等一系列优势。 ORM 只是让你获得了舒适区,就像刷抖音,很舒服,你获得了一些东西:比如你不太需要去思考 sql 语句如何写出来。但是你同时也大大减少了对不同数据集合处理的思考。如果是大表大数据集合,往往都是性能相关、对业务性命攸关的。当你习惯了只要 ORM 能实现业务逻辑的时候,扪心自问、有能力配得上去做海量业务海量数据的业务吗?随便一个 API 里的 ORM 生成的 sql 就可能把数据库卡住导致大量业务请求失败! 按照金字塔模型,这种层次的 CURDer 是开发者的主力群体,任何一个人保持在这个水平层次上都没问题,因为并不是每个人都需要去对高并发高性能这件事情负责,多数商业场景,随便写写都可以搞定。但是,如果是自己安于停留在这个层次,就不要出来拿性能说事、标榜我 PHP 或者我 Java 或者我什么语言很强了。或者如果自己想提升自己的技术境界技术能力,就不要把着眼前这点脚本语言的简单性能测试或者什么来对比了,参考我上一条回复,咱也不吹谷歌 golang 团队那两外老爷子和其他年轻一代的众神、因为其他语言的作者团队们也都是众神,但各个大厂的技术管理层跟进什么放弃什么是很有参考价值的、因为他们直面的就是工程领域商业战场,他们可不是傻子。 PS:我自己写 golang ,我也仍然经常说 golang 性能怎么也无法赶上 c/cpp/rust ,因为我也写 c/cpp ,我淘空了心思优化 golang 也仍然赶不上 c/cpp |
20
askfilm 2023-12-08 14:23:54 +08:00
国内真有那么多 "海量业务海量数据" 的公司吗 !? 大家的公司都这么厉害吗 ?
那样的公司怎么会局限一种编程方式呢? |
21
jowan 2023-12-08 14:33:47 +08:00
CRUD NO CURD
SpringCloud 全家桶 开发效率真比不上 PHP 吗 2023 年了 还秒的尾灯都看不到 离谱 |
22
abcdexx 2023-12-08 14:42:01 +08:00
orm ,一对多,多对多关联,起码是把 java 开发效率秒的车尾灯都看不到
------------------------------------------------------------------------------------------------- go 里面用 gorm 做这些也很方便啊 |
23
6jiayoung 2023-12-08 14:44:09 +08:00
go 工资比 php 高
|
24
jowan 2023-12-08 14:50:28 +08:00 1
PHP 门槛低入门快 是得益于他没有严格的数据类型约束
无需静态编译 大部分情况不需要维护内存开销 开发者没有额外的心理负担 变量未释放就未释放 有溢出风险也无伤大雅 一个 FPM 生命周期结束自然就没了 业务迭代效率高 代码写起来 无需过度考虑 虽然有不少人使用 Phalcon 、Swoole 这些 C 扩展的常驻内存框架 但不可否认绝大部分 PHP 程序员 还在用 FPM 这套 而 PHP 的优点也是他的弱点 起码在高并发的 FPM 模式下 其他静态语言无需像它一样频繁地 fork 进程开销 如果在相同水平的程序员用其他语言写出来的是屎山 那么他用 PHP 写出来的必定是粪山 为什么 因为你在做 codereview 时 前面$data 是 array 在后面可能突然变成了 string 最后还可能是 int 代码逻辑实现的不好 用什么语言都一样 在 PHP 里面会更明显一点 讨论语言本身意义不大 |
25
lifei6671 2023-12-08 14:51:48 +08:00
@lesismal #16 70 台是运维要求部署的最低配置。实际上这些 pod 的负载很低。而对应的 PHP 复杂就很高了,CPU 都快 80%了。
|
29
z1829909 2023-12-08 14:59:49 +08:00 1
再说项目开发,项目大了,什么动态静态语言开发出来的都是屎山。
这句话很不认同 php 的项目, 代码管理上稍微松懈一点, 从开始就屎了, 下限贼低. 如果想让项目慢点腐化, 对人员素质和维护的成本都有很大要求. go 最起码整体风格一致, 你的代码能跑起来, 就没有太多低级错误. 而且转 go 真没几个是因为性能转, 大多是为了工作, 或者公司技术选型要求, 或者自己爱好. 你还整了个 abcd 评级, 别人愿意写哪个就写哪个, 为什么要去套你这套规则呢, 这个规则还是适合你自娱自乐用来约束自己玩吧. |
30
flyqie 2023-12-08 15:00:03 +08:00 via Android
`什么动态静态语言开发出来的都是屎山`
楼主你开心就好,一个 array 走天下靠文档来维护,已经非常痛苦过了。 现在 php 和 golang 都在用,确实得承认 php 在 web 上不错(swoole 、workerman 也用到过),我 cli 小工具也一直用 php 写,但 php 维护麻烦是客观存在的,不止 php 是这个问题,其他弱类型也是这个问题,php 推的强类型现在用起来还很麻烦,个人觉得算是树大难掉头。 |
32
z1829909 2023-12-08 15:09:03 +08:00
我还是建议你不要这样企图去给别人下定义或者控制他人. 现实和你预期的不一样, 你会很痛苦.
|
33
coderzhangsan 2023-12-08 15:10:45 +08:00 1
我的看法如下
1 为什么用 go:卷,面向工资编程 go 语言创造之初,是想替代 c++,更应该去做系统层面服务,而国内用这个语言搞应用开发,尤其是 web 应用开发,有 java/php 生态完善的工具语言不用,非要打着性能大旗,重新造轮子,如果不为了这点工资,毫无意义,至于说什么节省了多少台机器,这些机器加起来才多少钱,开发人员成本才是大头吧,一个 go 程序员至少比 php 高出 3k 起,还租不起几台机器?高可用高性能的系统从来都是优秀的架构设计,语言只是锦上添花;以此推论,下一个应用语言风口是 rust 。 2 phper 转 go 缺点 绝大多数 phper ,主要工作都是在 web 应用项目,写接口或页面,高级网络编程及其原理,没几个熟练的,大概率转过去也还是写接口,从一门语言转向另一门语言,必然会将自己"母语"的开发思想和习惯带过去,写出的代码大多数不符合当前语言设计的。 3 基础和逻辑思维很重要 op 列出了 a-f 评分,php 这门语言,上手学习快,正因为如此,很多人不太重视基础知识的学习,对很多内置的库和函数研究不透彻,所以业务上偶尔出 bug ,不了解具体原因,就会用其他方式解决,譬如引进另一个工具;逻辑思维对任何一门语言都重要,不再乎你看了多少源码,如何结合业务实际高质量的代码,理解业务并做出契合业务的设计,这点很重要。 |
35
dobelee 2023-12-08 15:22:27 +08:00
别写这种无聊的引战帖子了,打份工而已非要分个高下。
php oop 工程化基本都是走 Java 代码风格路线,跟 go 还真没法比。 至于韩天峰搞的那些花活,说实话折腾起来挺累的,我建议直接用 go 。 |
36
rm0gang0rf 2023-12-08 15:27:13 +08:00
在下一直 php, 没赶上过复杂业务或者大项目, 没遇到过高并发, 一天也就是 20-30g 的流量,别的参数也没算过...
|
37
28Sv0ngQfIE7Yloe 2023-12-08 15:33:49 +08:00
>>> orm ,一对多,多对多关联,起码是把 java 开发效率秒的车尾灯都看不到。
------ 没写过 PHP ,是真的吗? |
38
jianchang512 2023-12-08 15:34:22 +08:00
其实就是同样一堆烂代码的情况下,go 能跑的更好
|
39
rm0gang0rf 2023-12-08 15:36:04 +08:00
@Morii 是真的
|
40
whahuzhihao 2023-12-08 15:38:51 +08:00
转语言主要还是就业市场的因素。但是根源上来看还是语言特性影响了 PHP 的使用范围,进而缩减了他的市场。
参考 https://pphc.lvwenhan.com/part-two/bottleneck-of-programming-language/section-3 PHP 的语言特性是单线程阻塞的,即使用 php-fpm 模式也改变不了这一特性。如果用 swoole 、workerman 这类常驻内存的框架,为啥不一步到位换成 go 呢。 go 的语法虽然恶心,但是入门门槛也低。相比与转 java ,转 go 应该是 phper 最后的倔强吧 |
41
monkeyWie 2023-12-08 15:43:07 +08:00
同样是脚本语言,写 php 还不如写 node.js
|
42
xiaocaiji111 2023-12-08 15:43:15 +08:00
php 开发人员整体水平较低,当然不是说楼主,是以前面试得人员大部分这样,换门语言也够呛。大部分都是 yii 框架和 thinkphp 框架开发使用人员,从没接触过高并发项目。
|
43
xuanbg 2023-12-08 15:43:29 +08:00
对于不懂技术的人来说,PHP 确实性能不太行。一个接口要好几秒才能返回数据,知道的人晓得是写 PHP 的人不行,不知道的就只会说 PHP 不行。
|
44
yekern 2023-12-08 15:48:37 +08:00
看到你写的在 F, PHP 和 GO 都有在写.主要还是看主体业务有些场景比如后台没有什么请求,业务还不是很复杂 Laravel+Vue 写的飞起.
在比如我司有业务需要处理几百兆的 PDF 账单文件要对账单文件进行分析提取数据入库并且分割 PDF 文件,这时候 PHP 的性能就有点捉急了. GO 很好的处理了这个任务.在有就是写一些简单的爬虫但是需要伪造浏览器指纹 PHP 也麻烦 Go 一个包就解决了. 没有什么哪个好和不好的只有适合不适合. |
45
jonsmith 2023-12-08 15:49:37 +08:00
语言是次要的,关键是生态,比如技术生态、人才市场的生态等。
|
46
Nc 2023-12-08 15:50:28 +08:00
不知道我这算不算转了, 原来搞 PHP 后来去搞 Python 爬虫和自动化那一块的业务, 后来公司 Go 项目组 缺人,又帮忙搞 Golang 的项目, 现在 接手 CRM 系统 又回到了 PHP5.6, Tp3.2 的时代. PHP 想换成 8.2 但是吧 里面的东西有点多. 不敢大的挖开,怕散架
|
48
JKeita 2023-12-08 16:50:50 +08:00
哪个合适用哪个,现在主要是 PHP 岗位少钱也少
|
49
lidongyooo 2023-12-08 16:55:51 +08:00
@lifei6671 给你 QPS 算一千吧。1000/200=5 ,一台 8c+16g 的服务器就给 5 个人用就爆了?老子 2c+4g 每个接口都 N+1 ,性能都比你好。操了真想不明白。所以要么你在吹牛皮,要么内部有人恶意增加公司运营成本。
|
50
joyanhui 2023-12-08 16:57:57 +08:00
OP 认为都是 epoll 没差别,php 性能够用,甚至觉得 php 开发效率最高.....
他能写 java python, 但是又说出 `起码是把 java 开发效率秒的车尾灯都看不到` 这句话。 所以楼上的各位,我觉得,楼主不一定能理解你们在说什么。 |
51
lesismal 2023-12-08 17:14:23 +08:00
@shermie #47
我搜了下,PHP 也有协程,所以我猜你是指 PHP 协程? 如果是这样,那我补充一点,除了 erlang 、golang ,多年前 lua 或者 c/cpp 也早就有协程或者库,但都是手动挡,比如 lua 的 yield resume ,我刚才搜的帖子里 PHP 的方式也是需要手动 yield 。 近几年 js py 之类的也搞了 async await 这些。确实,整体看上去是同步代码、顺序可读了。但是,这种手动挡理解起来并不直观,对于步骤层次不多的,个人觉得手动挡协程甚至不如 callback 。 nodejs 还有 Promise 这种,看上去是那个顺序,但并发的时序可能不是那个顺序,很多人因为这个写 bug 、或者理解吃力、或者要自己控制时序时非常麻烦。 很多人可能没有深度使用 erlang 、golang 协程,或者已经习惯了那些手动挡的蹩脚协程,所以 get 不到 erlang 、golang 这种像线程一样的并发有多爽。 Java 的虚拟线程还是啥也是类似协程,但似乎只是解决了语言指令级的调度,系统调用等行为并不会主动出让并可能因为阻塞占用了线程,我没有深入研究、不知道是否理解有误,但好像 Java 至少仍然需要解决大量的底层接口与虚拟线程调度结合的问题,这仍然需要很大的改造。 再补充一些,现实业务不只是 CURD ,PHP 的编程姿势主要是为 Web 服务,一旦有复杂的需求,用 PHP 实现起来会很蹩脚、或者浪费资源,比如游戏 #2 > php 很多业务场景 go 开发起来是无法胜任的 所以我觉得,你这个可能把现象搞错了。现象是 PHP 有众多轮子,并且未必需要高性能或者什么,用 go 去重新做成本收益不划算。就像好些人说企业级只能 Java 一样,其实不是 golang 或者其他不能搞,而是因为 Java 已经形成了成熟的产业链和社区,并且企业级的业务 Java 性能各方面也足够胜任。用 golang 或者其他语言去重造需要很长时间,而现实商业场景,没哪家资本愿意去推动这个。但如果是新团队重新造这些,是可以用 golang 的。字节系大量业务用 golang ,飞书应该也用得挺多的,人家有钱有资源有人才,就是可以搞。 除了极度性能场景是 c/cpp/rust 的天下,或者特殊专用领域,绝大部分的通用领域、绝大部分高并发高性能场景,golang 能搞、PHP 却未必能胜任。 |
52
skwyl 2023-12-08 17:16:42 +08:00
只有适合不适合,php 曾经只有进程运行程序太伤了,但是现在的 8.x 总体上是好很多,支持更细粒度的协程,golang 本身是编译型语言,解释型跟编译型两种性能上差异肯定是明显的,这没啥好说的,我小项目喜欢用 php 方便快捷,处理一些性能要求高的就用 go 拆分服务
|
53
tutusolo 2023-12-08 17:25:39 +08:00
@jowan 放在外包公司的话,一个熟练的 php 顶 3 个熟练的 java 吧,秒的车尾灯都看不到只是委婉的说法,大概就相当于 php 都到终点了,java 才刚起步
|
54
chenchengbin 2023-12-08 17:32:17 +08:00
编译型语言跑不过脚本语言那这个语言可以去死了
|
55
baiyi 2023-12-08 17:35:12 +08:00
主要是生态,我要搞云原生,用 php 总是没那么顺畅的
|
57
ElmerZhang 2023-12-08 17:57:33 +08:00 5
16 年 PHP 转 Java ,被当时的公司逼着转的。后来就是搞 Java 和 Node.js ,20 年逼着现公司从 Node.js 转了 golang 。
离开 PHP 时水平勉强 f 吧。 真正需要转语言来提升性能的,一般不会抱怨 PHP 性能不好,他们会说,我们遇到某某某问题,用 PHP 解决不了了,我们换 Java/Golang 吧。 整天报怨 PHP 性能不好的人,绝大多数用 go 也写不出高性能的 API ,因为他们根本不知道到底性能差在哪里。 99% 的性能问题都和语言无关。 如果你觉得我说的不对,那说明你是那牛逼的绝少数,大神请受我一拜。 |
58
glitterzhong 2023-12-08 18:05:14 +08:00
语言只有合适不合适
|
59
fengfisher3 2023-12-08 18:07:01 +08:00
@lifei6671 你们运维真会赚钱。然后,你们这种垃圾架构,语言真不背锅。
|
60
cexll 2023-12-08 18:15:20 +08:00
2023 年以前,我是 phper 觉得 php 就是最牛逼的,虽然也在偷偷学 go ,但是更多是喜欢 go 的语法简单,不像 php 有 swoole swow workerman fiber 各种库 各种语法,php 也能高性能 swoole 安装上性能直接吊打一种静态语言,但是用到极致你会发现它就是不如原生就有的好用,2023 年以后 我学了 ruby rust react ts python 发现确实如最开始入门时 一些大佬说的,什么语言干什么事情,你先学一个入门,需要什么学什么,又不是脑子不够用,学啥不是学
|
61
kuxuan 2023-12-08 21:34:50 +08:00 via Android
我用 node 开发的,用户量小
|
62
kuxuan 2023-12-08 21:38:22 +08:00 via Android
不过对公司来说,多增加点服务器,带宽是不是很划算?
|
63
happy32199 2023-12-08 21:47:26 +08:00 via iPhone
php 官方协程库 revolt.run ,正式版已经很久了 amphp 在用,各种协程库也齐全了。
webman 性能也挺高,而且很容易就可以把老代码移植过去,没心理负担。都不比 go 差了。 可惜出来得晚了,当年内斗,也出走很多人。 |
64
james122333 2023-12-08 21:59:01 +08:00 via Android
学 php 就是看官方文档即可 非常好用
可以直接开 socket 并且多进程 也就是 workerman 在做的事 内建函数都很好 方便自己刻轮子 真要说缺陷就是也不迷你 与 java 一样代码可见 但这问题在 php 就不是那么严重了 毕竞方法很多 老实讲用 java 如果不懂这些一样慢 至于 go 内建的函数不是非常好 但一样是刻轮子用 |
65
rekulas 2023-12-08 22:04:40 +08:00
我是 php/java 转 go 用着感觉很爽
php 能实现的 go 都能实现,php 不能实现的很多 go 也能实现 最基础的一点,go 直接解决了 php 的性能和常驻问题两个大问题,我个人非常在乎性能问题,当同样的接口转 go 后相应从几十毫秒下降到 1-3 毫秒,成就感无法替代,虽然也用过 phalcon swoole 等框架,但是说实话非常蹩脚,而且生态太脆弱了,实在难以继续 还有个问题就是写 php 多了会越发觉得 php 底层的随心所欲, 历史坑太多 我个人觉得 cli 运行的 php 才是真正的 php,如果 php 从诞生开始就专注于丰富 cli 生态(例如 webman 这样的框架早点出来受到认可大家都陆续丰富其生态), 说不定现在局面会好很多, 不过现在想这些也晚了 |
66
maigebaoer 2023-12-08 23:03:54 +08:00 via Android
php ?有手就能写的东西,我不写了😡😡😡哈哈哈,这么说可以不🤣
|
67
a132811 2023-12-08 23:34:20 +08:00
开发效率只是一方面,有时需要关注以下问题:
- 维护成本、重构效率,如何最大程度避免重构火葬场 - 对底层内存的控制能力 - 内存常驻时的泄漏风除 - 类型隐式转换的风险 - 底层 extension 开发的容易性 - 底层库源码易读性、扩展性、调试性 - benchmark/profile 分析的易用性、成熟度 - 单测、功能测试的容易度 以上是 php 做得不如 golang 的地方,应该不完整。如果不需要考虑这些问题,php 当然也可以用得很爽。 BTW, php 相对 go 还有一个劣势: 如果想成为 php 专家,需要看一下 c 维护调试下 c 扩展,付出的时间、走的弯路要比 golang 多,毕竟 golang 的源码精简、历史包袱屎山很少 |
69
kneo 2023-12-09 02:16:58 +08:00 via Android
建议标题改成“讨论下 PHP 程序员的水平”。a
|
70
simo 2023-12-09 09:01:54 +08:00
二楼正解,根据需要选语言,搞钱为目的。
多学几门语言,至少熟悉之后,就明白语言就是工具之一,能让你在不同业务场景下做出自己能力范围内的最优解。php 转 go ,go 转 php 又如何,水平高低?啥用?自己几斤几两清楚明白就行了,别人说 php 不行,就不行了?说行,就行? 大周末的,要继续搞不赚钱的破项目去了,你们水吧 |
71
As1rkiv 2023-12-09 09:36:49 +08:00 3
先不谈数据,go 强类型确实极大的降低心智负担。
本人 34 线小城市接外包,之前 js+node 一把梭,开发的时候是爽,写得快。 不管前端传了什么东西,后端直接解构拿需要的字段,但是一旦代码量上了 3 万+,维护起来是真的要命。每个接口传了什么玩意儿都要测一遍再改。 别说 node 上 ts ,我都 ts 了为啥不换个强类型的语言呢? 况且 node 要想利用多核,还得 cluster 。cluster 数据一致性又要上 redis 、mq 之类的玩意儿。框架上 nest 感觉比 spring 还恶心。 rust 写后端性能是高,但是开发效率不太行,编译的又慢,而且那性能 99%的项目都用不到,杀鸡用牛刀。 学 java 又搞不过那些写了好多年的老 java ,spring 又是一大坨要学;只能跟人屁股后面捡粑粑吃。 选了 go 还是舒服的,语言层面能充分利用多核 cpu ;协程一个 go 关键字就完事; channel 也是真简单;写完编译成二进制,不怕甲方拿到源码,而且部署方便;各种微服务分布式容器化都有一堆资料,方便学习;恶心的点无非就是语法简陋,而且到处 if err != nil ; 以单人外包的角度来看,前后端分离模式,又能写小程序又能写后台管理,掌握 vue+一门后端语言就能见到钱,搞 app 用 flutter ,还是一套后端; php 优势还是后端渲染写着爽,但是现在大多数需要 ssr 的场景也就是官网,其他 spa 完全能胜任;必须 ssr 的场景也完全可以用 nuxt 写 vue ,还是那一套东西,也不用多学啥; 论 golang 框架,单体 gin 完全够用,洋葱路由那一套思想也是相通的;微服务 go-zero 、kratos ;服务网格 istio ;况且 docker 、k8s 都是优秀项目,可以阅读源码学习思想;个人是觉得在计算机里,思想比语言什么的要重要得多; go 就是一门干活的语言,简单粗暴解决各种工作上的问题,语法上不用深入研究,专注业务专注工程结构,有更多时间去学习优秀项目的思想;研究语法什么的还是得 c/c++、rust 之类的学术型语言; 现在前端 ts+后端 go ,不用操什么咸蛋心;以前喜欢弱类型,现在写项目无比恶心弱类型;不过写爬虫之类的,弱类型还是香; 要是想把项目牢牢抓自己手里,后端容器化微服务,nodejs 网关 + go 业务 + rust 计算 + mq 队列,甲方就被你套牢了😂 |
72
newrefar 2023-12-09 10:31:15 +08:00
有没有可能因为你用 PHP ,所以你接触到的开发大部分都是网站+数据库
|
73
yc8332 2023-12-09 11:22:27 +08:00
其实和语言真没太大关系。更多的可能是领导想改。。以前淘宝、微博也都是 php 写的接口
|
74
soft101team 2023-12-10 00:39:37 +08:00
感觉又吵起来了
|
75
shermie 2023-12-11 09:14:30 +08:00
@lesismal php 的哪个 yield 我几乎不用 我说的是 swoole workerman 这类框架 我工作中几乎都是用的 swoole 所以更多的瓶颈都给到了存储这一层 同一种语言 不同的人写出来都不一样
|
77
shermie 2023-12-11 16:13:36 +08:00
@lifei6671 这个和大厂不大厂没有关系 不是说大厂用了 php 那这门语言就如何好 更何况大厂都不怎么用 php 跟 swoole 的吃相也没有关系 而在于你自己是不是有解决方案 会不会用,你学编程的初衷是为了未来给大厂打工吗 不能吧
|
78
lifei6671 2023-12-11 16:40:42 +08:00
@shermie #77 有很大关系,大厂的技术栈首先考虑的不是能不能解决问题,而是安全性和业界活跃度。如果你在大厂待过就知道 swoole 绝对不会是大厂技术栈的首选,哪怕他吹嘘的性能再好。除非是他合入了官方的 PHP 仓库。
|
79
lesismal 2023-12-11 23:22:12 +08:00
@shermie #75
还有一个问题,你说的这个 PHP 协程,不管需不需要 yield ,会不会在使用系统调用、其他慢 IO 时阻塞了,因为已有的很多系统调用、慢 IO ,比如网络 IO 、操作数据库,如果这些底层接口并没有自动出让线程,那跟我前面提到的 Java 虚拟线程可能会是类似的问题。当你处理这些的时候如果阻塞了、线程就在那等待了,不能充分利用 CPU 、不是协程那种真的并发。我只是猜测、我并不了解你说的这个 PHP 协程哈 |
80
coderzhangsan 2023-12-12 19:47:15 +08:00
@newrefar php 是怎么诞生的,不就是做 web 起家的吗,所以 php 开发肯定是 web 相关的呀,我觉得有些人搞不清楚各语言的用途和优缺点,总是想着一门语言解决所有问题,更何况 php 还是个动态脚本语言,你不能总拿它她的弱点说事,你得学会分析什么工具做什么事,架构就是这些工具组合设计。
|
81
guanhui07 2023-12-12 21:04:14 +08:00
@lesismal 他说的 php 是韩天峰造的 swoole 确实和 golang 没什么不同了 ,常驻内存,同时支持协程,同步的写法,异步的执行,异步非阻塞的 swoole4 确实和 golang 差不多,swoole 确实是好东西 ,但是 php 官方也不认 ,php 官方只认 php-fpm fastcgi 同步阻塞 。
|