# 前言
隨著 Node.js 的問世,前端開發者的觸角也逐漸蔓延到後端,甚至透過 Electron.js 這類強大的套件,也可以製作出完整的桌面 GUI 應用程式;
藉由 Node.js,前端開發者得以使用較為熟悉的 JavaScript 為敲門磚,逐步的拓展自己的技術守備範圍。
但為什麼為了網頁而生的語言可以透過 Node.js 跑在伺服器端呢?要解開這個問題,就得從認識 Node.js 出發。
# Node.js 是什麼?
「runtime」 指的是執行環境,就如同網頁上的 JavaScript 是在瀏覽器的 JavaScript 引擎上執行,Node.js 就是一個能執行 JavaScript 的環境,而 V8 則是主流瀏覽器 - Google Chrome 的 JavaScript 引擎,負責解析、執行 JavaScript,也就是負責實踐 ECMAScript 規範中定義的部份;另外,V8 是開源的專案,有興趣的讀者可以參照 Google Git - V8。
Node.js 以 V8 為核心,加上一系列 C/C++ 的套件,成功的讓 Server 端也可以執行 JavaScript。
# Node.js 的優點
Node.js 最強的就是它的事件驅動設計,簡單、威力強大而且有一致的介面。
Node.js 和 Server 一體的好處,是每個 request 都知道在相同的處理程序中,知道該往哪走,而不需要.htaccess 這些額外的設定來處理。
Web 應用程式瓶頸通常出現在 network 的 I/O,而 Node.js 的強項正在這裡。
Node.js 採用 JavaScript,因此對 Web 開發人員來說通常已經很熟悉,要入門很快。
Node.js 的套件管理系統 NPM 做的相當好,而且每個人都可以輕易的將自己開放的東西放上去。
Node.js 將資料存放在記憶體中相當然容易,便於讓不同的 client 存取。
# Node.js 的缺點
Node.js 的缺點就是新,還不夠穩定,API 經常在更新,如果要開發大型的應用程式,也許 Node.js 不是一個最佳選項。
如果要處理大量的靜態檔案,也許 Node.js 也不是最佳選擇,它必須回到利用檔案系統來檢查檔案是否存在。
JavaScript 對 Class based 和不熟悉非同步的開發者來說,也有適應上的痛苦。
雖然讓資料常駐在記憶體中雖然很容易,不過同時也招來風險,除了有可能導致記憶體洩露,也可能導致 Node.js 炸掉。
# 參考
https://tw.alphacamp.co/blog/node-js-and-javascript
https://ithelp.ithome.com.tw/articles/10095722