首頁 web前端 js教程 Node.js的新手教學(一)

Node.js的新手教學(一)

Mar 12, 2018 pm 05:17 PM
javascript node.js 新手

這次帶給大家Node.js的新手教學,使用Node.js的新手教學注意事項有哪些,下面就是實戰案例,一起來看一下。

主線:Node.js是什麼--> Node.js的組成--> Node.js的特色--> Helloworld範例--> 模組--> 核心模組-- >本地模組--> 套件--> 套件管理器--> 非阻塞、單線程、事件驅動--> 回呼函數--> Node的應用

Node是什麼東西呢?首先看他的名字,Node.js,初看起來的話有的人以為這個玩意有可能是像jQuery一樣,也是一個庫、框架,但其實不是的,Node.js是一個讓JavaScript運行在服務端的平台,或者說Node.js是一個可以讓JavaScript運行在非瀏覽器環境下的工具,Node.js採用的是號稱是世界上最快的chrome v8引擎,是由二部分組成的,由Core JavaScript和Node Standard Library組成的,Core JavaScript其實說白的指的就是ECMAScript,也就是說只包含了我們在瀏覽器端的js腳本中的ECMAScript,排除了我們文檔對像模型,也就是DOM,還有瀏覽器對像模型,也就是BOM,有的人以為Node是不是有相容性問題? Node是沒有相容性問題的,因為我們學過客戶端瀏覽器的js腳本也應該明白其實我們常說的js的兼容性問題指的其實就是我們的DOM和BOM方面的兼容性問題,那什麼是Node Standard Library,這個就類似我們C標準函式庫,或是C++的標準擴充函式庫的玩意,Node.js的特色就是非阻塞非同步事件驅動,Node.js讓我們的JavaScript嘩身於我們的腳本世界的第一等公民,我們先來看第一個例子,helloworld,這個helloworld看起來比其他的語言好像更複雜?不過我們可以看看這6行程式碼實現的功能,它實作了一個簡單的伺服器,Node.js的支柱之一就是模組,所以我們首先要學習的就是模組,那麼什麼是模組呢?模組其實就是一個js的文件,在我們的客戶端瀏覽器中,我們想要實作一個css文件嵌入引入另一個css文件,我們可以使用@import指令,但是在我們js中,如果要想引入另一個js,就不是那麼容易了,當然了也不可以實現,我們可以透過createElement,創建一個script標籤,然後appendChild到我們的html當中就可以實現了,但是不管怎麼樣,實現起來其實不是那麼容易的,我們的Node一解決掉了這個問題,我們的Node裡面,直接一個js文件就是一個模組,我們創建好二個js文件,那我們怎麼才能在一個js文件中引入另外一個js文件呢?我們可以透過一個叫require的函數來引入就可以了,我們可以把每一個模組當成一個更大的對象,他們最終都會暴露出來一些屬性和方法的,我們是透過一個叫exports,或者module.exports來暴露出來屬性和方法的,模組分為二種類型,一種是核心模組,常見的核心模組有http模組、os模組也就是作業系統相關的模組、fs模組也就是file system模組處理與檔案操作相關的東西、util模組工具類的東西,另外一種就是本地模組,所謂的本地模組就是我們可以自己來創建一個自己的模組,與模組相比更大的一個單元就是包,什麼是包呢?我們可以想一下,我們可以把一個模組想成我們的一個文件,我們可以把包想像成一個文件夾,也就是說我們可以用一個文件夾把一堆的類似的功能的文件放在一起打包,說到包,我們一般的除了自己創建的包以外,更重要的其實是一些第三方的包,在npm.org這個網站上,有大量的差不多有幾萬個別人實現好的第三方的包供我們要吧用,具體是怎麼使用呢?我們的Node為了方便我們使用第三方的包,就開發了一個工具就包管理工具,也就是我們的npm,我們可以簡單的來看一下這個東西是怎麼用的,我們安裝有二種方式,一種是全域安裝,一種是本地安裝,這個和其他語言可能不是一模一樣的,比如像python,ruby,全域安裝的包一般適用於命令列操作的,比如像我們lessc,另外一種本地的包一般的用於我們目前要做的一些專案裡面,當然了,如果只是有這些東西的話,那Node.js是沒啥大的特點的,因為這些東西其實在其他語言裡像python,ruby裡面早就有了,Node.js最大的特色其實是異步非阻塞和事件程式模組,這個應該是完全顛覆性設計,和其他的語言有很大的差別,例如下面是二個例子,希望大家能看懂這個例子,假設我們實現的是同步的IO,我們要查詢的是SQL語句,通常我們會寫出下面這樣的程式碼,比如說python,比如php,都是這樣的形式,就是說先用db.query然後一個SQL查詢,就會有阻塞等待資料庫把結果回傳以後儲存到一個res的變數當中,但是下面這個才是Node的真正的寫法,這個是用了異步IO的方式,可以看出,其實這一條語句,其實這是一條語句,他是產生了這樣一個SQL查詢,並且在第二個參數中放了一個函數,這個函數被稱為回呼函數,也就是說這條語句執行完以後,並不會直接執行res.auto,他會繼續向後執行,等到什麼時候會執行裡面的內容呢?等到我這個資料庫把訊息回傳了,然後再透過事件循環,進入回呼函數,再把查詢的結果印出來,這是異步IO的模式,然後再解釋一下什麼是同步,什麼是異步,程式在執行IO操作的時候可能要花費很長的時間,可能會長達數十萬或數億多的指令周期,但是你執行一次javascript語句可能只需要花費幾百或上千個指令周期,當然也許經過優化之後可能只需要幾十個,所以說遇到IO之後是非常浪費時間的,作業系統和CPU是透過中斷的方式來實現非同步的調度方法,也就是說當進程發起IO請求時,作業系統會掛起當前進程,然後將CPU的控制權讓給其他部分的進程,當IO完成以後,操作系統才會使原來的進程恢復繼續執行,同時你就可以訪問剛才IO操作的結果,這個請求的方式我們稱之為同步IO,或是阻塞式IO,但是在Node中IO的模式我們使用的是異步的IO,或者叫非阻塞IO,這個指的是當進程發起IO請求之後,就立刻返回並繼續執行其他的指令,然後透過其他的手段來通知IO已經操作完成了,接下來再來處理IO操作完成以後的邏輯代碼,然後當非阻塞IO發起的時候呢,進程不會進入阻塞狀態,而是繼續執行事件的其他部分,然後進入事件循環處理其他事件,這裡面提到了一個事件和事件循環的概念,在Node中所有的計算邏輯操作都會被抽象成一個事件,然後整個程式就是一個事件循環,事件循環會不斷的處理一個叫事件隊列的東西,是說我最開始的時候有一個事件,然後執行的過程中可能會發起一些請求,比如說IO請求,IO請求完成以後,會在事件隊列中加入事件隊列,等待進程以後進入事件循環之後進行處理,這是基於事件循環的處理模式,這種基於事件驅動的模式其實也是一種很經典非常常用的模式,比如qt,gtk,比如說滑鼠點擊是一個事件,比如說timer也是一個事件,事件的話就少不了有回呼函數,所謂的回呼函數指的是當我們的事件發生以後,然後Node為什麼要使用這種晦澀難懂的程式模式呢?其實這是Node另外一個非常特殊的策略,它使用了單線程模式,我們先來說一下阻塞模式的並發模型,比如說我們要開發一個web伺服器,當然是要有並發要求的,可以讓多個用戶同時訪問,不是說我處理完一個用戶的請求再處理第二個用戶的請求就完了,這樣的話當用戶一多起來,處理的速度就會非常的慢,當一個用戶非常慢並且不斷開連接的時候,其他的用戶就會一直在等待,這樣是不合理的,在阻塞模式下要想實現並發必須使用多線程,就是一個進程只能處理一項任務,我們要想提高CPU的吞吐量,必須要使用的是多線程,要使用可能比CPU核數量多得多的線程,這個要多多少呢,這個是不可預測的,比如說我們的一個邏輯,他要先計算一部分,然後再發起一個IO請求,比如說讀一個文件或寫一個文件,或者說發起一個網路請求,接下來進入我們第二個計算的部分,要想實現並發,我們可以使用多線程的模式,它的執行可能會是一個這樣的,假設我們是單一CPU,那麼就是首先第一個線程搶佔了CPU進行計算,然後他到了IO請求階段,進入阻塞了,這時候CPU的控制權就會被出讓出來了,然後這時候第二個線程就會搶佔了CPU,然後進入IO,又堵塞了,然後再釋放出cpu的控制權,線程3、線程4、線程5這樣,然後中間可能會有一段空閒時間,然後等線程1的IO結束了,然後他發現CPU沒有被佔用,它就會去使用CPU進入計算,這樣的基於計算和IO的並發搶佔式模式,但是在非阻塞模型下,它的模型會是這樣的,一個單線程的,計算1會發起一個非同步的IO請求,這時候會直接再進入另一個運算1,可能會是另一個用戶發起的運算1,然後發起第二個請求,然後等5個用戶可能都發起完了,這時候正好第一個用戶的計算結束了,然後我們這個事件循環就是單線程就會執行第一個用戶發起的IO請求,我們在非阻塞模式下進程對CPU的利用從理論上來說是百分之百,這是理想情況下,單一線程就可以達到最大吞吐量,不需要多個線程,然後什麼時候需要多線程呢?是我們有多核的時候,比如說我們有2個核我們就開2個線程,然後非阻塞比阻塞好在哪裡呢?多執行緒聽起來很快,但其實沒那麼快,因為要進行切換,時間片切分會非常小的,每20ms切換一次站,對CPU快取的利用率是非常不高效的,非阻塞也不是非常好的,會容易引起回調地獄,先讀取第一個文件,然後再讀取第二個文件,這是一個mongoDB的操作。 Node基本上我就介紹到這裡,說了半天Node,Node到底有啥應用呢?首先,Node有許多第三方模組,比如說我們要做一個web做一個網站,可以使用express這個框架,然後生成html可以使用一個叫jade的模板引擎,生成css有less和stylus,用於壓縮javascript有uglify,使用websocket有socket.io,SQL資料庫有ORM,oAuth,守護進程,命令列解析,語法分析,包括,還有Node.js其實雖然和DOM沒有關係,但其實也可以處理,文件上傳,語法高亮,解析markdown,編碼轉換影像處理,輕量級線程和協程,coffeescript,瀏覽器端的一些靜態分析,謝謝大家,今天我對Node.js的介紹就到這裡。

我相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

Node.js程式碼的執行原理

angularjs中$apply()的使用詳解

以上是Node.js的新手教學(一)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

玩霧鎖王國的秘籍給新手指引 玩霧鎖王國的秘籍給新手指引 Jan 28, 2024 pm 03:33 PM

霧鎖王國是一款開放世界的遊戲,玩家可以扮演火焰之子進行生存和探索。遊戲融合了動作RPG挑戰的特色娛樂,為玩家帶來無盡的驚喜和歡樂。在遊戲中,玩家可以探索資源、環境和武器等內容。對於一些新手玩家,可能會對如何上手遊戲感到好奇。在這期的介紹和分享中,我們將為大家提供一些相關的入門指南。霧鎖王國新手入門技巧被瘴氣籠罩區域的危險等級不同在探索的過程中會逐漸解鎖地圖的新區域,並且能看到被瘴氣籠罩區域的位置。地圖上會以兩種顏色來區分,藍色區域是可以短暫進入的,根據角色能力等級高低,可停留的時間也會有所區別

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

錨點降臨新手十連角色推薦 錨點降臨新手十連角色推薦 Feb 20, 2024 pm 02:30 PM

錨點降臨是一款擁有高畫質美少女二次元主題的3D回合卡牌遊戲,提供了豐富角色的精彩組合可供玩家來探索和體驗,擁有許多精品陣容的強力搭配,新人玩家也是好奇新手池有哪些強力角色推薦,以下來看看新手十連金的選擇參考!錨點降臨新手池強力角色推薦第一個十連選艾莉絲,她主要是一個單體雷系爆發角色,單體輸出非常爆炸的,對新人的體驗也會是非常的友善的,所以十分推薦選取。 10抽必金建議選擇「艾莉絲」+「羚角」的組合,艾莉絲是最值得選的金皮雷屬性輸出角色,比新手卡池中的另外2個角色要強得不是一星半點。艾莉絲可以透過特

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統 如何利用JavaScript和WebSocket實現即時線上點餐系統 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

學會利用批次縮排是PyCharm新手必須掌握的技能 學會利用批次縮排是PyCharm新手必須掌握的技能 Dec 30, 2023 pm 12:58 PM

PyCharm新手必備技能:掌握批次縮排的使用方法,需要具體程式碼範例概述:PyCharm是一款功能強大的Python整合開發環境(IDE),它提供了許多實用的工具和功能,幫助開發者提高效率。在日常的編碼過程中,我們經常需要將程式碼進行縮進,保持程式碼的格式整齊美觀。而PyCharm提供的批次縮排功能可以幫助我們快速地將程式碼進行批次縮排,提高編碼效率。本文將探討Py

如何使用WebSocket和JavaScript實現線上預約系統 如何使用WebSocket和JavaScript實現線上預約系統 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

上古王冠新手攻略玩法介紹 上古王冠新手攻略玩法介紹 Feb 20, 2024 am 11:20 AM

上古王冠是以西方魔幻冒險為背景,高品質有策略的卡牌手遊。遊戲內祕境探險、遺跡大冒險、全民冠軍賽等特色玩法等你來體驗。那麼對於新手玩家來說,想要快速上手這個遊戲當然少不了新手攻略了,今天小編就給大家帶來其相關的攻略,一起看看吧。上古王冠新手攻略玩法一覽一、開區流派:1.攢鑽孔:一切以攢鑽為主,出村後再發力。除了主要的神兵、三個飛輪活動等需要花鑽,其他一概不管,主打一個擺爛,英雄挑戰不必理會,能打多少就多少,不強求。優點:只要擺爛攢鑽,出村後能有鑽石快速接入最新活動,拿新系列五金英雄,鑽石斷檔概

See all articles