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