python 和 nodejs 比較
阿新 • • 發佈:2019-01-22
包和模組管理
- 依賴包多版本管理
- python 不能直接管理,需要利用 virtualenv來分割不同的環境
- nodejs NPM 包管理,可以同時依賴不同版本的第三方模組
- 引入模組
- python 使用 from / import,不同模組同名不好區分
- nodejs 模組引入的其他模組在本模組內都有區域性有效的名字,更自由,更靈活,更方便
- 匯出模組
- python
- nodejs 直接向 exports 中新增屬性,或向 module.exports 賦值即可,並非語言級別,而是簡單的普通操作
語言本身
- 版本統一性
- python 分為 2,3 兩個大版本,互相相容性較差,很多模組需要特定python版本的模組版本,比較混亂
- nodejs 版本和API比較穩定統一,而且有NPM 相容各個版本的依賴模組,版本管理有序,很好的支援了node核心和第三方模組的版本演llj進
- 語法
- python 的確比較精煉清晰,特別是豐富的資料結構的支援,簡潔的各種運算子代替函式,可以說有豐富的語法糖
- nodejs 語言是 javascript,核心更為精簡,雖然本身資料結構和資料處理比較簡陋,但是使用 coffee-script 可以彌補,coffee-script 簡直就是 javascript 版本的 python
- 靈活性
- javascript 基於 prototype 的繼承更為靈活
- nodejs 基於事件的處理使得處處是鉤子和擴充套件點
- 可hack性
- python 不容易 hack
- javascript 非常容易hack
效能
- 都是解釋性語言
- python 缺少動態編譯JIT能力
- nodejs v8 可以 JIT 執行 javascript,效能要更好
- 併發模型
- python 需要多執行緒程式設計
- nodejs 採用非阻塞非同步I/O,做非CPU密集型應用非常高效
開發質量和效率
- 都是解釋性語言
- 都無法再編譯期進行各種檢查
- 但是 nodejs 有 javascript 語言的各種格式和語法檢查器可供使用
- 可以採用 coffee-script 開發 javascript,吸收了大量的 python 語法糖
- build system
- nodejs 有完整的build system(grunt/gulp)
- nodejs 在 web 開發資源的豐富程度、創新度、活躍度遠遠高於 python
學習成本
- 如果只有精力學習一門語言
- 很定是 javascript,因為至少瀏覽器前端需要js
- js 語言核心更小,更精煉,更多的語法糖和功能是通過模組或庫提供
- nodejs 本身就可以用作生產web伺服器,而 python 至少前面需要 nginx 代理
- 環境準備
- 在 windows 預設沒有python環境,但是卻可以在瀏覽器中偵錯程式console中練習 javascript
非同步程式設計框架比較
- javascript 的 nodejs 和 python 的 tornado 比較
角度 | nodejs (javascript) |
tornado (python) |
---|---|---|
語言本身效能 | v8引擎效能很好 | python 直譯器效能較差 |
IO效能 | 使用epoll等高效IO機制,效能好 | 使用epoll等高效IO機制,效能好 |
生態圈 | nodejs各個版本和外圍模組版本匹配好 | python存在各種版本的相容性問題, 也不易整合第三方模組 |
跨平臺 | nodejs在x86/arm/power/sparc都支援 | python 由於大量使用c/c++模組,跨平臺較差 |
其他類似點
方面 | nodejs (javascript) |
tornado (python) |
---|---|---|
包管理器 | npm | pip |
平臺多版本管理器 | n | virtualenv |
程序監控器 | pm2 | supervisor |