站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        淺析前端開發(fā)者要如何學(xué)習(xí)Node語言?

        淺析前端開發(fā)者要如何學(xué)習(xí)Node語言?

        本文整理自我初學(xué) Node.js 時(shí)的筆記,用以向?qū)?Node.js 這門語言有興趣的讀者簡(jiǎn)明扼要的介紹 Node.js 是什么,以及該如何學(xué)習(xí)這門語言。

        1. 什么是 Node.js?

        Node.js 是 Ryan Dahl 在 2009 年為了解決 Web 服務(wù)器高并發(fā)問題而開發(fā)的基于 Chrome V8 引擎JavaScript 運(yùn)行時(shí)環(huán)境

        從這個(gè)定義中,可以看到 Node.js 的三個(gè)關(guān)鍵特征:

        • 目的是為了解決 Web 服務(wù)器高并發(fā)問題;

        • 根基是 Chrome V8 引擎;

        • 本質(zhì)是一個(gè) JavaScript 運(yùn)行時(shí)環(huán)境;

        因此,要搞清楚什么是 Node.js,首先就要搞清楚以上三個(gè)關(guān)鍵特征。【相關(guān)教程推薦:nodejs視頻教程、編程教學(xué)】

        1.1 Node.js 三個(gè)關(guān)鍵特征

        1.1.1 為了解決 Web 服務(wù)器高并發(fā)問題

        Ryan Dahl 在設(shè)計(jì) Node 之前,一直致力于解決 Web 服務(wù)器高并發(fā)引起的性能問題,根據(jù)工作經(jīng)驗(yàn),他認(rèn)為性能問題的瓶頸在于阻塞的 I/O 操作。恰逢 Chrome 推出了高性能的 V8 引擎,Ryan Dahl 認(rèn)為 JavaScript 天然的異步,事件委托機(jī)制以及 JavaScript 語言在服務(wù)端無歷史包袱的特性,非常適合通過異步流程控制的方式提升大型分布式系統(tǒng)性能。于是,Node.js 應(yīng)運(yùn)而生。

        盡管現(xiàn)在 Node.js 已經(jīng)被應(yīng)用于各種各樣的場(chǎng)景。但是我們始終應(yīng)該認(rèn)識(shí)到,理解 Node.js 的異步流程控制原理才算是掌握了 Node.js 的核心。

        1.1.2 Chrome V8 引擎

        Chrome 內(nèi)核基于 WebKit,分為以下兩個(gè)引擎:

        • 渲染引擎:Web Core;
        • JavaScript 解釋引擎:JavaScript Core;

        而 Google 由于不滿意 JavaScript Core 的性能,于是自主研發(fā)了性能更好的 V8 引擎予以取代。

        作為 JavaScript 的解釋引擎,V8 引擎的主要作用在于:

        • 解釋與編譯 JavaScript;

        • 堆管理;

        • 處理內(nèi)存垃圾回收;

        • 處理內(nèi)存分配;

        可以說,V8 引擎提供了一個(gè)高性能的 JavaScript 執(zhí)行環(huán)境,因而 JavaScript 能夠有充足的底氣在各平臺(tái)(瀏覽器,服務(wù)端,桌面端)運(yùn)行。

        1.1.3 JavaScript 運(yùn)行時(shí)環(huán)境

        Node.js 既不是一門語言(JavaScript),也不是一個(gè)框架(React,Koa),而是一個(gè) JavaScript 運(yùn)行時(shí)環(huán)境

        那么什么是 JavaScript 運(yùn)行時(shí)環(huán)境 呢?顧名思義,是一個(gè)可以運(yùn)行 JavaScript 的環(huán)境。那么這里的環(huán)境是指什么呢?主要包含以下兩個(gè)方面:

        • 提供了解釋,編譯 JavaScript 的底層能力;

        • 提供了一系列接口,使開發(fā)者可以通過 JavaScirpt 調(diào)用系統(tǒng)底層能力(例如網(wǎng)絡(luò),文件讀寫等);

        前者是由 Chrome V8 引擎提供的,而后者則是由一個(gè)底層由 C,C++ 編寫的高性能的事件驅(qū)動(dòng)的異步 I/O 庫 **libuv ** 所提供。

        1.2 libuv

        libuv 是一個(gè)跨平臺(tái)的,事件驅(qū)動(dòng)的異步 I/O 庫,為 Node 提供了 CPU 和操作系統(tǒng)層面的功能。我們知道不同的操作系統(tǒng)調(diào)度硬件的方式不同,CPU 的指令集也各有差異。libuv 則抹平了這一差異,通過名為 Node Bindings 的模塊,向用戶暴露了統(tǒng)一的系統(tǒng)操作接口。

        因此現(xiàn)在我們可以說,Node 實(shí)際上由兩部分組成:Chrome V8 引擎以及 libuv 。這兩層隱藏在 Node Bindings 之下,而用戶面向 Node Bindings 進(jìn)行編程。

        至此,你應(yīng)該理解了什么是 Node.js。它是一個(gè)跨平臺(tái)的 JavaScript 可執(zhí)行環(huán)境,在這個(gè)環(huán)境中,你可以使用 JavaScript 充分調(diào)動(dòng)操作系統(tǒng)的能力,做你想做的任何事!

        2. Node.js 的哲學(xué)

        要充分的理解 Node.js,除了前文提到的異步流程控制原理之外,我們還需要了解下 Node.js 從創(chuàng)始到發(fā)展所彰顯的設(shè)計(jì)哲學(xué),這有利于我們更喜歡 Node.js 生態(tài)。

        我認(rèn)為 Node.js 有以下三大特點(diǎn):

        • 開放;

        • 專注;

        • 簡(jiǎn)約;

        讓我分別解釋。

        2.1 開放

        Node.js 在設(shè)計(jì)之初,就堅(jiān)持將核心庫做的足夠小,以便讓充分發(fā)揮社區(qū)的創(chuàng)造性,讓所有搭建大型系統(tǒng)的構(gòu)建都盡可能來源于社區(qū),因此每個(gè)構(gòu)件都可以快速試錯(cuò)和迭代。不得不說,這種做法雖然有顯得有些偷懶,但是事實(shí)證明這種對(duì)社區(qū)的信賴,和開放的態(tài)度收獲了巨大的回報(bào):Node.js 擁有了全世界最活躍也是最大的社區(qū)和包管理平臺(tái) npm

        2.2 專注

        Node 社區(qū)的開發(fā)者始終保留著一個(gè)默契,將包的功能約束的足夠窄,最好一次只做好一件事,并對(duì)外暴露單一的接口。這樣包的開發(fā),設(shè)計(jì),測(cè)試就會(huì)變得更加簡(jiǎn)單,包也就更加可靠。這種專注,也同時(shí)表現(xiàn)了開發(fā)者們的謙遜以及效率至上。

        2.3 簡(jiǎn)約

        Node 包通常只暴露單一模塊和接口,并繼承了 JavaScript 的簡(jiǎn)約特點(diǎn),使用簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)。這使得 Node 包易于閱讀和理解。

        3. 前端開發(fā)者如何學(xué)習(xí) Node.js?

        對(duì)于從未涉足過服務(wù)端開發(fā)的前端開發(fā)者而言,以下幾點(diǎn)是學(xué)習(xí) Node 過程中必須補(bǔ)足的知識(shí):

        • 對(duì) JavaScript 語言特性(特別是 ESNext),語法的深入理解;

        • 數(shù)據(jù)庫知識(shí)與數(shù)據(jù)表設(shè)計(jì)能力;

        • 系統(tǒng)架構(gòu)能力;

        而學(xué)習(xí) Node.js 則可以分為兩個(gè)部分:

        • 學(xué)習(xí) Node.js 的核心庫的使用;

        • 學(xué)習(xí)相關(guān) Web 框架的使用;

        在整個(gè)學(xué)習(xí)過程中,建議采用以下四步學(xué)習(xí):

        • 閱讀官方文檔;

        • 撰寫 Demo 熟悉語法驗(yàn)證思路;

        • 在此過程中不斷地問自己?jiǎn)栴},并深入調(diào)研得到答案;

        • 通過對(duì)外輸出,分享所得加深自己的印象;

        4. 小結(jié)

        Node.js 在如今已經(jīng)是每一位前端開發(fā)者必須掌握的技術(shù),它通過 libuv 向前端開發(fā)者開放了操作系統(tǒng)層面的底層能力,讓開發(fā)者能夠全面使用計(jì)算機(jī)的算力和功能。并讓用一種語言解決 Web 應(yīng)用開發(fā)的所有問題的想法成為可能。希望通過本文的介紹,您能夠?qū)?Node.js 產(chǎn)生好奇,祝您在未來的探索旅途中,過得愉快。

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 国产精品一区在线观看你懂的| 亚洲国产成人精品无码久久久久久综合 | 88国产精品无码一区二区三区| 少妇人妻偷人精品无码视频| 精品久久久久国产免费| 国产成人精品免费视频大全麻豆| 亚洲精品字幕在线观看| 久久久亚洲精品蜜桃臀| 国产VA免费精品高清在线| 国产精品爽黄69天堂a| 国产精品区免费视频| 中文字幕精品无码一区二区三区 | 国内精品久久九九国产精品| 国内精品久久久久影院优| 亚洲欧美精品一区久久中文字幕| 久久se精品一区二区影院 | 久久精品国产亚洲综合色| 精品少妇无码AV无码专区| 亚洲国产精品无码久久SM| 亚洲?V乱码久久精品蜜桃 | 国产精品成人在线| AAA级久久久精品无码片| 国产麻豆一精品一AV一免费| 人妻少妇精品视频二区 | 人精品影院 | 亚洲精品专区在线观看| 亚洲精品无码AV中文字幕电影网站| 欧美精品一区二区久久| 日本Aⅴ大伊香蕉精品视频| 精品午夜福利1000在线观看 | 欧美精品VIDEOSSEX少妇| 亚洲精品狼友在线播放| 亚洲国产精品VA在线观看麻豆| 亚洲欧美日韩国产一区二区三区精品 | 四虎国产成人永久精品免费| 亚洲精品一品区二品区三品区| 87国产私拍福利精品视频| 91无码人妻精品一区二区三区L| 97精品国产自在现线免费观看| 99精品电影一区二区免费看| 99久久国产主播综合精品|