最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js開發(fā)者必須了解的4個JS要點

 更新時間:2016年02月21日 10:46:16   投稿:lijiao  
這篇文章主要介紹了Node.js開發(fā)者必須了解的4個JS要點,Node.js是一個面向服務(wù)器的框架,立足于Chrome強大的V8 JS引擎。盡管它由C++編寫而成,但是它及其應(yīng)用是運行在JS上的,需要的朋友可以參考下

本文為開發(fā)者總結(jié)了4個Node.js要點。

1. 非阻塞(Non-blocking)或異步I/O

由于Node.js一個服務(wù)器端框架,所以它主要工作之一是處理瀏覽器請求。在傳統(tǒng)的I/O系統(tǒng)中,每個請求的發(fā)出都是在上一請求到達之后才發(fā)出的。所以這被稱為阻塞(blocking)I/O。服務(wù)器會阻擋其它的請求以處理當前請求,從而導(dǎo)致瀏覽器等待。

Node.js不以這種方式來進行I/O處理。如果一個請求需要長時間處理,Node.js會把該請求發(fā)送給一個事件循環(huán)(event loop),然后繼續(xù)處理在調(diào)用堆棧(call stack)中的下一請求。當延后請求處理完畢時,它會告知Node.js同時瀏覽器會做出響應(yīng)反饋。

以下使用一個事例來說明。

Blocking I/O

// take order for table 1 and wait...
var order1 = orderBlocking(['Coke', 'Iced Tea']);
// once order is ready, take order back to table.
serveOrder(order1);
// once order is delivered, move on to another table.
// take order for table 2 and wait...
var order2 = orderBlocking(['Coke', 'Water']);
// once order is ready, take order back to table.
serveOrder(order2);
// once order is delivered, move on to another table.
// take order for table 3 and wait...
var order3 = orderBlocking(['Iced Tea', 'Water']);
// once order is ready, take order back to table.
serveOrder(order3);
// once order is delivered, move on to another table.

在這個餐館例子中,服務(wù)員接收了菜單指令,等待飯菜處理,然后在飯菜處理完成后把飯菜端到桌子上。在服務(wù)員等候飯菜處理期間,他會拒絕其它客人的菜單指令。

Non-blocking I/O

// take order for table 1 and move on...
orderNonBlocking(['Coke', 'Iced Tea'], function(drinks){
 return serveOrder(drinks);
});
// take order for table 2 and move on...
orderNonBlocking(['Beer', 'Whiskey'], function(drinks){
 return serveOrder(drinks);
});
// take order for table 3 and move on...
orderNonBlocking(['Hamburger', 'Pizza'], function(food){
 return serveOrder(food);
});

而在非阻塞模式下,服務(wù)員會告知廚師他接受到的菜單指令,然后去接收下一桌的指令。當?shù)谝蛔里埐颂幚硗戤厱r,他會為那桌客人上菜,然后繼續(xù)接收其它客人的指令。這樣一來服務(wù)員不會由于阻塞指令而造成時間浪費。

2. 原型(Prototype)

原型在JS中是一個復(fù)雜的概念。在典型繼承機制語言如Java或C++中,為了實現(xiàn)代碼復(fù)用,你必須先創(chuàng)建一個類然后透過它來生成對象或透過類擴展來生成對象。但是在JS中沒有類似的類概念。在JS中創(chuàng)建一個對象后,你需要透過它來擴展對象或創(chuàng)建新對象。這就叫做原型繼承(prototypal inheritence)。

每個JS對象都連接著一個原型對象并對并繼承該對象的屬性。每個對象與預(yù)定義JS的Object.prototype相聯(lián)系。如果你透過obj.propName或obj[‘propName'>方式來查找對象屬性但查找失敗時,這時可嘗試通過obj.hasOwnProperty(‘propName')的方式進行查找,JS運行時會在在原型對象中查找屬性。如果屬性不存在于原型鏈中,那么將返回undefined值。

讓我們用以下例子來進行說明:

if (typeof Object.create !== 'function') {
  Object.create = function (o) {
    var F = function () {};
    F.prototype = o;
    return new F();
  };
var otherPerson = Object.create(person);

當你創(chuàng)建了一個新對象,你必須選定一個以原型為基礎(chǔ)的對象。在這里,我們?yōu)閷ο蠛瘮?shù)添加了一個create方法。create方法創(chuàng)建了一個以其它對象為原型的對象,并作為參數(shù)傳入。

當我們變更新的對象時,它的原型是保持不變的。但是,當我們改動了原型對象,該變更會影響所有基于該原型的對象。

3. 組件(Modules)

如果你曾在Java中使用過包,那么Node.js的組件與之類似。如果沒有,也不用擔(dān)心;組件其實是簡單的JS文件,用于實現(xiàn)特定的功能。組件模式的意義是讓你工作得更加輕松。要使用組件,你必須像在JAVA中導(dǎo)入包一樣進行JS文件導(dǎo)入。Node.js中有兩種組件

核心組件(Core Modules)- 核心組件是結(jié)合Node.js庫被預(yù)編譯的。其目的是把程序員經(jīng)常使用的功能開放出來,避免重復(fù)勞動。常見的核心組件有HTTP, URL, EVENTS, FILE SYSTEM等等。

用戶自定義組件(UserDefined Modules)- 用戶自定義組件是提供給用戶使用以實現(xiàn)具體功能的組件。當核心組件不足以滿足程序員需要的時候,自定義組件就可派上用場了。

組件是通過require函數(shù)被抽取的。如果這是一個核心組件,那么參數(shù)就是組件名。如果這是一個用戶自定義組件,那么參數(shù)就是其在文件系統(tǒng)中的組件路徑。例如:

// extract a core module like this
var http = require('http);
// extract a user defined module like this
var something = require('./folder1/folder2/folder3/something.js');

4. 回調(diào)(Callbacks)

在JS中,函數(shù)是第一類對象。也就是說你可以像對常規(guī)對象那樣對函數(shù)進行所有操作。例如指派函數(shù)到一個變量,把這些作為參數(shù)傳給方法,把它們聲明為對象的屬性,甚至是把它們從函數(shù)里返回。

回調(diào)在JS中是異步函數(shù),可以作為參數(shù)傳遞給其它函數(shù)或從其它函數(shù)里執(zhí)行或返回而后再執(zhí)行。這是回調(diào)的基本概念。

當我們把一個回調(diào)函數(shù)作為參數(shù)傳遞給另外的函數(shù)時,我們傳遞的僅僅是函數(shù)的定義;換言之,我們不會知道回調(diào)函數(shù)的執(zhí)行時間。這完全依賴于回調(diào)函數(shù)機制。它會在稍后某個時間點進行回調(diào)調(diào)用。這是Node.js的非阻塞或異步行為的基本概念,可用下例進行說明:

setTimeout(function() {
  console.log("world");
}, 2000)
console.log("hello");

這是一個最簡單的調(diào)用。我們把一個匿名函數(shù)作為參數(shù)進行傳遞,作用是為setTimeout函數(shù)進行控制臺的輸出記錄登記。因為這僅僅是個函數(shù)定義,我們不知道函數(shù)何時會被執(zhí)行。這取決于setTimeout函數(shù)的second參數(shù),即2S后。

首先,second記錄語句記錄了對控制臺的輸出,2S后,在回調(diào)函數(shù)中的記錄語句記錄了輸出的內(nèi)容。

// output
hello
world

寫在最后

以上4點對Node.js開發(fā)者來說是要徹底理解和掌握的,建議多動手來好好體會這4個要點的含義。

相關(guān)文章

  • 如何在Linux上安裝Node.js

    如何在Linux上安裝Node.js

    這篇文章主要為大家分享了如何在你的Linux發(fā)行版上安裝Node.js?感興趣的小伙伴們可以參考一下
    2016-04-04
  • 詳解node.js 下載圖片的 2 種方式

    詳解node.js 下載圖片的 2 種方式

    本文通過實例代碼給大家介紹了node.js 下載圖片的 2 種方式及下載遠程圖片的實現(xiàn)代碼,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-03-03
  • 在Express處理錯誤和未匹配路由的解決方法

    在Express處理錯誤和未匹配路由的解決方法

    在使用 Express 開發(fā) Web 應(yīng)用程序時,有效地處理錯誤和管理未匹配任何定義處理程序的路由至關(guān)重要,這確保了應(yīng)用程序的健壯性和更好的用戶體驗,本文給出了詳細的解決方法,需要的朋友可以參考下
    2024-01-01
  • Pycharm配置Node.js運行js代碼詳細過程

    Pycharm配置Node.js運行js代碼詳細過程

    在PyCharm中寫JavaScript代碼并進行調(diào)試是非常方便的,但是有些用戶可能對如何在PyCharm中準確地運行JavaScript代碼感到困惑,這篇文章主要給大家介紹了關(guān)于Pycharm配置Node.js運行js代碼的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • 詳解如何使用nvm管理Node.js多版本

    詳解如何使用nvm管理Node.js多版本

    這篇文章主要介紹了詳解如何使用nvm管理Node.js多版本,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 詳解nodejs微信公眾號開發(fā)——5.素材管理接口

    詳解nodejs微信公眾號開發(fā)——5.素材管理接口

    這篇文章主要介紹了詳解nodejs微信公眾號開發(fā)——5.素材管理接口,非常具有實用價值,需要的朋友可以參考下
    2017-04-04
  • nodejs 簡單實現(xiàn)動態(tài)html的方法

    nodejs 簡單實現(xiàn)動態(tài)html的方法

    今天小編就為大家分享一篇nodejs 簡單實現(xiàn)動態(tài)html的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 2014年最火的Node.JS后端框架推薦

    2014年最火的Node.JS后端框架推薦

    用nodejs開發(fā)web應(yīng)用,用哪個框架好?express?還是其他什么?今天小編就來給大家推薦一下今年最好用的幾款Node.js后端框架
    2014-10-10
  • Linux通過yum命令徹底刪除node.js并重新安裝

    Linux通過yum命令徹底刪除node.js并重新安裝

    這篇文章主要介紹了Linux通過yum命令徹底刪除node.js并重新安裝,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-11-11
  • Node.js模塊Modules的使用實戰(zhàn)教程

    Node.js模塊Modules的使用實戰(zhàn)教程

    這篇文章主要介紹了Node.js模塊Modules的使用,模塊就是一個聲明了裝飾器@Module()的類。裝飾器@Module()提供了元數(shù)據(jù),以便讓Nest組織應(yīng)用程序結(jié)構(gòu)
    2023-04-04

最新評論

泾源县| 海淀区| 芦溪县| 澳门| 仪陇县| 陇西县| 武安市| 泰安市| 清新县| 平谷区| 贡嘎县| 都匀市| 龙山县| 临朐县| 临清市| 泰州市| 安达市| 南宫市| 新兴县| 铜鼓县| 南通市| 乌拉特后旗| 三台县| 屯昌县| 永嘉县| 荃湾区| 乐山市| 兴城市| 宁蒗| 南充市| 抚宁县| 梁山县| 桃园县| 乳山市| 都匀市| 维西| 庆安县| 诏安县| 怀宁县| 银川市| 黄浦区|