Node.js 優缺點
https://yami.io/you-might-not-need-nodejs/
Node.js
Node.js 是什麼呢?根據官網的說法:
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
「runtime」 指的是執行環境,就如同網頁上的 JavaScript 是在瀏覽器的 JavaScript 引擎上執行,Node.js 就是一個能執行 JavaScript 的環境,而 V8 則是主流瀏覽器 - Google Chrome 的 JavaScript 引擎,負責解析、執行 JavaScript,也就是負責實踐 ECMAScript 規範中定義的部份;另外,V8 是開源的專案,有興趣的讀者可以參照 Google Git - V8。
Node.js 以 V8 為核心,加上一系列 C/C++ 的套件,成功的讓 Server 端也可以執行 JavaScript。
優點
但是,後端語言已經這麼多了,為什麼還要大費周章的將 JavaScript 移植到 Server 端呢?
這是因為 JavaScript 是一個事件驅動的語言,透過事件迴圈,能讓執行緒幾乎不會被卡住;而這樣的特性,非常適合用來接收高併發(High Concurrency)的請求。
例如在傳統的伺服器中,每個使用者的連接都會產生一個新的執行緒(看實作,不一定),並佔據一定的效能,伺服器在高併發的情況下,很容易就會由於應接不暇而無法服務新的流量;但 Node.js 會將每個 request 變成事件迴圈中待處理的事件,主執行緒只負責承接、轉拋、回應,並持續的在事件迴圈中循環,一切都以事件為核心在驅動程式運行,自然也就不會出現執行緒卡死的現象。
當然,如果是商業邏輯複雜的後端程式,效能瓶頸不在流量的服務,Node.js 就無用武之地;但在設計需要承接高流量,且處理邏輯不太複雜時,Node.js 可能就會是個可以考慮的選項。
=========
為什麼 Node.js 不適合大型和商業專案?
但⋯⋯如果你只是因為這些原因而選用 Node.js,你可以考慮轉往其他語言了(甚至回到 PHP 和 Python 的懷抱),為什麼?這裡有幾點你需要考慮。
1.毫無結構性
事實上,Node.js 很適合小型和輕量級專案,但當結構越來越龐大的時候,你會遇上這件鳥事。沒錯,Node.js 是弱型態語言,這也令 Node.js 暴露在不具結構性的問題下,令開發者難以掌控物件所擁有的屬性為何、函式會回傳什麼內容。
2.型態難以判斷
3.文件、註釋不易撰寫
4.可用函式跟不上時代
套件佔了空間一大半
Node.js 的生態真的很好,然後你就會用上一堆 npm 裡的套件,接著發現 node_modules 資料夾比起你的專案大概多用了二十幾倍的空間。
5.回呼地獄
6.多工異步麻煩
7.原始作者逐漸疏離
https://yami.io/you-might-not-need-nodejs/
=======
https://newgoodlooking.pixnet.net/blog/post/110484375
一. NodeJS的特點
我們先來看看NodeJS官網上的介紹:
Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
其特點為:
1. 它是一個Javascript運行環境
2. 依賴于Chrome V8引擎進行代碼解釋
3. 事件驅動
4. 非阻塞I/O
5. 輕量、可伸縮,適于實時數據交互應用
6. 單進程,單線程
三. NodeJS的優缺點
優點:
1. 高并發(最重要的優點)
2. 適合I/O密集型應用
缺點:
1. 不適合CPU密集型應用;CPU密集型應用給Node帶來的挑戰主要是:由于JavaScript單線程的原因,如果有長時間運行的計算(比如大循環),將會導致CPU時間片不能釋放,使得后續I/O無法發起;
解決方案:分解大型運算任務為多個小任務,使得運算能夠適時釋放,不阻塞I/O調用的發起;
2. 只支持單核CPU,不能充分利用CPU
3. 可靠性低,一旦代碼某個環節崩潰,整個系統都崩潰
原因:單進程,單線程
解決方案:(1)Nnigx反向代理,負載均衡,開多個進程,綁定多個端口;
(2)開多個進程監聽同一個端口,使用cluster模塊;
4. 開源組件庫質量參差不齊,更新快,向下不兼容
5. Debug不方便,錯誤沒有stack trace
五. 結尾
其實NodeJS能實現幾乎一切的應用
我們考慮的點只是適不適合用它來做
======
Node.js 教學
https://iter01.com/568157.html
https://progressbar.tw/posts/291
https://sites.google.com/site/nodejswikiinchinese/nodejs_from_scratch/nodejs-kai-shi/nodejs-dehello-world
留言
張貼留言