<<深刻淺出nodeJS>>讀書筆記--<一>

   前語:nodeJs這書早在五月份的時候就已經買了,那時候纔剛剛接觸node,本想着這書應該是node入門級比較系統化的書,可翻了幾頁以後呢,發現好多地方都晦澀難懂,特別是看到內建模塊的C++實現時,瞬間有想瞌睡的感受....-_-從這以後,這書一直被我閒置在書桌角落,再無動過,看書學習node的想法就這樣放棄了,轉爲上網學習基礎的語法API..就這樣,邊看API邊跟着作一些小例子,慢慢的,發現基本的API用法都已經掌握了,因而,去搜搜與node有關的一些技術博客,但願可以進階去了解node。開始去嘗試用node作一些完整的小例子,好比簡單的博客實現,聊天室...就這麼過了兩個月左右,發現對node的瞭解基本上已經算是有了一個全面大體的認識了,全部的知識點都瞭解得差很少了,因而開始着手去實現一個簡單的訂餐app,在此以前,爲了可以強化全部知識點以便順利完成服務器端的編寫,再一次翻開了那本稍有些許灰塵的<<深刻淺出nodeJs>>,這一次,沒有了初次的那種陌生羞澀感,有的只是對現有知識體系的擴充與強化,那麼,我將用本身的語言來將這本書中的重要知識點一一記下來....javascript

   第一章  概述前端

   node的起源及基本做用java

   node的特色:node

    一、異步I/O  (發送請求與處理請求互不干擾)linux

$.POST(URL,function(data){
    console.log('成功收到');
})
   console.log('發送成功');

    二、事件與回調函數(node是事件驅動的)c++

 var http = require('http');
 http.createServer(function(req,res){
     var postData = "";
     req.setEncoding('url8');
     req.on('data',function(trunk){
          postData += trunk;
     });  
     req.on('end',function(){
           res.end(postData);
    });
}).listen(8080);
console.log('服務器正在運行');

    三、單線程npm

     優點:資源合理分配利用,避免了多線程上下文切換時的開銷,性能更佳json

     劣勢:後端

     - 沒法利用多核CPU數組

     - 單一線程某處一旦出現錯誤,將致使整個線程退出

     - 大量計算佔用CPU致使沒法繼續調用異步I/O

    四、共享平臺 (linux和window)

   node的應用場景:

     一、I/O密集型

     二、分佈式應用

   第二章  模塊機制

    node是基於javascript,而javascript自己又是有許多先天不足的,並且它的使命是爲了服務客戶端,對於服務器端的支持 (模塊系統,標準庫,標準接口,缺少包管理系統),簡直就是不了了之,根本就不在乎.好在,CommonJS規範面世了,它的使命就是 但願Javascript可以在任何地方運行.

   commonJS對模塊的定義有三個部分,分別是:一、模塊引用  二、模塊定義  三、模塊標識

   -require 

   -exports 

   -module 

    一、模塊引用:     

var math = require ('math');

    二、模塊定義:

//math.js
exports.add = function (){
     var sum = 0;
     while (sum < 10){
        sum += 1;
   }
  return sum;
 } 

    而後經過,require來引入模塊,就能夠調用定義的屬性和方法了.require == exports   

    三、模塊標識:

    傳遞給require方法的參數 , 字符串或路徑

   2.2 Node的模塊實現

   在Node中引入模塊,經歷三個步驟:

   (1) 路徑分析

   -- 核心模塊 , fs http 

   -- 文件模塊 , .或者..開始的相對路徑文件模塊

   -- 以/開頭的絕對路徑模塊

   -- 非路徑形式的內建模塊,如自定義的connect模塊

   (2) 文件定位

   -- 按路徑

   -- 按後綴名, .js 、.node 、.json

   (3) 編譯執行

   -- javascript 核心模塊,經歷標識符分析後,直接定位到內存中,比普通的文件模塊從磁盤中查找要快得多

   -- c++內建模塊,二進制、數組、內存,使用Binding()方法來協助加載內建模塊

    如何編寫: NODE_MODULE()最底層  --> process.binding 定義到內存中

    如何導出:層級依賴關係,內建c++    -->   核心模塊Javascript  -->  文件模塊

   2.3 包與NPM

   模塊組織代碼,包組織模塊

   package.json描述文件,dependencies:依賴的包列表

   發佈包, npm publish <folder> 

   2.4 先後端共用模塊

  先後端模塊的側重點不一樣。前端須要重服務器加載,用到了異步加載模塊,後端的模塊都存在本地,用到了同步加載。

  CommodJs規範:同步模式,適用後端

  AMD規範:異步模式,適用前端

  CMD規範:國人自創,前二者的結合體,加載和定義相似AMD,模塊導出和引入接近CommonJs規範的定義

  兼容多種規範的定義:

  爲了讓同一模塊能夠在先後端運行,實現以下:

// 將hello 方法定義到不一樣的運行環境中
(function(name,definition){ // 檢測上下文環境是不是 AMD 或者 CMD var hasDefine = typeof define === 'function'; // 檢測上下文環境是不是Node var hasExports = typeof module !=='undefined' && module.exports; if(hasDefine){ // AMD CMD define(definition); }else if(hasExports){ // Node module.exports = definition(); }else{ // 將模塊的執行結果掛在window變量中,在瀏覽器中this指向window對象 this[name] = definition(); } })('hello',function(){ var hello = function(){} return hello; });
相關文章
相關標籤/搜索