我为什么要开发一个 MixPHP 框架

2017-10-11 18:17:57 +08:00
 onanying

最近业余时间一直在开发 ExpressPHP 的第二个版本 MixPHP,今天下班想起之前一个面试官的问题:你为什么还要再造一个轮子呢?仔细回想,第一个版本,现在想来确实 “炫技” 的成份比较多,现在推翻第一版,又重构一个所谓的 “全功能 PHP 框架” ,这东西又不赚钱,我到底为了啥?其实,写程序和写诗有很多相似之处,同样需要优雅的语法,好作品也同样想要有更多的人欣赏,感性完了,接下来理性的分析一下。

国内常用的框架

国内较流行的 PHP 框架,参考 Lagou 等招聘网中的招聘信息与众多同事口口相传。

ThinkPHP: 易上手,文档友好、过度封装
Yii: 安全性高、规范、性能稍差
Codeigniter: 简单、高效、文档友好
Yaf/Phalcon: C 扩展,高性能

后端开发业务场景

通常后端开发有以下这些场景:

采用多种技术,复杂度、成本必然更高

因为不同场景的诉求不同,所以很多公司采用多种框架来开发,APP 的 API 采用 Yaf/Phalcon,后台管理采用 Yii、ThinkPHP、Codeigniter,TCP/UDP 服务器又采用 Java/C++来写,一个后端开发就需招聘擅长不同框架不同语言的程序员来开发。

现有 MVC 框架的弱项

在网页 /后台管理 /API 开发方面,流行的各种 PHP 框架一直都很擅长,可是在控制台程序开发方面:

PHP 框架开发效率与性能不可兼得

Yaf/Phalcon 这样 C 扩展框架,如果开发业务十分复杂的后台与网页,开发效率不高,中小企业开发效率才是生存王道,而开发效率高的 ThinkPHP、Yii、Codeigniter 开发 API 性能又差了点,当然性能可以从架构上着手,但是如果高性能与开发效率可以兼得,岂不更好。

MixPHP 试图解决这些

结尾

许愿:希望以后所有后端开发,如用 PHP,就用一个框架可好?

GitHub

支持的用户请加个 Star 吧,让更多人发现 MixPHP。 https://github.com/mixstart/mixphp

10483 次点击
所在节点    PHP
56 条回复
flyshu
2017-10-12 14:46:52 +08:00
赞一个
Immortal
2017-10-12 15:14:31 +08:00
首先楼主轮子精神值得敬佩
但是我觉得性能测试上有一些不严谨
项目我没仔细看,但貌似是基于 swoole 的一个框架
在性能对比里因为你的框架是基于 swoole 的,所以和其他框架对比的时候也应该在 swoole 上比较
比如 mixphp 对比 yii2 的时候,yii2 应该也在 swoole 上
不然你无法判断你的高性能是你的框架性能好,还是 swoole 的功劳
sagaxu
2017-10-12 15:25:07 +08:00
TCP/UDP 服务器可以用 swoole 啊,或者用 Go 也是很自然的,不一定要招不同的人做

laravel/yii 做管理后台,swoole 做服务端,性能扛不住了再引入 Go 或者 Java,再造一个小众框架,不看好
onanying
2017-10-12 15:30:45 +08:00
@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 端使用。
onanying
2017-10-12 15:33:36 +08:00
@sagaxu 哈哈,我自己也不看好,留着自己用。
onanying
2017-10-12 15:40:17 +08:00
@sagaxu 我这个就是基于 Swoole 的呀,你们用 Swoole 不封装一下么? 直接写原生?还是使用韩天峰老大做的那个?
sagaxu
2017-10-12 15:46:11 +08:00
@onanying swoole 除了 C 扩展还有一个框架,我们就用那个,而且定制了 rpc 协议,业务逻辑的入口已经不是 HTTP 的了,也没有 cookie 或者 session 的概念,只有一个 token
onanying
2017-10-12 15:54:22 +08:00
Sukizen
2017-10-12 15:58:12 +08:00
同样是轮子,超跑的轮子和普通汽车的轮子肯定又不一样的地方。
所以我欣赏造轮子的人,至少他能造。

虽然没用过楼主的轮子,但是真心是赞。
onanying
2017-10-12 16:01:57 +08:00
@Sukizen 感谢!我差点被口水淹没了,5555
Immortal
2017-10-12 16:07:48 +08:00
@onanying 因为早期我看过别人的 yaf+swoole 整合 你说的对 直接使用是不行 自己处理后是可以的 现在的 laravel+swoole 的整合我也见过好多了 只是我自己觉得你这样和 apache 之类的 server 做测试不是很严谨
hhacker
2017-10-12 16:09:20 +08:00
已 star,我一直不支持”为何要重复造轮子“这种观点,尤其是程序员都有不服输的精神,”我写的肯定好用“,我觉得正是这种永于造轮子的精神,才使得一代一代的程序员不断成长,不甘平庸,活得精彩,就像写一首诗,有人欣赏固然好,没人欣赏独乐乐有何不可
sagaxu
2017-10-12 16:12:03 +08:00
@onanying 就是官方这个框架。你的测试是虚拟机吗?感觉有点低。4 核 CPU,RPS 至少得 10K 以上吧,1000 多不正常。
onanying
2017-10-12 16:12:54 +08:00
@sagaxu 虚拟机,还开着 N 多软件
onanying
2017-10-12 16:14:18 +08:00
@Immortal 这样吧,因为 MixPHP 也支持 Apache/PHP-FPM 运行,后面我有时间了再加上 Apache 上执行与 Yii2 的对比,希望你能关注。
sagaxu
2017-10-12 16:14:59 +08:00
@hhacker 99%以上的轮子都是椭圆的甚至方的,作为练手有其价值,用到项目里,那是坑公司和同事
sagaxu
2017-10-12 16:18:30 +08:00
@onanying 这样很影响 benchmark 效果的,最好真机给足内存,关掉不相关软件再测
Immortal
2017-10-12 16:41:50 +08:00
onanying
2017-10-12 16:56:46 +08:00
@sagaxu 其实我面试的公司也有一些是公司自己定制的框架,也不能说是坑吧,看决策者注重哪一方面,有些企业决策者注重长远考虑,加上业务形态的特殊性,就决定自己做轮子了。
hhacker
2017-10-12 17:05:31 +08:00
@sagaxu
能在公事上选用自己写的轮子,都是在技术团队里处于技术负责或者带头的了,尤其是框架这种涉及到大方向的,这责任可不小,并且一个东西从最初的 alpha,到 beta,再到 rc 到 release,经历的时间都是相当长,需要相当多的受众和使用者踩坑,最终出来的才是 stable 版本,一个开源项目能最终到达 stable 状态的话,用在公司项目上当然是可以接受的。

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

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

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

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

© 2021 V2EX