第一章 node簡介
在學習這章之前,先提三個問題,node是什麼,爲什麼用node,node可以用來幹什麼?
首先是回答第一個問題,node是什麼?
node習慣稱爲nodejs,聽起來類似於js庫,但是其實node並不是一個庫,node其實是一個可以在後端運行JavaScript的環境。
js爲什麼可以在後端運行呢,不是只可以在瀏覽器運行嗎?其實是js之所以可以再瀏覽器運行是因爲在瀏覽器中集成了js解析引擎,類似Firefox的SpiderMonkey和IE的Chakra,其中最有名的當屬於chrome的v8引擎,而node便是利用到了v8引擎,所以纔可以在服務器端跑js,當如正如你所想的,因爲node並沒有渲染引擎,所以node是不處理UI的。
那爲什麼要用node?
作爲一個後端js的運行平臺,node要好用纔會用啊,喏,如下:
- 異步IO:其實就是異步執行的IO操作,不用多說
- 單線程:node是單線程運行的,所以不用考慮多線程地帶來的同步啊、死鎖之類的問題,但同時會帶來一些問題,比如無法充分的利用多核CPU、一旦報錯,程序就GG、CPU過載就會出異常等,對於這些問題,node也有一個簡單的解決辦法就是child_process,這個暫時先不談
- 跨平臺:作爲一個後臺運行平臺,這是JavaScript浩浩蕩蕩進軍後臺之勢,當然也要像後臺爸爸Java一樣跨平臺纔好用哈
- 事件與回調函數:node是基於事件驅動的,基於事件編程有輕量級、輕耦合、只關注事務點等優勢,其實就是更關注業務邏輯,畢竟是前端
最後的問題,node可以用來幹什麼
如上的node優勢所說,一方面,node基於異步IO的特點,node擅長於處理IO密集型業務,另一方面,V8是十分強大的,所以node也很適合CPU密集型業務,而且效率不比java差哈,同時,node也比較適合於做一些遊戲開發領域的事情、做分佈式應用和一些工具類應用的開發
第二章 node模塊機制
node模塊機制
關於node的模塊機制,首先提一下CommonJS,CommonJS就是爲JS的表現來制定規範,因爲js沒有模塊的功能所以CommonJS應運而生,它希望js可以在任何地方運行,不只是瀏覽器中。CommonJS的模塊規範如下
//a.js
exports.yeah = function () {
console.log('yeah')
}
//b.js
var yeah = require('yeah')
在文件a中通過exports暴露出去一個yeah方法,然後在b.js文件中通過require引用,十分方便,但是CommonJS的缺陷還是很明顯的,沒有模塊系統,標準庫很少,沒有標準的接口,缺乏包管理系統等。
作爲站在巨人肩膀上的node,node在實現中並非完全按照CommonJS的模塊規範,而是對模塊規範進行了一定的取捨,同事也增加了不少自身需要的特性。
node的模塊分爲兩類,一種是Node提供的模塊,叫做核心模塊;一種是用戶自己編寫的模塊,叫做文件模塊
核心模塊被編譯成二進制執行文件,在node啓動時就被直接加載到內存中,所以執行速度最快,文件模塊則是運行時加載,按照路徑分析 –> 文件定位 –> 編譯執行 的步驟加載執行
node有自己的包規範NPM,npm是什麼,npm是一個包管理的神器,這個真的不能多說,每天都用
前後端共用模塊
前後端共用模塊主要有兩種,AMD和CMD
AMD 即Asynchronous Module Definition,中文名是異步模塊定義的意思。它是一個在瀏覽器端模塊化開發的規範,由於不是JavaScript原生支持,使用AMD規範進行頁面開發需要用到對應的庫函數,也就是大名鼎鼎RequireJS,實際上AMD 是 RequireJS 在推廣過程中對模塊定義的規範化的產出
requireJS主要解決兩個問題
- 多個js文件可能有依賴關係,被依賴的文件需要早於依賴它的文件加載到瀏覽器
- js加載的時候瀏覽器會停止頁面渲染,加載文件越多,頁面失去響應時間越長
看一個使用requireJS的例子
// 定義模塊 myModule.js
define(['dependency'], function(){
var name = 'Byron';
function printName(){
console.log(name);
}
return {
printName: printName
};
});
// 加載模塊
require(['myModule'], function (my){
my.printName();
});
CMD由國內的玉伯提出,CMD模塊更接近於Node對CommonJS的實現,CMD和AMD有什麼區別,看下玉伯是怎麼回答的吧https://www.zhihu.com/question/20351507/answer/14859415
第三章 異步IO
異步IO真心沒啥可提的,需要知道的是異步IO實現的核心是事件循環(過去是輪詢技術),他與瀏覽器中的執行模型基本保持了一致。
前端新手,弱雞一枚,如有錯誤,請指正,謝謝!