先說結論,rust完勝。 php:laravel,swoole,webman,最開始在蘇寧的時候寫了幾年php,當時覺得php真的是世界上最好的語言,因為當初活在舒適圈里,不愿意跳出來,就好比當初活在flash舒適圈里一樣不愿意轉html5。 覺得php好,是因為laravel框架寫的好,加上好用的模板引擎,確實舒適了很久。 但是,現在前后端分離了,laravel模板引擎直接用不上了,優勢直接砍掉80%。 然后配合swoole webman(workerman)等多年前的新興技術,看起來是不錯,但是他們還是要以擴展形式安裝,本地開發好了后,還得線上配置一套,需要線上線下2次配置環境。 workerman 文檔里話里話外都在暗示并建議你安裝額外的libevent,雖說不裝也行,但是就會受限于php自身的能力。我相信webman那么漂亮的壓測數據應該不是純webman自身的功勞吧,應該是借用了libevent。 swoole至今也沒進php默認安裝擴展吧,可以理解成,swoole是買了php皮膚的c語言。但是既然選擇了swoole為什么不直接選golang呢? 我現在追求的是線上零環境配置,不裝依賴,不裝運行環境,所以,我不再使用php了。 雖然網友提供了打包php免環境安裝的方案,但是,畢竟php是上一個時代的產物,過去的事就讓他過去吧,不要在留戀過去了。擁抱一下新時代的好東西。 dart:用dart是因為flutter用dart,所以順便看了看服務器開發的生態,生態不是沒有,只是流行度不太高,所以并不建議用dart寫服務器,不過如果是flutter程序員想玩全棧,可以考慮dart寫后端。上手速度很快。 node:語法與js 完全一致,我寫了6年react了,按理說,我應該首選node,但是,現實中,后端開發,比前端要多不少多線程的場景,也就是worker,也就是cpu密集型的任務,如音樂加密,圖片壓縮,需要單獨把子任務放到一個獨立的js文件里,通過postMessage進行通訊,這一點,開發時效率非常低。 而且node本身無法實現協程,worker只不過是處理單獨任務時使用,并不能實現真正的協程并發,它的事件循環也不過是單線程的,需要多進程模式,多進程與多線程對多核cpu的利用率完全不一樣,而且進程數量一多,就會出現額外管理進程的麻煩,不論你是用pm2還是pm3還是pm100,都是額外的麻煩,這與網友們說的因為與js語法相同而大大提高工作效率的說法背道而馳。 所以,node并不適合當今后端開發,因為現在是多核時代了。放棄node。 cpp:寫了2個月單片機esp32,算是自從大學畢業近20年以來又一次把cpp撿起來了,你要說cpp沒有服務器開發框架吧,它確實有,但是,不流行啊,不出名,用的人很少。總的來說,cpp寫服務器增刪改查,還是太粗糙了,過于底層,過于原始。開發效率直接降低到最低。用cpp寫curd簡直是自找苦吃。 java:可以說,如果沒有spring boot,java寫服務器業務幾乎等于廢物,雖然也有其他出名的框架,但是不得不說spring已經是行業標準,寫接口就要上spring,但凡你改了一個框架,市場上90%的java開發直接廢掉。 但是,spring boot出了名的占內存,我2G內存,給mysql 500M 還有多少能留給spring的呢? 而且,服務器依然要安裝java環境,跟php一樣麻煩,等服務器過期了換個新服務器,配置環境又是大量時間的消耗。 放棄java golang:這些年他與java的pk不斷,想代替java卻一直不成功。雖然他能實現免環境安裝,但是開發效率真的是太低了,只有for range 與 for,沒有語法糖,是大道至簡還是大道智減?所以為啥都說go只適合寫云原生,寫中間件,不適合寫業務,原因可能就是因為開發效率不行吧。我用go寫了個小項目,確實是太慢了,開發速度都趕不上node。 golang入門確實容易,如果真的學不會更好的rust的話,就用golang吧。 最后說說rust,確實3次入門才成功,但是,現在回過頭看,前兩次所謂入門不過是看幾天文檔,寫個demo,并沒有具體去完成一個小項目,第三次入門是做項目,寫了4個月,代碼行數達到2萬行,此時,驚人的發現,開發效率太高了。 語法與js 80%相似,語法糖更是比js還多,js里map只有遍歷的功能,而rust里map還可以實現把一個類型的Option轉化成另一個類型的Option。 加上最牛逼的結尾問號,實現全局不寫一處match異常捕獲也可以輕松定位異常的堆棧信息與異常內容。實在是太省心了。此時不得不看一眼golang。 rust生態確實不像java那樣成熟,但是,業務中用到的需求都能找到