運行在 Chrome 的 V8 引擎中, 性能很高css
高性能 web 服務器前端
前端構建/前端工程化(搭環境)node
Electron (VScode, Atom)es6
常見的 輸入-輸出 模型web
同步I/O
當文件讀取徹底結束時返回內容npm
傳統方式
一個文件徹底讀取執行完成後, 再讀取下一個json
for(var i = 0; i < 10; i++) { var content = readFile(i + '.txt') }
優化方式(C/C++)
全部文件同時讀取, 哪一個先讀取完, 哪一個先執行
select 函數是系統自帶的一個函數, 會在所傳入參數數組中的任何一個元素準備好時進行返回前端工程化
var conn1 = connect() var conn2 = connect() var conn3 = connect() while(true){ var readyConns = select([conn1, conn2, conn3]) for(var readyConn of readyConns) { var data = read(readyConn) var result = process(data) Write(readyConn, result) } }
異步I/O(node.js)
腳本在讀寫設備的同時繼續執行, 並在任務完成時調用回調函數
其實是經過多個線程實現的, 只不過多線程相對隱藏, 只可以應用相應接口進行調用數組
fs.readFile('a.txt', (err, data) => { }) console.log(1)
執行JS文件瀏覽器
$ node hello.js(文件名)
交互式控制檯(REPL)
$ node > 1 + 1 2 > .help // 一些常見幫助信息(break/clear/editor/exit/load/save) $
命令行參數
process.argv能夠獲取傳遞給腳本的命令行參數
showargv.js中只包含一條console.log(process.argv)語句
$ node showargv.js one --and two ["node", "/home/margin/showargv.js", "one", "--and", "two"]
調試
在瀏覽器中調試
$ node --inspect-brk hello.js
運行完命令,打開Chrome的控制檯點擊node圖標便可
brk使命令暫停在第一行,可不加
node並無在全局做用域中添加不少功能, 多數功能都是經過調用 require 函數從模塊中獲取的
若是 x 看起來不像一個路徑
在當前文件夾的 node-modules 文件夾裏查找名爲 x 的文件夾
若是在當前文件夾的 node-modules 裏找不到名爲 x 的文件夾
chunk1 = require('lodash').chunk // 加載了整個 lodash , 只把 chunk 讀取了出來 chunk2 = require('lodash/chunk') // 只加載了 lodash 中的 chunk.js 文件
$ npm install figlet $ npm i figlet//install和global能夠縮寫 $ npm i -g figlet