最近业余时间一直在开发ExpressPHP的第二个版本 MixPHP,今天下班想起之前一个面试官的问题:你为什么还要再造一个轮子呢?仔细回想,第一个版本,现在想来确实 “炫技” 的成份比较多,现在推翻第一版,又重构一个所谓的 “高性能PHP框架” ,这东西又不赚钱,我到底为了啥?其实,写程序和写诗有很多相似之处,同样需要优雅的语法,好作品也同样想要有更多的人欣赏,感性完了,接下来理性的分析一下。
国内常用的框架
国内较流行的 PHP 框架,参考Lagou等招聘网中的招聘信息与众多同事口口相传。
框架 | 特点 | 流行度 | 更加适合 |
---|---|---|---|
ThinkPHP | 易上手,文档友好、过度封装 | 超高 | 网页 |
Yii | 安全性高、规范、性能稍差 | 高 | 网页 |
Codeigniter | 简单、高效、文档友好 | 高 | 网页&API |
Yaf/Phalcon | C扩展,高性能 | 一般 | API |
后端开发业务场景
通常后端开发有以下这些场景:
- 网页/后台管理开发
- API开发
- TCP服务器开发
- UDP服务器开发
- 异步队列消费者开发
- 定时任务开发
采用多种技术,复杂度、成本必然更高
因为不同场景的诉求不同,所以很多公司采用多种框架来开发,APP的API采用Yaf/Phalcon,后台管理采用Yii、ThinkPHP、Codeigniter,TCP/UDP服务器又采用Java/C++来写,一个后端开发就需招聘擅长不同框架不同语言的程序员来开发。
现有 MVC 框架的弱项
在网页/后台管理/API开发方面,流行的各种PHP框架一直都很擅长,可是在控制台程序开发方面:
- HTTP/TCP/UDP服务器开发:还未有流行的PHP框架封装。
- 异步队列消费者开发:只提供了CLI模式下运行控制器方法,并未提供主进程多子进程的进程模型,并未提供多线程处理。
- 定时任务开发:还需依赖第三方工具crontab等,PHP框架本身不能实现。
PHP 框架开发效率与性能不可兼得
Yaf/Phalcon这样C扩展框架,如果开发业务十分复杂的后台与网页,开发效率不高,中小企业开发效率才是生存王道,而开发效率高的ThinkPHP、Yii、Codeigniter开发API性能又差了点,当然性能可以从架构上着手,但是如果高性能与开发效率可以兼得,岂不更好。
MixPHP 试图解决这些
- 高性能与开发效率兼得:参考Yii、ThinkPHP、Codeigniter提高开发效率的特性,编写全部面向对象的MVC框架,使其同时支持LNMP架构与Swoole应用服务器,需要开发效率时采用LNMP传统架构,需要高性能API时,修改少量代码,即可切换为Swoole应用服务器,把框架类库预加载至内存,数据库按进程长连接,可达到Yaf/Phalcon的性能。
- 多线程异步队列服务:只需写好控制器方法,然后在配置文件中配置下路由命名空间、进程、线程数量,就可在CLI模式中启动多进程多线程模型的异步队列处理程序。
- 定时任务服务:只需写好控制器方法,然后配置下路由命名空间、定时循环条件,就可在CLI模式中启动动态多进程模型的定时任务处理程序。
- TCP/UDP服务:一步步来,后续版本再考虑加入。
结尾
许愿:希望以后所有后端开发,如用PHP,就用一个框架可好?
PHP是最好的语言
GitHub
支持的用户请加个 Star 吧,让更多人发现 MixPHP。
https://github.com/mixstart/mixphp
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。