拒絕 Python、C#和Go,我只用 Node.js!
Node.js 實在是太強大了,遠遠不止運行網站那麼簡單。
我要寫很多腳本。很多很多腳本。許多時候只是因為許多任務太複雜,或者量太大,以致沒法手工完成。所以任何需要花時間的任務我都會寫腳本。腳本不僅能減少錯誤,還能提高效率。我常說的一句話就是:
如果一件事情要做兩次,那就寫個腳本吧。
一些常見的任務有:
從巨大的數組中找出匹配的字元串,或者某個值。
刪掉所有滿足某些條件的一些值。
比較 x 和 y 然後輸出 z。
我知道大多數程序員都認為 Python,甚至 C# 和 Go 更適合這些任務,但我一直都選擇 Node.js 的理由有三個。
不會阻塞 I/O
默認情況下,Node.js 可以讀取文件、解析內容放入資料庫,再將新內容寫入文件,這一切幾乎都不需要思考。雖然 Python 和其他類似的語言可以通過庫函數實現非同步的能力,但默認情況下 Python 不是非同步的,必須等一個函數執行完成後才能執行下一個函數。
Node.js 就沒有這個問題,因為它的設計目標就是處理 Web 上連續不斷的請求,而且它的設計是一切皆在後台處理(如文件訪問、郵件等等)。
這個特點非常適合我的任務——我經常需要從我的研究對象中提取信息,然後保存到資料庫中供以後使用。這樣做還可以持久保存數據,同時釋放內存,因為內存中不需要保留整個數組也可以調用資料庫中的信息,操作、修改數據,所有這一切都在後台執行,所以可以在資料庫中存儲更多的信息。
I/O 請求也可以放在單獨的線程中執行,與 Node.js 的主線程獨立。也就是說,讀取特別大或者讀取困難的文件不會影響到主程序的性能(除了不能立即獲取文件內容)。
自給自足
在編寫只需使用幾次的臨時腳本時,代碼優化並不重要。重要的是把代碼寫出來並運行。而負責運行 Node.js 的 V8 引擎(C++)正好能派上用場。
如果你只能將數組放到內存中操作,那麼當數組非常非常大時,你會擔心機器的狀態和使用的內存量。幸運的是,V8 能通過自動垃圾回收來處理這一切。
也就是說,一塊信息不再使用之後(比如從數組中刪除掉的信息),其內存會自動被清除,然後在下次垃圾回收時被釋放。儘管垃圾回收的檢查和回收過程很複雜,但至少我可以專註於編寫我的代碼,而不用擔心內存管理等,可以放心地把這一切交給 V8 來處理。
互動式結果怎麼辦?
一方面 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
作者:Kieran Maher
譯者:彎月,責編:屠敏
※從 Eclipse到IDEA,就像從金字塔到太空堡壘!
※微軟曾經的二號人物永遠地離開了
TAG:CSDN |