Node.js 優缺點

 https://yami.io/you-might-not-need-nodejs/

Node.js

https://tw.alphacamp.co/blog/node-js-and-javascript

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。

1.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

留言

這個網誌中的熱門文章

考績被打差了 輕率離職會更傷

Arrays - DS (Reverse array) [Easy]

WireMock