最近業(yè)余時(shí)間一直在開發(fā)ExpressPHP的第二個(gè)版本 MixPHP,今天下班想起之前一個(gè)面試官的問題:你為什么還要再造一個(gè)輪子呢?仔細(xì)回想,第一個(gè)版本,現(xiàn)在想來確實(shí) “炫技” 的成份比較多,現(xiàn)在推翻第一版,又重構(gòu)一個(gè)所謂的 “高性能PHP框架” ,這東西又不賺錢,我到底為了啥?其實(shí),寫程序和寫詩有很多相似之處,同樣需要優(yōu)雅的語法,好作品也同樣想要有更多的人欣賞,感性完了,接下來理性的分析一下。
國內(nèi)常用的框架
國內(nèi)較流行的 PHP 框架,參考Lagou等招聘網(wǎng)中的招聘信息與眾多同事口口相傳。
| 框架 | 特點(diǎn) | 流行度 | 更加適合 |
|---|---|---|---|
| ThinkPHP | 易上手,文檔友好、過度封裝 | 超高 | 網(wǎng)頁 |
| Yii | 安全性高、規(guī)范、性能稍差 | 高 | 網(wǎng)頁 |
| Codeigniter | 簡單、高效、文檔友好 | 高 | 網(wǎng)頁&API |
| Yaf/Phalcon | C擴(kuò)展,高性能 | 一般 | API |
后端開發(fā)業(yè)務(wù)場景
通常后端開發(fā)有以下這些場景:
- 網(wǎng)頁/后臺管理開發(fā)
- API開發(fā)
- TCP服務(wù)器開發(fā)
- UDP服務(wù)器開發(fā)
- 異步隊(duì)列消費(fèi)者開發(fā)
- 定時(shí)任務(wù)開發(fā)
采用多種技術(shù),復(fù)雜度、成本必然更高
因?yàn)椴煌瑘鼍暗脑V求不同,所以很多公司采用多種框架來開發(fā),APP的API采用Yaf/Phalcon,后臺管理采用Yii、ThinkPHP、Codeigniter,TCP/UDP服務(wù)器又采用Java/C++來寫,一個(gè)后端開發(fā)就需招聘擅長不同框架不同語言的程序員來開發(fā)。
現(xiàn)有 MVC 框架的弱項(xiàng)
在網(wǎng)頁/后臺管理/API開發(fā)方面,流行的各種PHP框架一直都很擅長,可是在控制臺程序開發(fā)方面:
- HTTP/TCP/UDP服務(wù)器開發(fā):還未有流行的PHP框架封裝。
- 異步隊(duì)列消費(fèi)者開發(fā):只提供了CLI模式下運(yùn)行控制器方法,并未提供主進(jìn)程多子進(jìn)程的進(jìn)程模型,并未提供多線程處理。
- 定時(shí)任務(wù)開發(fā):還需依賴第三方工具crontab等,PHP框架本身不能實(shí)現(xiàn)。
PHP 框架開發(fā)效率與性能不可兼得
Yaf/Phalcon這樣C擴(kuò)展框架,如果開發(fā)業(yè)務(wù)十分復(fù)雜的后臺與網(wǎng)頁,開發(fā)效率不高,中小企業(yè)開發(fā)效率才是生存王道,而開發(fā)效率高的ThinkPHP、Yii、Codeigniter開發(fā)API性能又差了點(diǎn),當(dāng)然性能可以從架構(gòu)上著手,但是如果高性能與開發(fā)效率可以兼得,豈不更好。
MixPHP 試圖解決這些
- 高性能與開發(fā)效率兼得:參考Yii、ThinkPHP、Codeigniter提高開發(fā)效率的特性,編寫全部面向?qū)ο蟮腗VC框架,使其同時(shí)支持LNMP架構(gòu)與Swoole應(yīng)用服務(wù)器,需要開發(fā)效率時(shí)采用LNMP傳統(tǒng)架構(gòu),需要高性能API時(shí),修改少量代碼,即可切換為Swoole應(yīng)用服務(wù)器,把框架類庫預(yù)加載至內(nèi)存,數(shù)據(jù)庫按進(jìn)程長連接,可達(dá)到Y(jié)af/Phalcon的性能。
- 多線程異步隊(duì)列服務(wù):只需寫好控制器方法,然后在配置文件中配置下路由命名空間、進(jìn)程、線程數(shù)量,就可在CLI模式中啟動(dòng)多進(jìn)程多線程模型的異步隊(duì)列處理程序。
- 定時(shí)任務(wù)服務(wù):只需寫好控制器方法,然后配置下路由命名空間、定時(shí)循環(huán)條件,就可在CLI模式中啟動(dòng)動(dòng)態(tài)多進(jìn)程模型的定時(shí)任務(wù)處理程序。
- TCP/UDP服務(wù):一步步來,后續(xù)版本再考慮加入。
結(jié)尾
許愿:希望以后所有后端開發(fā),如用PHP,就用一個(gè)框架可好?
PHP是最好的語言
GitHub
支持的用戶請加個(gè) Star 吧,讓更多人發(fā)現(xiàn) MixPHP。
https://github.com/mixstart/mixphp