1. 程式人生 > >python 和 nodejs 比較

python 和 nodejs 比較

包和模組管理

  • 依賴包多版本管理
    • 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