<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Node.js的新手教程(一)

        來源:懂視網 責編:小采 時間:2020-11-27 20:01:13
        文檔

        Node.js的新手教程(一)

        Node.js的新手教程(一):這次給大家帶來Node.js的新手教程,使用Node.js的新手教程注意事項有哪些,下面就是實戰案例,一起來看一下。主線:Node.js是什么 --> Node.js的組成 --> Node.js的特點 --> Helloworld例子 --> 模塊 --> 核心模塊 --
        推薦度:
        導讀Node.js的新手教程(一):這次給大家帶來Node.js的新手教程,使用Node.js的新手教程注意事項有哪些,下面就是實戰案例,一起來看一下。主線:Node.js是什么 --> Node.js的組成 --> Node.js的特點 --> Helloworld例子 --> 模塊 --> 核心模塊 --

        這次給大家帶來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的介紹就到這里。

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

        推薦閱讀:

        Node.js代碼的執行原理

        angularjs中$apply()的使用詳解

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Node.js的新手教程(一)

        Node.js的新手教程(一):這次給大家帶來Node.js的新手教程,使用Node.js的新手教程注意事項有哪些,下面就是實戰案例,一起來看一下。主線:Node.js是什么 --> Node.js的組成 --> Node.js的特點 --> Helloworld例子 --> 模塊 --> 核心模塊 --
        推薦度:
        標簽: 新手 教程 js
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲视频日韩视频| 亚洲精品人成网线在线播放va | 欧美男同gv免费网站观看 | 国产AV无码专区亚洲AV手机麻豆| 亚洲va无码专区国产乱码| 成人a毛片免费视频观看| 亚洲乱码中文字幕手机在线 | 国产一级特黄高清免费大片| 久久亚洲AV成人无码国产电影| 麻豆国产入口在线观看免费 | 久久乐国产综合亚洲精品| 男男AV纯肉无码免费播放无码| 亚洲中文字幕久久久一区| 日韩中文字幕在线免费观看| 色费女人18女人毛片免费视频| 在线观看亚洲免费视频| 日本一区二区三区在线视频观看免费 | 亚洲欧好州第一的日产suv| 国语成本人片免费av无码| 亚洲AV无码成人精品区狼人影院| mm1313亚洲精品国产| 亚洲伦理中文字幕| 永久免费bbbbbb视频| 久久久受www免费人成| 亚洲福利视频网站| 成在人线AV无码免费| 久久免费观看视频| 亚洲电影免费观看| 波多野结衣免费视频观看| a毛片免费观看完整| 亚洲国产精品日韩在线| 无码不卡亚洲成?人片| 免费91最新地址永久入口 | 浮力影院亚洲国产第一页| 欧洲精品99毛片免费高清观看| 国产精品亚洲片夜色在线| 亚洲熟女乱综合一区二区| 99精品免费观看| 亚洲Av永久无码精品黑人| 国产亚洲自拍一区| 一个人看www在线高清免费看|