[筆記] Django vs. Express
這篇並不是甚麼專業深度的比較文,而是沿著上篇,繼續來比較目前較火熱的 web framework,並做點個人紀錄與心得 ,但其實這兩個框架應該是沒辦法直接比較的(而且直接從上圖來看,這兩者在社群資源上其實也不分軒輊,各有各自的廣大擁護者)。畢竟使用的語言分別是 Python 、Node.js ,所以若要比較應該從這兩語言切入會比較妥當。
而這兩語言特性應該也不用多介紹了,直接來比較它們的優勢跟適合用途:
Node.js優勢:
- Nodejs 基於 Javascript 語言,使用者不用再單獨新學一門陌生的語言,從而減低了學習的門檻。
- 以目前最快的瀏覽器內核 V8 做為執行引擎,保證了 Nodejs 的性能和穩定性。
- Nodejs 為單線程機制且異步編程,讓 Nodejs 十分適合處理 IO 密集型任務。
Python優勢:
- 可以訪問底層語言,如 C/C++ DLL/so,Java類庫,.net 等,所以可用於整合舊有系統。
- 為高階物件導向語言,語法直觀易於學習。
- 在 CPU 密集的處理上效能比 Node.js 高。
何時使用 Node.js ?
先前提到,由於 Node.js 是基於 Chrome 的 V8,所以擁有高效執行速度。且使用事件驅動的非阻塞 I/O 模型,使其成為開發資料密集型實時應用程式的理想選擇。
但若要處理 "CPU 密集" 與 "內存需求高" 的任務時,Node.js效能就比較差了,這邊直接截錄一下來源
但若是開發訊息傳遞或聊天應用程式時,使用 Node.js 是個理想的解決方案。
最適合 Node.jS 的應用程式:
I/O
繫結應用程式- 資料流應用程式
- 資料密集型實時應用(DIRT)
- 基於 JSON API 的應用程式
- 單頁應用程式
何時使用 Python?
Python 擁有一個開源資料分析工具庫,Web 框架和測試工具。因此,它的生態系統是任何程式設計社群中最大的一個。而且非常適合用於機器學習、數據分析等計算密集/CPU密集等任務。
最適合 Python 的應用程式
小結:
了解以上幾點特性後,稍稍來小結一下,Node.js 應較適合小型且應用於Web的專案,理由是 V8引擎本身執行效率就好,再搭配本身的異步處理特性,在處理效能上沒話說。但是 Javascript 語法本身較無結構性,且較不直觀(相較於Python),所以在大型的專案上 Python 應該還是略勝一籌的。
再來就能比較 Express 與 Django 框架了,一樣與上篇的結論雷同, Django 本身相關資源夠多,許多輪子都造好了,而且Python語法簡單明瞭,在大型專案上使用它會有一定的方便性。而 Node.js 本身有 Callback 、異步處理的特性,雖不難理解,但還是需花點時間上手,但比起一樣是異步處理的 Tornado ,其社群與套件資源來的豐富許多,所以兩者在選擇上應該以專案的特性而定。
再來我認為還可以考慮的一個點是 Django 本身是依賴 ORM 的,通常搭配的 Database 也是 RMDBS ,而 Express 通常搭配的是 MongoDB ,當然也是有套件可以支持 Django + MongoDN 、Express + RMDBS ,但兩者在效能與處理上有沒有差異就可能要另外深入探討了。