為什麼要把 JavaScript 放到伺服器端上執行?
因為在當年,Node.js的作者Ryan Dahl是一名資深的C/C++程式設計師,在創造出Node之前,他的主要工作都是圍繞高效能Web伺服器進行的。經歷過一些嘗試和失敗之後,他找到了設計高效能,Web伺服器的幾個要點:事件驅動、非阻塞I/O。
所以Ryan Dahl最初的目標是寫一個基於事件驅動、非阻塞I/O的Web伺服器,以達到更高的效能,提供Apache等伺服器之外的選擇。他提到,大多數人不設計一種更簡單和更有效率的程式的主要原因是他們用到了阻塞I/O的庫。寫作Node的時候,Ryan Dahl曾經評估過C、Lua、Haskell、Ruby等語言作為備選實現,結論為:
C的開發門檻高,可以預見不會有太多的開發者能將它用於日常的業務開發,所以捨棄它;
Ryan Dahl覺得自己還不足夠玩轉Haskell,所以捨棄它;
Lua自身已經含有很多阻塞I/O庫,為其構建非阻塞I/O庫也不能改變人們繼續使用阻塞I/O庫的習慣,所以也捨棄它;
而Ruby的虛擬機器由於效能不好而落選。
相比之下,JavaScript比C的開發門檻要低,比Lua的歷史包袱要少。儘管伺服器端JavaScript存在已經很多年了,但是後端部分一直沒有市場,可以說歷史包袱為零,為其匯入非阻塞I/O庫沒有額外阻力。另外,JavaScript在瀏覽器中有廣泛的事件驅動方面的應用,暗合Ryan Dahl喜好基於事件驅動的需求。當時,第二次瀏覽器大戰也漸漸分出高下,Chrome瀏覽器的JavaScript引擎V8摘得效能第一的桂冠,而且其基於新BSD許可證釋出,自然受到Ryan Dahl的歡迎。考慮到高效能、符合事件驅動、沒有歷史包袱這3個主要原因,JavaScript成為了Node的實現語言。
相關文章
- 單執行緒的 Javascript 為什麼可以非同步執行緒JavaScript非同步
- JavaScript中執行上下文和執行棧是什麼?JavaScript
- 為什麼要把玩家稱為“第四天災”?
- 為什麼說要把人工智慧習以為常化人工智慧
- python為什麼要用執行緒Python執行緒
- 為什麼不要把ZooKeeper用於服務發現?
- 為什麼要把軟體做成前後端分離?後端
- 為什麼?為什麼StringBuilder是執行緒不安全的?UI執行緒
- Promise為什麼比setTimeout先執行?Promise
- 為什麼Podman執行容器更安全?
- 為什麼redis是單執行緒的以及為什麼這麼快?Redis執行緒
- 執行緒池管理(1)-為什麼需要執行緒池執行緒
- redis為什麼用單執行緒不用多執行緒Redis執行緒
- 為什麼伺服器要在機房的託管下才能更好的執行?伺服器
- Redis為什麼是單執行緒?為什麼有如此高的效能?Redis執行緒
- [20220422]為什麼執行不報錯.txt
- 為什麼python執行效率低?原來因為它!Python
- 我為什麼不想把自己的Emacs外掛放到MELPA上?Mac
- 為什麼在 Plasma 上難以執行 EVMASM
- Redis單執行緒,為什麼速度快Redis執行緒
- 為什麼Python停止執行?該如何應對?Python
- python按f5為什麼不執行Python
- Netty是什麼,Netty為什麼速度這麼快,執行緒模型分析Netty執行緒模型
- redis是單執行緒的,為什麼這麼快Redis執行緒
- GC 為什麼要掛起使用者執行緒? 什麼愁什麼怨?GC執行緒
- MTK FAQ:為什麼在single bank的flash中要把wavetable定義為RW data
- 為什麼需要定期進行伺服器備份?伺服器
- JavaScript中的執行上下文和堆疊是什麼JavaScript
- 【JSConf EU 2018】用 JavaScript 來在客戶端上訓練和執行機器學習模型JSJavaScript客戶端機器學習模型
- 雲伺服器hkcmd.exe是什麼程式怎麼會執行伺服器
- 伺服器長期穩定執行需要注意什麼伺服器
- 海外伺服器中,路、核、執行緒是什麼意思?伺服器執行緒
- [20230921]為什麼執行計劃不再awr中.txt
- 為什麼多執行緒可以利用到多核?執行緒
- 為什麼 Random.Shared 是執行緒安全的random執行緒
- 我會手動建立執行緒,為什麼讓我使用執行緒池?執行緒
- 為什麼使用者執行緒必須對映到核心執行緒?執行緒
- 為什麼 JavaScript 的 this 要這麼用?JavaScript