{eval=Array;=+count(Array);}
其實這根本不是技術棧的問題,而是node工程師沒有后端經驗的問題。如果有的話,會僅限于node嗎?語言差距根本不是問題,語言本身就是工具,重點應該去考慮不要有太多異構,維護起來太麻煩。還要考慮開發者群體。node最適合的地方還是提供小型的工具服務,前端工程師不用去了解太多的后端知識,只要會基礎的數據庫讀寫,緩存的使用就能解決的問題。
我專業前端做了很多年了,對js不能說是感情淺。但是node做后端,我還是覺得寧可重學一門后端語言也不會冒這個險,除非我干完項目拿錢走人別人去維護。我也知道一個大銀行不是國內的,前幾年被哪個頭腦發熱的技術牛人用js做了微服務,—后來項目用java重寫了。第一, node沒有多線程,以至于cpu-bound 任務是不可能的,如果沒有守護程序和 load balance 來做服務程序去響應微小的負荷也是冒險。第二,node 如果不用 async 寫出來的代碼就是 callback hell, 如果再沒有typescript, 維護起來是個噩夢。callback 是解決阻塞問題,但泛濫了就惡心了。 第三,也別想著維護三四年了,npm還沒干什么就引用幾十萬個庫了,有的庫也就10行代碼,庫質量差,壽命短,真用的復雜庫,幾年后依賴的庫有些已經不存在了。第三還是線程問題,別告訴我你多小的程序都配一個redis,部署和安全都是頭痛問題-沒有線程技術就無法共享數據緩沖數據。
總結:用nodejs做后端很作死。nodejs 在后端說白了只是一個高級的event bus, 一無是處。
node之所以容易被接受,是應為js語言的普及性,但是考慮到全棧開發的話node并不是首選,傳統的.net core和java還是首選。
如果僅僅考慮到各種各樣的代碼包,node確實有優勢,但是在高精度運算方面js語言就和java,c#沒法比了。
在服務器性能層面,node和j2ee,.net core,go比起來性能相差的非常多(大家可自行google一下benchmarking),因此其并不適合對性能要求比較高的服務環境。
另外,所謂全棧,還要包括移動應用和桌面應用,在移動應用方面原生開發的主要還是java和c#和oc,swift。
桌面級的原生跨平臺應用主流的技術還得是c#,qt+c++等。mfc就不推薦了,估計近十年微軟也沒怎么太更新了。
把全部的技術堆棧全都賭在node上是比較危險的,因為node最初的想法是希望能給前端開發人員提供一個服務器端環境,一開始的定位就和經典技術棧的定位也不一樣。
寫好服務程序,除了會crud以外,需要程序員在內存控制,數據結構,算法過程控制等方面都要有更好的經驗,即便像java,c#這樣自動回收內存,內置數據結構的語言,也都要很小心內存開銷,否則你的Stack Overflow,就真的只能去Stack Overflow去查了。
有些公司覺得node全棧很厲害,做服務器小菜一碟。有些公司根本不認為node和服務器開發有一毛錢關系,別說重要系統了,次級系統node都別想沾下邊。兩級分化嚴重,這就是node和傳統服務器的區別。
1 沒有成熟的微服務框架,主城還是喜歡java或者go
2 動態語言難以維護,需要很多文檔,按照文檔約定編碼,但沒法從代碼層面強制約束
3 CPU運算利用不好,需要調用其他語言支持。但問題在于node一般都是快餐型小項目,節約開發成本npm包特別多,不是長期大項目的技術選型
4 隨著golang的出現,大家都在往go上轉了,node更適合外包小門戶網站和前端。
0
回答0
回答0
回答4
回答3
回答10
回答0
回答0
回答0
回答0
回答