国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Node.js知識點詳解(一)基礎部分

whjin / 592人閱讀

摘要:基礎的端到端的基準測試顯示大約比快八倍。所謂單線程,就是指一次只能完成一件任務。在服務器端,異步模式甚至是唯一的模式,因為執行環境是單線程的,如果允許同步執行所有請求,服務器性能會急劇下降,很快就會失去響應。

模塊

Node.js 提供了exportsrequire 兩個對象,其中 exports 是模塊公開的接口,require 用于從外部獲取一個模塊的接口,即所獲取模塊的 exports 對象。
接下來我們就來創建hello.js文件,代碼如下:

exports.world = function() {
  console.log("Hello World");
}

在以上示例中,hello.js 通過 exports 對象把 world 作為模塊的訪問接口,在 main.js 中通過 require("./hello") 加載這個模塊,然后就可以直接訪 問main.jsexports 對象的成員函數了。

require方法接受以下幾種參數的傳遞:

http、fs、path等,原生模塊。
./mod或../mod,相對路徑的文件模塊。
/pathtomodule/mod,絕對路徑的文件模塊。
mod,非原生模塊的文件模塊。

我們以計算圓的周長和面積的兩個方法為例:

var PI = Math.PI;
exports.area = function (r) {
    return PI*r*r;
};//exports 是對象,向外提供了area方法接口
 
exports.circumference = function (r) {
    return 2*PI*r;
};

以上保存為circle.js,下方通過require調用模塊:

var circle = require("./circle.js");//require通過引入模塊文件,找到exports對象提供的接口
console.log("The area of a circle of radius 4 is " + circle.area(4));

編寫稍大一點的程序時一般都會將代碼模塊化。在NodeJS中,一般將代碼合理拆分到不同的JS文件中,每一個文件就是一個模塊,而文件路徑就是模塊名。

在編寫每個模塊時,都有require、exports、module三個預先定義好的變量可供使用。
模塊名可使用相對路徑(以./開頭),或者是絕對路徑(以/或C:之類的盤符開頭)。另外,模塊名中的.js擴展名可以省略。

模塊化的優缺點:
a>優點:
可維護性
1.靈活架構,焦點分離
2.方便模塊間組合、分解
3.方便單個模塊功能調試、升級
4.多人協作互不干擾
可測試性
1.可分單元測試

b>缺點:
性能損耗
1.系統分層,調用鏈會很長
2.模塊間通信,模塊間發送消息會很耗性能
Node.js常用模塊和組件
 包管理 Package Management: NPM 
 框架 Framework: ExpressJS 
 模板 Template: Jade 
 中間件 Middleware: Connect 
 WebSocket: Socket.io 
 數據庫 Database: Mongo DB (選了個自己喜歡的) 
 Mongoose (as a MongoDB ORM) 
 調錯 Debugging: Node Inspector 
 測試 Test: Mocha + should.js 
 控制無止境的內嵌回調 (Control the Callback flow): Async
Node.js可以做什么? Web開發:Express + EJS + Mongoose/MySQL
express 是輕量靈活的Nodejs Web應用框架,它可以快速地搭建網站。
Express框架建立在Nodejs內置的Http模塊上,并對Http模塊再包裝,從而實際Web請求處理的功能。

ejs是一個嵌入的Javascript模板引擎,通過編譯生成HTML的代碼。

mongoose 是MongoDB的對象模型工具,通過Mongoose框架,可以進行訪問MongoDB的操作。

mysql 是連接MySQL數據庫的通信API,可以進行訪問MySQL的操作。

通常用Node.js做Web開發,需要3個框架配合使用,就像Java中的SSH。

Web聊天室(IM):Express + Socket.io

socket.io一個是基于Nodejs架構體系的,支持websocket的協議用于時時通信的一個軟件包。socket.io 給跨瀏覽器構建實時應用提供了完整的封裝,socket.io完全由javascript實現。

Web爬蟲:Cheerio/Request

cheerio 是一個為服務器特別定制的,快速、靈活、封裝jQuery核心功能工具包。Cheerio包括了 jQuery核心的子集,從jQuery庫中去除了所有DOM不一致性和瀏覽器不兼容的部分,揭示了它真正優雅的API。Cheerio工作在一個非常簡 單,一致的DOM模型之上,解析、操作、渲染都變得難以置信的高效。基礎的端到端的基準測試顯示Cheerio大約比JSDOM快八倍(8x)。 Cheerio封裝了@FB55兼容的htmlparser,幾乎能夠解析任何的 HTML 和 XML document。

Web博客:Hexo

Hexo 是一個簡單地、輕量地、基于Node的一個靜態博客框架。通過Hexo我們可以快速創建自己的博客,僅需要幾條命令就可以完成。

發布時,Hexo可以部署在自己的Node服務器上面,也可以部署github上面。對于個人用戶來說,部署在github上好處頗多,不僅可以省 去服務器的成本,還可以減少各種系統運維的麻煩事(系統管理、備份、網絡)。所以,基于github的個人站點,正在開始流行起來….

前端包管理平臺: bower.js

Bower 是 twitter 推出的一款包管理工具,基于nodejs的模塊化思想,把功能分散到各個模塊中,讓模塊和模塊之間存在聯系,通過 Bower 來管理模塊間的這種聯系。

單線程

javascript語言的執行環境是"單線程"(single thread)。
所謂"單線程",就是指一次只能完成一件任務。如果有多個任務,就必須排隊,前面一個任務完成,再執行后面一個任務,以此類推。

這種模式的好處是實現起來比較簡單,執行環境相對單純;壞處是只要有一個任務耗時很長,后面的任務都必須排隊等著,會拖延整個程序的執行。常見的瀏覽器無 響應(假死),往往就是因為某一段Javascript代碼長時間運行(比如死循環),導致整個頁面卡在這個地方,其他任務無法執行。

大部分 Web 應用的瓶頸都在 I/O, 即讀寫磁盤,讀寫網絡,讀寫數據庫。使用怎樣的策略等待這段時間,就成了改善性能的關鍵點

同步與異步

為了解決這個問題,Javascript語言將任務的執行模式分成兩種:同步(Synchronous)和異步(Asynchronous)。

"同步模式"就是上一段的模式,后一個任務等待前一個任務結束,然后再執行,程序的執行順序與任務的排列順序是一致的、同步的;"異步模式"則完全不同, 每一個任務有一個或多個回調函數(callback),前一個任務結束后,不是執行后一個任務,而是執行回調函數,后一個任務則是不等前一個任務結束就執 行,所以程序的執行順序與任務的排列順序是不一致的、異步的。

"異步模式"非常重要。在瀏覽器端,耗時很長的操作都應該異步執行,避免瀏覽器失去響應,最好的例子就是Ajax操作。在服務器端,"異步模式"甚至是唯一的模式,因為執行環境是單線程的,如果允許同步執行所有http請求,服務器性能會急劇下降,很快就會失去響應。

進程與線程

mac系統中的進程與線程

從圖中我們可以看出,一個進程可以包括多個線程,進程就好比工程里的車間,線程就是這個車間的工人,在引入線程的操作系統中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調度的基本單位。由于線程比進程更小,基本上不擁有系統資源,故對它的調度所付出的開銷就會小得多,能更高效的提高系統內多個程序間并發執行的程度。

區別

線程和進程的區別在于,子進程和父進程有不同的代碼和數據空間,而多個線程則共享數據空間,每個線程有自己的執行堆棧和程序計數器為其執行上下文。多線程主要是為了節約CPU時間,發揮利用,根據具體情況而定。線程的運行中需要使用計算機的內存資源和CPU。

模塊和包 模塊

模塊:一個實現某些特定功能的文件,以實現模塊化編程。通過require(模塊名)引入模塊.
—模塊中的功能(如:變量,函數)通過賦給exports對象的某個屬性提供給調用者使用。

模塊是可重用的代碼庫。比如用來與數據庫交互的模塊、支持web開發的模塊以及通過web套接字協助通信的模塊

如何使用模塊?

在Node中使用模塊是非常方便的,在 JavaScript 代碼中可以直接使用全局函數 require() 來加載一個模塊。例如,我們可以使用require("http")來加載node中自帶的http服務器模塊,

包是一個文件夾,它將模塊封裝起來,用于發布、更新、依賴管理和版本控制。通過package.json來描述包的信息:入口文件,依賴的外部包等等。通過npm install命令來安裝包,并通過require使用包。

package.json

在開發Node.js應用程序的時候,一個一個模塊的安裝顯然很耗時,又或是忘了安裝某個模塊怎么辦?npm允許開發人員使用package.json文件來指定在應用程序中要用的模塊,并且通過單個命令來安裝它們:

npm install

package.json文件僅包含以特定格式表示的項目信息。一個最小的package.json文件會是這樣:

{
    "name" : "example 1",
    "version": "0.0.2",
    "dependencies":{
       "underscore":"~1.2.1"
    }
}

使用package.json文件意味著我們無需記憶應用程序會依賴于哪些模塊,其他開發人員會發現,可以很簡單地安裝你的應用程序

npm install 安裝nodejs的依賴包
npm install  -g  將包安裝到全局環境中
npm install  --save  安裝的同時,將信息寫入package.json中
npm init  會引導你創建一個package.json文件,包括名稱、版本、作者這些信息等
npm remove 移除
npm update 更新 
Package.json的屬性
name - 包的名稱

version - 包的版本

description - 包的描述

homepage - 包主頁

author - 包的作者

contributors - 貢獻者到包的名字

dependencies - 依賴關系的列表。NPM自動安裝所有在這里的包node_module文件夾中提到的依賴關系。

repository - 包的庫類型和URL

main - 包的入口點

keywords - 關鍵字

npm install module-name -save 自動把模塊和版本號添加到dependencies部分
npm install module-name -save-dve 自動把模塊和版本號添加到devdependencies部分
異步式 I/O 與事件驅動

Node.js 的異步機制是基于事件的,I/O 是輸入輸出的意思,指的是計算機和人或者數據處理系統之間的通信。可以將I/O 想成是數據在一次輸入和一次輸出之間的移動。

每一個 I/O就是一次請求,所有的磁盤 I/O、網絡通信、數據庫查詢都以非阻塞的方式請求,返回的結果由事件循環來處理。如下圖所示:

Node.js 進程在同一時刻只會處理一個事件,完成后立即進入事件循環檢查并處理后面的事件。這樣做的好處是,CPU 和內存在同一時間集中處理一件事,同時盡可能讓耗時的 I/O 操作并行執行

開始node編程

在這里,我推薦大家使用webstorm進行node.js的開發,方便又快捷,比起cmd,或者Mac下的終端都好用太多了。

至于node的安裝大家就自行百度吧,這里就不贅述了,看下webstorm下的node編程界面吧:
我們只需要在編寫好的node代碼界面按鼠標右鍵,然后點擊Run就行啦,方便又快捷吧

下面是node的輸出界面:

Mac系統下進行web開發,我推薦大家使用的三款工具是:coda2這些是目前我已經的最好的開發工具了,大家不妨試試哪個更符合自己的口味。

webstorm進行node開發需要先配置一定的文件,大家就自行百度吧,因為我的webstorm已經配置好了,所以沒法截圖給大家看步驟了,大概步驟是,在mac系統下是先點擊頂部欄的webstorm,然后點擊perference,然后點擊Node.js and NPM,然后在右側點擊configure配置,最后大概會是下面這個樣子:

windows系統下和這個流程步驟大概相似啊,我使用的版本是8.0.4的。

全局變量

在js編程中,我們最好給每個變量都添加上var關鍵字,以免污染全局命名空間,提高代碼的耦合風險。

console

console用于向標準輸出流standout(stdout)和標準錯誤流(stderr)輸出字符。

console.log()向標準輸出流打印字符并以換行符結束,其接受多個參數,將以類似C語言的printf()格式輸出

console.log(__dirname)輸出文件目錄

計算代碼運行時間

    console.time(label)
    console.timeEnd(label)

我們只需在開始和結束那里給同樣一個標簽即可,中間放你想要計算執行時間的任何代碼。

__filename__dirname
    console.log(__filename);// /Users/hwax/Desktop/My Project/avalon/hello.js
    console.log(__dirname);// /Users/hwax/Desktop/My Project/avalon

__filename:開發期間,該行代碼所在的文件。
__dirname:開發期間,該行代碼所在的目錄。
path.join([path1],[path2],[...])
合并參數得到一個標準化的路徑字符串

path.join("/foo", "bar", "baz/abc")
// returns
"/foo/bar/baz/abc"  
運行hello world程序

首先在終端輸入:

trigkit4:~ trigkit4$ vi index.js

進入vim后輸入i,進入編輯模式,然后輸入:

var http = require("http");
http.createServer(function(req,res){
        res.writeHead(200,{"Content-Type":"text/plain"});
        res.end("Hello World
");
}).listen(8124,"127.0.0.1");
console.log("Server running at http://127.0.0.1:8124/");

然后按ESC,退出編輯模式,輸入:w保存,再輸入:q退出

然后接著在終端輸入如下命令:

trigkit4:~ trigkit4$ node index

可以看到終端輸出了:

Server running at http://127.0.0.1:8124/

然后打開瀏覽器,輸入地址即可看到輸出hello world

Node.js包目錄

一般一個Node.js的包的根目錄結構如下:

 .gitignore —— 從git上忽略的文件清單
 .npmignore —— 不包括npm注冊庫中的文件清單
 LICENSE —— 包的授權文件
 README.md —— 以markdown格式編寫的readme文件
 bin —— 保存包可執行文件的文件夾
 doc —— 保存包文檔的文件夾
 examples —— 保存如何使用包的實例文件夾
 lib —— 保存包代碼的文件夾
 man —— 保存包的手冊頁的文件夾
 package.json —— 描述包的json文件
 src —— 保存C/C++源文件的文件夾
 deps —— 保存包所用到的依賴文件夾
 test —— 保存模塊測試的文件夾
 index.js —— 包的入口文件

 "scripts": {//“scripts”是一個由腳本命令組成的hash對象,他們在包不同的生命周期中被執行。key是生命周期事件,value是要運行的命令。
        "test": "node ./libuv/test.js"
      },
"main": "index.js",//包的入口文件,如不指定,則為根目錄下的index.js

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/87656.html

相關文章

  • 面試寶典

    摘要:有談談面試與面試題對于前端面試的一些看法。動態規劃算法的思想及實現方法幫大家理清動態規劃的解決思路以及原理方法前端經典面試題從輸入到頁面加載發生了什么這是一篇開發的科普類文章,涉及到優化等多個方面。極客學院前端練習題道練習題,面試季練練手。 由數據綁定和排序引入的幾個 JavaScript 知識點 在 JavaScript 的數據綁定和做簡單的表格排序中遇到的幾個知識點 [[JS 基礎...

    neu 評論0 收藏0
  • 前端文檔收集

    摘要:系列種優化頁面加載速度的方法隨筆分類中個最重要的技術點常用整理網頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數組函數數據訪問性能優化方案實現的大排序算法一怪對象常用方法函數收集數組的操作面向對象和原型繼承中關鍵詞的優雅解釋淺談系列 H5系列 10種優化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個最重要的技術點 常用meta整理 網頁性能管理詳解 HTML5 ...

    jsbintask 評論0 收藏0
  • 前端文檔收集

    摘要:系列種優化頁面加載速度的方法隨筆分類中個最重要的技術點常用整理網頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數組函數數據訪問性能優化方案實現的大排序算法一怪對象常用方法函數收集數組的操作面向對象和原型繼承中關鍵詞的優雅解釋淺談系列 H5系列 10種優化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個最重要的技術點 常用meta整理 網頁性能管理詳解 HTML5 ...

    muddyway 評論0 收藏0
  • 前端相關大雜燴

    摘要:希望幫助更多的前端愛好者學習。前端開發者指南作者科迪林黎,由前端大師傾情贊助。翻譯最佳實踐譯者張捷滬江前端開發工程師當你問起有關與時,老司機們首先就會告訴你其實是個沒有網絡請求功能的庫。 前端基礎面試題(JS部分) 前端基礎面試題(JS部分) 學習 React.js 比你想象的要簡單 原文地址:Learning React.js is easier than you think 原文作...

    fuyi501 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<