最近业余时间一直在开发 ExpressPHP 的第二个版本 MixPHP,今天下班想起之前一个面试官的问题:你为什么还要再造一个轮子呢?仔细回想,第一个版本,现在想来确实 “炫技” 的成份比较多,现在推翻第一版,又重构一个所谓的 “全功能 PHP 框架” ,这东西又不赚钱,我到底为了啥?其实,写程序和写诗有很多相似之处,同样需要优雅的语法,好作品也同样想要有更多的人欣赏,感性完了,接下来理性的分析一下。
国内较流行的 PHP 框架,参考 Lagou 等招聘网中的招聘信息与众多同事口口相传。
ThinkPHP: 易上手,文档友好、过度封装
Yii: 安全性高、规范、性能稍差
Codeigniter: 简单、高效、文档友好
Yaf/Phalcon: C 扩展,高性能
通常后端开发有以下这些场景:
因为不同场景的诉求不同,所以很多公司采用多种框架来开发,APP 的 API 采用 Yaf/Phalcon,后台管理采用 Yii、ThinkPHP、Codeigniter,TCP/UDP 服务器又采用 Java/C++来写,一个后端开发就需招聘擅长不同框架不同语言的程序员来开发。
在网页 /后台管理 /API 开发方面,流行的各种 PHP 框架一直都很擅长,可是在控制台程序开发方面:
Yaf/Phalcon 这样 C 扩展框架,如果开发业务十分复杂的后台与网页,开发效率不高,中小企业开发效率才是生存王道,而开发效率高的 ThinkPHP、Yii、Codeigniter 开发 API 性能又差了点,当然性能可以从架构上着手,但是如果高性能与开发效率可以兼得,岂不更好。
许愿:希望以后所有后端开发,如用 PHP,就用一个框架可好?
支持的用户请加个 Star 吧,让更多人发现 MixPHP。 https://github.com/mixstart/mixphp
1
onanying OP 为啥没人发表下评论?
|
2
WuwuGin 2017-10-11 18:28:18 +08:00 via Android
我觉得造轮子本来就是多元化的体现,而且能更好理解一些之前模棱两可的概念。要是每个人都去搞未实现的事物的话,为什么现在人类还没有统治银河系😌。所以说造轮子是为了积累沉淀技术,我觉得没毛病。
|
6
runningman 2017-10-11 20:35:50 +08:00
可以加个微信交流 27011861
|
7
runningman 2017-10-11 20:58:44 +08:00
写错了。微信 270115861.
|
8
wu1990 2017-10-11 21:10:29 +08:00
依赖 swoole,我想问数据库操作是异步的吗?不是用 swoole 的协程,也没有 yield,看着不像异步的,性能和原生 php 应该差不多
|
9
onanying OP @wu1990 没有使用异步,暂时也不打算引入异步,后续会加入,性能比原生 PHP 要好,但是比 Apache/PHP-FPM 传统框架,比如:Yii/TP/CI 纯 PHP 框架,Yaf/Phalcon 这些的 C 扩展框架,都要好太多,具体对比测试: http://www.jianshu.com/p/f769b6be1caf。
|
10
onanying OP @runningman 你可以进官方群。
|
11
onanying OP MixPHP 并发性能全面对比测试: http://www.jianshu.com/p/f769b6be1caf
v2ex 还能更蠢一点么,句号都加入 href |
12
sexrobot 2017-10-11 21:52:46 +08:00
看到 yii 风格的 namespace 有些反感
|
14
vincenth520 2017-10-12 09:22:29 +08:00
看设计风格这些感觉跟 zanphp 很像
|
15
DukeAnn 2017-10-12 09:30:32 +08:00
这种自己开发的小众轮子多半不会有公司用,只能自己或者自己公司内部用
|
16
onanying OP @vincenth520 zanphp,tencent-tsf 这些都是大量使用异步携程的框架,mixphp 更像是处于 zanphp 与 Phalcon 之间的位置。
|
18
Norie 2017-10-12 10:15:43 +08:00
膜拜
|
19
kancloud 2017-10-12 14:04:50 +08:00
没有细看,为手册放看云点个赞👍
|
21
flyshu 2017-10-12 14:46:52 +08:00
赞一个
|
22
Immortal 2017-10-12 15:14:31 +08:00
首先楼主轮子精神值得敬佩
但是我觉得性能测试上有一些不严谨 项目我没仔细看,但貌似是基于 swoole 的一个框架 在性能对比里因为你的框架是基于 swoole 的,所以和其他框架对比的时候也应该在 swoole 上比较 比如 mixphp 对比 yii2 的时候,yii2 应该也在 swoole 上 不然你无法判断你的高性能是你的框架性能好,还是 swoole 的功劳 |
23
sagaxu 2017-10-12 15:25:07 +08:00
TCP/UDP 服务器可以用 swoole 啊,或者用 Go 也是很自然的,不一定要招不同的人做
laravel/yii 做管理后台,swoole 做服务端,性能扛不住了再引入 Go 或者 Java,再造一个小众框架,不看好 |
24
onanying OP @Immortal 可能你还没有深入了解 Swoole,Swoole 有很多领域与使用方法,而我使用的是 SwooleHttpServer 这一块,而这一块的话,最大的优势就是:因为是 CLI,request/response 变为了事件,从而允许对象常驻内存,而 Yii 这类的框架是以 Apache/PHP-FPM 方式为基础的,无法在 Swoole 里常驻运行,当然应该如果有人去特殊处理一下,应该也可能,不过我没有这方面的经验,而如果不使用常驻运行,包含代码与执行框架全放在 request 事件里,那这样的运行方式与 PHP-FPM 的多进程模型,没有什么差别,而 MixPHP 从设计开始就是以常驻内存的方式设计的,也考虑了 SwooleHttpServer 内运行多个 HOST 的问题,还有 session,PHP 自带的 Session 无法在 CLI 下运行,这就导致了基于 PHP Session 封装的框架都无法运行,Session 做自己定制一下,还有全局变量问题,传统框架搭设在 SwooleHttpServer 面临很多问题,实际上无法真接运行的,大部分人是把 Swoole 使用在 传统框架内,当 client 端使用。
|
26
onanying OP @sagaxu 我这个就是基于 Swoole 的呀,你们用 Swoole 不封装一下么? 直接写原生?还是使用韩天峰老大做的那个?
|
27
sagaxu 2017-10-12 15:46:11 +08:00
@onanying swoole 除了 C 扩展还有一个框架,我们就用那个,而且定制了 rpc 协议,业务逻辑的入口已经不是 HTTP 的了,也没有 cookie 或者 session 的概念,只有一个 token
|
28
onanying OP @sagaxu 哦,你们用的应该是 Swoole 官方提供的这个吧 https://gitee.com/swoole/swoole_framework,功能很丰富的,韩天峰老大自己在博客里说过,功能封装的有点多,能简化一下的话,性能应该能更好,所以我尝试做了一个简单版。
|
29
Sukizen 2017-10-12 15:58:12 +08:00
同样是轮子,超跑的轮子和普通汽车的轮子肯定又不一样的地方。
所以我欣赏造轮子的人,至少他能造。 虽然没用过楼主的轮子,但是真心是赞。 |
31
Immortal 2017-10-12 16:07:48 +08:00
@onanying 因为早期我看过别人的 yaf+swoole 整合 你说的对 直接使用是不行 自己处理后是可以的 现在的 laravel+swoole 的整合我也见过好多了 只是我自己觉得你这样和 apache 之类的 server 做测试不是很严谨
|
32
hhacker 2017-10-12 16:09:20 +08:00 1
已 star,我一直不支持”为何要重复造轮子“这种观点,尤其是程序员都有不服输的精神,”我写的肯定好用“,我觉得正是这种永于造轮子的精神,才使得一代一代的程序员不断成长,不甘平庸,活得精彩,就像写一首诗,有人欣赏固然好,没人欣赏独乐乐有何不可
|
33
sagaxu 2017-10-12 16:12:03 +08:00
@onanying 就是官方这个框架。你的测试是虚拟机吗?感觉有点低。4 核 CPU,RPS 至少得 10K 以上吧,1000 多不正常。
|
35
onanying OP @Immortal 这样吧,因为 MixPHP 也支持 Apache/PHP-FPM 运行,后面我有时间了再加上 Apache 上执行与 Yii2 的对比,希望你能关注。
|
39
onanying OP @sagaxu 其实我面试的公司也有一些是公司自己定制的框架,也不能说是坑吧,看决策者注重哪一方面,有些企业决策者注重长远考虑,加上业务形态的特殊性,就决定自己做轮子了。
|
40
hhacker 2017-10-12 17:05:31 +08:00
@sagaxu
能在公事上选用自己写的轮子,都是在技术团队里处于技术负责或者带头的了,尤其是框架这种涉及到大方向的,这责任可不小,并且一个东西从最初的 alpha,到 beta,再到 rc 到 release,经历的时间都是相当长,需要相当多的受众和使用者踩坑,最终出来的才是 stable 版本,一个开源项目能最终到达 stable 状态的话,用在公司项目上当然是可以接受的。 |
41
sagaxu 2017-10-12 19:55:36 +08:00
@onanying 很多公司一个部门内部就有几组不同框架和不同程度的轮子,每个选型的人都有理有据,都觉得自己业务特殊,实际上很多时候把他们的框架互换,可能也没多少不利的影响。如果公司可以养 3 个以上只做基础设施不碰业务的平台开发人员,造一些轮子也无碍,不舍得养的话,另造轮子很可能得不偿失。
@hhacker 问题是资深或者高级开发,出发点不是公司利益,而是自身利益,力排众议用自己的轮子,成了可以写晋升 PPT,可以巩固自己专家地位,搞砸了大步了跑路换个公司继续坑。空降 CTO,然后全盘重构的例子多了,有多少不是政治因素,单纯技术决定的重构,只有当事人们自己清楚了。 我们公司在 PHP 技术积累上国内排前 5 应该没问题,就在这周还有好多次 coredump,一路踩过无数的坑,十次里面九次是自造轮子引起的,我们是因为每天几十亿次请求,没法选择那些用户基数大比较 stable 的 PHP 框架。 |
42
ylsc633 2017-10-12 20:00:51 +08:00
先膜拜一下大佬
将来有这能力,我也会造一下轮子... 不过.. 有一点.. 如果你只是路过某个公司,在没有必要的情况下,求不坑其他同事,特别是你走后来的同事...... |
43
AlwaysBee 2017-10-12 20:25:19 +08:00
支持,虽然不赚钱,但是我觉得收获都是潜在的,刚刚也分享了一篇关于自己是如何通过免费的产品给自己引流的文章,写得不好,多多指教
https://mp.weixin.qq.com/s/k5HGT5p17f_h_NGS47D1bA |
44
linxl 2017-10-13 09:10:37 +08:00
自己当大佬给大家用, 哈哈哈
|
45
vincenth520 2017-10-13 14:04:10 +08:00
这个框架已经在微博上被韩天峰跟鸟哥议论了
|
47
onanying OP @vincenth520 感谢两位 PHP 界的大神对我这个小众框架的关注。
|
48
pushaowei0727 2017-10-19 14:21:07 +08:00
```
但是比 Apache/PHP-FPM 传统框架,比如:Yii/TP/CI 纯 PHP 框架,Yaf/Phalcon 这些的 C 扩展框架,都要好太多 ``` 本人一直用 Yaf/Phalcon 3 年有余, 看到这儿立马打算看一看,然后看了你的测试地址发现 404,不知道是怎样测试,然后点进项目里面,呃 |
49
onanying OP @pushaowei0727 测试地址: http://www.jianshu.com/p/f769b6be1caf ,你可以安装一个测试一下,毕竟大家都带有主观思想。
|
50
gouchaoer 2017-10-19 21:58:07 +08:00 via Android
|
51
gouchaoer 2017-10-19 22:04:26 +08:00 via Android
对了,在再渲染输出几十 kb 的 html 试试,同步阻塞的框架优化的再好也只是框架本身逻辑优化,这一块除非你像 laravel 那样自己把自己搞得很慢很复杂,否则放到实际业务里差别真不大
|
52
onanying OP @gouchaoer MixPHP 与 Phalcon 数据库并发性能测试 http://www.jianshu.com/p/0ce1a9885e01 , 你低估了框架本身对性能的损耗。
|
54
fenghoer 2018-03-14 13:48:46 +08:00
swoole 模式下,可以支持热更新吗。还有:长期运行的话稳定性怎么样呢
|
55
tangniyuqi 2018-04-24 18:24:51 +08:00
赞一个! php MVC 行业需要你来拯救
|
56
tangniyuqi 2018-04-24 18:26:07 +08:00
建议多加入 yii2 等优秀框架的开发特性
|