請停止Node.js在企業應用中爭鬥
這是來自Dave Banister的博文Blog,將反對NodeJS在企業中應用的陳舊觀點逐一批駁,這篇文章主要是針對微軟陣營的程式設計師。摘要如下,原文請點按標題:
1995年大約有40萬人在網際網路上,但到2011年有近45億。電腦已經變得如此之快,我的手機比我的第一個網站伺服器有更強的處理能力。網際網路連線提高了這麼多,購買任何媒體的複製(如電影光碟)似乎比較愚蠢。 Web服務現在已經是一個商業化網站必要的功能。彈性計算使得擴充套件縮放變得如此精妙。
隨著這些變化,網路的發展已經轉移。每次技術換擋,基礎客戶端技術必須適應,而我們現在正處於這樣一個換檔節點,這迫使大多數應用程式的功能轉移到瀏覽器中,這不是可能不可能的問題,如果你想跟上競爭,應該認為這是必要的。
在JavaScript過去的二十年中,JS框架、工具和模式不斷在進化和發展。JavaScript從一個只有必要時才使用的可以被褻瀆的語言已經演變到Web開發中的一個完全充滿活力的一等公民。
隨著Node.js近年來的興起,在伺服器端使用JavaScript似乎是一個很大的阻力,甚至更多的阻力來自Node.js自身。在我看來,這種阻力是基於不同程度的誤解,很多都是一些古老的觀點。在這篇文章中,我打算展示所有的反對在企業中使用Node.js的主要論點。
我不是一個JavaScript開發。我是一名軟體開發人員。 JavaScript不是我所選擇的語言,我在合適的地方會使用它,就像所有其他的語言一樣。我完全熟悉主流的SQL,當我編寫C/ C + +程式碼的時候。net走入了我的世界,我甚至使用一些內聯彙編,使用新的CPU指令只是為了好玩。我已經涉足ObjectC和Java原生移動應用程式,我想我可能是享受喜歡編寫正規表示式唯一的人。重要的是要明白,我不是一些JavaScript傳道者那樣掛羊頭賣狗肉。我只是基於近20年的開發經驗看到Node.JS在構建Web應用程式上的價值。
誤解:為什麼我們要使用其他伺服器?
首先, Node.js不是一個伺服器。這是一個阻止在在企業中應用的根本誤解。我用Node.js的每一天中,我很少將它作為一個伺服器使用。沒有JavaScript的提示prompt是無法執行NodeJS的,該提示prompt可以基於另一個shell的系統上。
將Node.js作為外殼shell,shell指令碼其實提供了Node.js究竟是什麼的更好的解釋。我覺得Node.js的指令碼更象bash或PowerShell指令碼。如果使用這些指令碼啟動起來一個Web伺服器,那麼這個指令碼就是一個Web伺服器。
我們將NodeJS看成指令碼而不是伺服器有不少優點。是什麼讓Node.js成為比其他的shell更好的替代?是NPM。NPM包管理器可以讓我在拉包,幾乎無所不能。這些模組包括資料訪問庫,編譯器,伺服器,以及其他一切。
其次, Node.js並不僅限於HTTP / S 它有TCP和UDP支援。人們已經建立了如DNS和SMTP伺服器等一些瘋狂的事情。這很重要,因為我不再去關心任何人在使用IIS實施DNS伺服器。只有這種級別的靈活性才能創造這麼多的選擇,這是當前其他企業伺服器的選擇無法比擬的。
第三, 帶有IS外掛Node.js是一個平臺。開箱即用, Node.js包含HTTP監聽者 ,但它不包含一個真正的伺服器。這讓開發人員編寫自己的伺服器,或者使用NPM來拉一把。在Node.js上一切工作方式相同。 Node.js所提供的簡約API提供了構建幾乎任何東西的工具。在巨大的包庫中提供了幾乎所有的東西的實現。
誤解:JS真的不像一個真正語言
avaScript已經長大了。在ECMA 6規範包括類,介面,和所有通常流行的物件導向語言相關的好東西。這些功能雖然是未來,但在此期間,TypeScript 已經提供了這些功能在編譯時的檢查。即使沒有這些功能, JavaScript開發人員都使用原型繼承。 JavaScript支援單元測試,依賴注入,錯誤處理,以及所有的其他企業真正關心的功能。
....
誤解:JS不能進行編譯檢查
JavaScript並沒有一個編譯器,所有不會進行錯誤檢查,但是靜態程式碼分析和單元測試是驗證你的程式碼更好的手段((banq注:IDE等提供了靜態程式碼分析,如Sublime)。
)
靜態程式碼分析應該彌補JavaScript基於語法編譯時的錯誤;單元測試彌補JavaScript基於程式碼中的錯誤測試。如果你認為編譯器輸出仍然是重要的,TypeScript的編譯器應該給你這些需求。
誤解:NodeJS是單執行緒
Node.js使用C編寫的libuv為I/O管理自己的執行緒,包括網路 檔案系統等,libuv 必要時會為I/O建立一個執行緒池,V*事件迴圈是另外一個單獨的執行緒,專門處於佇列中事件,這些事件資料對映到JS的可執行函式,這就是Node.JS的非同步I/O原理。
這個對於每個處理程式的單個V8事件迴圈,意味著Node.JS提供一個叢集的API,允許主Node.js程式生成子程式,這個叢集API也能用於跨程式通訊,每個程式都接受它自己的 V8事件迴圈,也就是擁有自己的javaScript執行緒,這就是傳統多執行緒能夠在Node.JS中實現原理。
Node.js有可擴充套件模組可以實現本地原生程式碼。原生程式碼可以生成執行緒。已經有模組提供產生的後臺和工作執行緒。
現在一個現代Web應用程式中,大多數的正常請求的時間都花在等待一個資料庫呼叫、REST API請求或檔案操作的完成。非同步I / O採用透過發出一個外部呼叫的不同方法,當呼叫完成,它就會被扔進事件迴圈。主執行緒就不會處於永遠等待。傳統的多執行緒技術有額外消耗,比如記憶體或上下文切換等。非同步I / O的方式是如此引人注目,非同步和等待的關鍵字將被引入到C# NET 4.5,非同步控制器將引入在ASP.NET MVC 4中。
這裡是Uber從傳統的LAMP堆疊切換到Node.JS的Uber報告,能看跨多核擴充套件叢集,也能夠透過基於雲的彈性計算擴充套件。
完,其他一些不重要的誤解可參考原文。
相關文章
- 明確MangoDB在企業中應用Go
- ERP在企業中的應用(轉)
- 請問大家在java企業應用中功能url偽造如何防範的?Java
- IPsec在企業網中的應用!(vpn)
- Ubuntu在企業應用中的地位幾何?Ubuntu
- 專案管理在企業中的應用(轉)專案管理
- 專案管理軟體在企業中的應用專案管理
- Docker在企業中的應用現狀報告Docker
- erp在服裝企業中的應用與改善
- PDM技術在製造企業中的應用及研
- 六西格瑪在改善企業流程中的應用體現
- 儲存網路在企業應用中的安全隱患
- silverlight 在企業應用開發中的定位
- Linux在企業中的應用尚不成熟 (轉)Linux
- Oracle與SQL Server在企業應用中的比較(轉)OracleSQLServer
- CRM系統在電商企業的應用
- 蘋果在企業中的應用提升蘋果
- 企業在機器學習應用中需要吸取的經驗和教訓機器學習
- H5-APP在企業系統中的架構應用H5APP架構
- 高速公路網路技術在企業管理中的應用
- Linux在中小型企業中的全面應用方案(轉)Linux
- VLAN技術介紹及其在企業網路中應用(轉)
- Node.JS呼叫企業微信API:自建應用的回撥事件Node.jsAPI事件
- 為什麼Node.js適合在企業應用而Rails不是?Node.jsAI
- 在企業 CRM 中應收集哪些有用資料?
- 10個最佳 Node.js 企業應用案例:從 Uber 到 LinkedInNode.js
- [譯] 如何優化企業級規模的 Node.js 應用程式優化Node.js
- 雲原生 Cloud Native 在企業中的應用與發展趨勢Cloud
- 雙埠NVMe SSD及其在企業級儲存系統中的應用
- 簡訊動態密碼與KEY是在企業安全中的應用密碼
- OA辦公系統在房產企業的應用
- Service Mesh在企業級應用的生存之道
- SOA與企業應用
- OA軟體中人力資源管理模組在企業中的具體應用?
- 銀彈谷:SaaS在企業當中的應用並非一帆風順
- 測量系統分析(MSA)在企業質量管理中的應用(轉載)
- Web Service在2005企業應用整合中的作用調查報告Web
- 網易智慧企業 Node.js 實踐(3)| 灰度環境和應用監控Node.js