讨论下 PHP 转 go 的水平

2023-12-08 11:05:54 +08:00
 v2li32
今天摸鱼又看到 php 性能不行的帖子,我是专业 phper,也能写 java,python,不爱写 go 是因为不喜欢 go 的语法。


不知道因为性能问题转 go 的人是否深入理解过 php.有没有了解到 php 的常驻模式下运行,了解到 select,epoll,然后在去得出结论 php 性能不行。

都是跑在 linux 下的编程语言,都在用 select,epoll,谁又能差谁很多,不晓得大多数 phper 有没有搞到这一步。

在回到开发效率上,php 真的是 web 语言开发效率第一。
orm ,一对多,多对多关联,起码是把 java 开发效率秒的车尾灯都看不到。


再说项目开发,项目大了,什么动态静态语言开发出来的都是屎山。

不是公司硬性规定,或者自己喜欢学一下 golang ,转 golang 是为了什么。。写 php 的应该都不会喜欢 golang 的写法。

以下 phper 转 go 先评价下自己的 php 评分。

会 curd 一个框架的评 a
...+多个框架基础的 redis 队列,自定义进程都能搞评 b
...+可以随意很快上手不了解的框架评 c,
...+可以随意点击框架/扩展包看个大概流程评 d,
...+了解 php 为什么跟 java 比性能不行,linux 下调试追踪,会多进程网络编程评 e,
...+能看懂部分 php 源码实现评 f.

所以你(phper)转 go 在 a,b,c,d,e,f 那个层次呢。
11540 次点击
所在节点    PHP
83 条回复
kuxuan
2023-12-08 21:34:50 +08:00
我用 node 开发的,用户量小
kuxuan
2023-12-08 21:38:22 +08:00
不过对公司来说,多增加点服务器,带宽是不是很划算?
happy32199
2023-12-08 21:47:26 +08:00
php 官方协程库 revolt.run ,正式版已经很久了 amphp 在用,各种协程库也齐全了。
webman 性能也挺高,而且很容易就可以把老代码移植过去,没心理负担。都不比 go 差了。
可惜出来得晚了,当年内斗,也出走很多人。
james122333
2023-12-08 21:59:01 +08:00
学 php 就是看官方文档即可 非常好用
可以直接开 socket 并且多进程 也就是 workerman 在做的事 内建函数都很好 方便自己刻轮子 真要说缺陷就是也不迷你 与 java 一样代码可见 但这问题在 php 就不是那么严重了 毕竞方法很多
老实讲用 java 如果不懂这些一样慢
至于 go 内建的函数不是非常好 但一样是刻轮子用
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 这样的框架早点出来受到认可大家都陆续丰富其生态), 说不定现在局面会好很多, 不过现在想这些也晚了
maigebaoer
2023-12-08 23:03:54 +08:00
php ?有手就能写的东西,我不写了😡😡😡哈哈哈,这么说可以不🤣
a132811
2023-12-08 23:34:20 +08:00
开发效率只是一方面,有时需要关注以下问题:

- 维护成本、重构效率,如何最大程度避免重构火葬场
- 对底层内存的控制能力
- 内存常驻时的泄漏风除
- 类型隐式转换的风险
- 底层 extension 开发的容易性
- 底层库源码易读性、扩展性、调试性
- benchmark/profile 分析的易用性、成熟度
- 单测、功能测试的容易度

以上是 php 做得不如 golang 的地方,应该不完整。如果不需要考虑这些问题,php 当然也可以用得很爽。

BTW, php 相对 go 还有一个劣势:
如果想成为 php 专家,需要看一下 c 维护调试下 c 扩展,付出的时间、走的弯路要比 golang 多,毕竟 golang 的源码精简、历史包袱屎山很少
fkdtz
2023-12-08 23:57:02 +08:00
@lifei6671 兄弟你这波数据,从用户量级到数据量级、再到服务端资源数量,怎么都感觉怪怪的,哪哪都不不上...
kneo
2023-12-09 02:16:58 +08:00
建议标题改成“讨论下 PHP 程序员的水平”。a
simo
2023-12-09 09:01:54 +08:00
二楼正解,根据需要选语言,搞钱为目的。
多学几门语言,至少熟悉之后,就明白语言就是工具之一,能让你在不同业务场景下做出自己能力范围内的最优解。php 转 go ,go 转 php 又如何,水平高低?啥用?自己几斤几两清楚明白就行了,别人说 php 不行,就不行了?说行,就行?
大周末的,要继续搞不赚钱的破项目去了,你们水吧
As1rkiv
2023-12-09 09:36:49 +08:00
先不谈数据,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 队列,甲方就被你套牢了😂
newrefar
2023-12-09 10:31:15 +08:00
有没有可能因为你用 PHP ,所以你接触到的开发大部分都是网站+数据库
yc8332
2023-12-09 11:22:27 +08:00
其实和语言真没太大关系。更多的可能是领导想改。。以前淘宝、微博也都是 php 写的接口
soft101team
2023-12-10 00:39:37 +08:00
感觉又吵起来了
shermie
2023-12-11 09:14:30 +08:00
@lesismal php 的哪个 yield 我几乎不用 我说的是 swoole workerman 这类框架 我工作中几乎都是用的 swoole 所以更多的瓶颈都给到了存储这一层 同一种语言 不同的人写出来都不一样
lifei6671
2023-12-11 09:49:05 +08:00
@shermie #75 你觉得大厂会用这种框架???尤其是 swoole 这种吃相难看的,哪个大厂会用?
shermie
2023-12-11 16:13:36 +08:00
@lifei6671 这个和大厂不大厂没有关系 不是说大厂用了 php 那这门语言就如何好 更何况大厂都不怎么用 php 跟 swoole 的吃相也没有关系 而在于你自己是不是有解决方案 会不会用,你学编程的初衷是为了未来给大厂打工吗 不能吧
lifei6671
2023-12-11 16:40:42 +08:00
@shermie #77 有很大关系,大厂的技术栈首先考虑的不是能不能解决问题,而是安全性和业界活跃度。如果你在大厂待过就知道 swoole 绝对不会是大厂技术栈的首选,哪怕他吹嘘的性能再好。除非是他合入了官方的 PHP 仓库。
lesismal
2023-12-11 23:22:12 +08:00
@shermie #75

还有一个问题,你说的这个 PHP 协程,不管需不需要 yield ,会不会在使用系统调用、其他慢 IO 时阻塞了,因为已有的很多系统调用、慢 IO ,比如网络 IO 、操作数据库,如果这些底层接口并没有自动出让线程,那跟我前面提到的 Java 虚拟线程可能会是类似的问题。当你处理这些的时候如果阻塞了、线程就在那等待了,不能充分利用 CPU 、不是协程那种真的并发。我只是猜测、我并不了解你说的这个 PHP 协程哈
coderzhangsan
2023-12-12 19:47:15 +08:00
@newrefar php 是怎么诞生的,不就是做 web 起家的吗,所以 php 开发肯定是 web 相关的呀,我觉得有些人搞不清楚各语言的用途和优缺点,总是想着一门语言解决所有问题,更何况 php 还是个动态脚本语言,你不能总拿它她的弱点说事,你得学会分析什么工具做什么事,架构就是这些工具组合设计。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/998612

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX