拒絕 Python、C 和 Go,我只用 Node.js!

拒絕 Python、C 和 Go,我只用 Node.js!

Node.js 實在是太強大了,遠遠不止運行網站那麼簡單。

拒絕 Python、C 和 Go,我只用 Node.js!

我要寫很多腳本。很多很多腳本。許多時候只是因為許多任務太複雜,或者量太大,以致沒法手工完成。所以任何需要花時間的任務我都會寫腳本。腳本不僅能減少錯誤,還能提高效率。我常說的一句話就是:

如果一件事情要做兩次,那就寫個腳本吧。

一些常見的任務有:

  • 從巨大的數組中找出匹配的字符串,或者某個值。
  • 刪掉所有滿足某些條件的一些值。
  • 比較 x 和 y 然後輸出 z。

我知道大多數程序員都認為 Python,甚至 C# 和 Go 更適合這些任務,但我一直都選擇 Node.js 的理由有三個。

1.不會阻塞 I/O

默認情況下,Node.js 可以讀取文件、解析內容放入數據庫,再將新內容寫入文件,這一切幾乎都不需要思考。雖然 Python 和其他類似的語言可以通過庫函數實現異步的能力,但默認情況下 Python 不是異步的,必須等一個函數執行完成後才能執行下一個函數。

Node.js 就沒有這個問題,因為它的設計目標就是處理 Web 上連續不斷的請求,而且它的設計是一切皆在後臺處理(如文件訪問、郵件等等)。

這個特點非常適合我的任務——我經常需要從我的研究對象中提取信息,然後保存到數據庫中供以後使用。這樣做還可以持久保存數據,同時釋放內存,因為內存中不需要保留整個數組也可以調用數據庫中的信息,操作、修改數據,所有這一切都在後臺執行,所以可以在數據庫中存儲更多的信息。

I/O 請求也可以放在單獨的線程中執行,與 Node.js 的主線程獨立。也就是說,讀取特別大或者讀取困難的文件不會影響到主程序的性能(除了不能立即獲取文件內容)。

2.自給自足

在編寫只需使用幾次的臨時腳本時,代碼優化並不重要。重要的是把代碼寫出來並運行。而負責運行 Node.js 的 V8 引擎(C++)正好能派上用場。

如果你只能將數組放到內存中操作,那麼當數組非常非常大時,你會擔心機器的狀態和使用的內存量。幸運的是,V8 能通過自動垃圾回收來處理這一切。

也就是說,一塊信息不再使用之後(比如從數組中刪除掉的信息),其內存會自動被清除,然後在下次垃圾回收時被釋放。儘管垃圾回收的檢查和回收過程很複雜,但至少我可以專注於編寫我的代碼,而不用擔心內存管理等,可以放心地把這一切交給 V8 來處理。

3.交互式結果怎麼辦?

一方面 Node.js 的目標之一就是運行網站。而另一方面我需要顯示腳本結果或者將其發給別人,比如讓別人也能查看運行結果甚至能夠修改腳本的運行參數,所以我可以利用 Node.js 的真正的目標來實現這一需求。

Node.js 可以通過模板語言很容易地將結果直接放到服務器上。我使用的模板引擎是 EJS,因為它跟腳本一樣非常直觀。這是典型的“只做一件事並且做好一件事”的例子。

我知道其他腳本語言也能運行網站,而且也非常容易(比如 Python),但能在同一個腳本中編寫邏輯代碼並提供結果,而無需離開 Node.js 的生態系統,還是很有誘惑的。

以上就是我幹什麼都是用 Node.js 的理由。不論是構建網站,訪問數據庫還是編寫腳本來自動處理文件,我都會默認選擇 Node.js。在此也推薦你也試試用 Node.js 寫個腳本。

原文:https://medium.com/@kieranmaher13/why-i-use-nodejs-for-basically-everything-i-do-e0a627787ecc

“徵稿啦!”

CSDN 公眾號秉持著「與千萬技術人共成長」理念,不僅以「極客頭條」、「暢言」欄目在第一時間以技術人的獨特視角描述技術人關心的行業焦點事件,更有「技術頭條」專欄,深度解讀行業內的熱門技術與場景應用,讓所有的開發者緊跟技術潮流,保持警醒的技術嗅覺,對行業趨勢、技術有更為全面的認知。

如果你有優質的文章,或是行業熱點事件、技術趨勢的真知灼見,或是深度的應用實踐、場景方案等的新見解,歡迎聯繫 CSDN 投稿,聯繫方式:微信(guorui_1118,請備註投稿+姓名+公司職位),郵箱([email protected])。


分享到:


相關文章: