安裝了啥的就不說了,百度一下有不少。javascript
Windows環境。Linux不會,全部就不說了。java
一、 hello Wordnode
node的hello Word很簡單,就一行。數據庫
console.log("Hello world");
打開記事本,寫這麼一行,而後保存關閉(文件名hello),再把擴展名(.txt)改爲.js。代碼就寫好了。函數
而後打開「運行」,輸入cmd,打開「dos窗口」好像叫命令行窗口。優化
輸入 node hello.js ,而後就能看的運行效果了。編碼
而後有幾個小問題,第一個就是編碼問題,弄很差會出現亂碼。spa
在Windows環境下,文件須要用utf8 ,若是是ansi的話,輸出漢字會出現亂碼。用記事本打開,「另存爲」能夠看到文件編碼。命令行
第二個就是執行方法太繁瑣,須要好幾個步驟,不夠「Windows」,那麼怎麼辦呢?咱們能夠用「批處理」來簡化。線程
仍是打開記事本,輸入 :
node hello.js
而後保存,仍是要改一下擴展名,此次要改爲.bat。(hello.bat)
而後咱們雙擊這個文件就能夠運行。
可是等等,怎麼窗口一閃就沒了?這是由於默認狀況下,執行完操做命令行窗口就會被關閉。因此咱們須要改進一下。
右鍵hello.bat,在彈出菜單裏選擇「編輯」,改一下代碼。
@echo off echo 開啓控制檯 :time title 如今時間是:%time%。這是node的hello Word echo 編譯 hello.js echo. node hello.js echo. echo 執行完畢 echo. pause cls goto time
簡單介紹一下,(更多批處理命令請自行百度)
pause 是暫停功能,窗口不會被關閉。
Cls是清屏。
Goto 就是傳說中的跳轉,跳到制定的位置。
保存後,咱們在雙擊運行這個批處理文件,會自動編譯hello.js,而後顯示運行結果,而後窗口不會關閉。若是咱們要修改代碼的話,能夠修改代碼,而後保存文件,而後在這個窗口裏面按任意鍵,就能夠從新編譯且運行修改後的代碼。
這樣編寫和調試就會比較簡單了。
二、 精確計時時間的問題。
通常狀況下,咱們能夠用
new Date()).getTime()
來獲得時間,這個能夠精確到毫秒,可是實際運行的時候,因爲只能16毫秒左右取一次時間,因此用這種方法只能精確到16毫秒。若是想要更精確須要用其餘方法。
爲啥要更精確呢,由於我想看看在node裏面執行一段代碼到底須要多少時間,越精確越好。好比從數據庫裏讀取數據到底要多少毫秒?執行一個函數須要多少時間?
找了一下,發現了一種方法
function time(){ var diff = process.hrtime(); return diff[0] * 1000 + diff[1] / 1e6; // nano second -> ms }
這個能夠精確到0.00000000000毫秒。
三、 運行效果
先看看(new Date()).getTime()的運行狀況,咱們來寫個死循環來看看
var i=0;var j=0; var star = (new Date()).getTime(); //普通計時 var star2 = time(); //精確計時 var star3 = time(); //精確計時 while (true){ i++;j++; var t = time() - star2; // 循環次數 通常的時間 精確的時間 每次循環須要的精確時間 var msg = i + '_' + (new Date()).getTime() + '_' + time() + '_' +t; //計算每循環100次須要的時間,運行結果可得,時間並不一致 if (j==100){ //每循環100次輸出一次 var t2 = (new Date()).getTime() - star; var t3 = time() - star3; console.log(msg + '_' + t2+ '_' + t3); //每百次用時 star = (new Date()).getTime(); star3 = time(); j=0; } else { console.log(msg); } star2 = time(); }
運行效果,對了,按「ctrl+c」能夠中止死循環。
(new Date()).getTime() 的取值,有一大串都是同樣的。
精確取值,每行都不同,精確到了小數點後7位。
而後再看一下兩次循環的時間差,這個就更厲害了,精確到了19位。並且幾乎每行數值都不同。
這是循環100次須要的時間。138毫秒。兩種計時方法在大於16毫秒的時候,偏差就比較小了,在15毫秒內。緣由仍是前者每16毫秒才能取值一次。
四、 運行效率問題
你們有沒有發現問題?只是循環了100次,就須要138毫秒,這個是否是太慢了?
每次循環也沒幹啥是呀。這個node的效率是否是有問題?
這個嘛,問題出在 console.log() 上面,每次循環都要輸出顯示,咱們能夠簡單驗證一下,把每次循環都要輸出的那一行註釋掉,只保留每100次的輸出。
這樣,循環100次須要的時間,從100多豪秒,變成了0.1毫秒到0.5毫秒,波動範圍比較大。可是這也是一千倍的差距。至於爲啥多出來個顯示功能,就變得這麼慢,我也不太清楚。
五、 CPU的使用率
話說node不是單線程串行運行的嗎?運行死循環的時候我特地看了一下CPU的使用狀況。
個人CPU比較弱,I5,6200U,雙核心四線程,顯示四個核,好吧至少算是兩個核吧。
運行後,四個核的使用率都上來了,並非預想的一核工做三核圍觀的狀況。
總使用率只有38.8%,並無火力全開。看來在Windows家庭版裏面,node的優先級並不高,沒能獲取更多的資源。
整體感受仍是挺奇怪的。只是一個簡單的循環,沒有回調函數,沒有子進程,爲啥四個核都用上了呢?
把全部的輸出都註釋掉,仍是四核都使用了,只是使用率低了一點,畢竟不用輸出了。
難道最新版的node改進了嗎,能夠利用多核心的CPU了?
仍是Windows對node進行了優化?
仍是我理解有誤。