深入淺出Nodejs讀書筆記

来源:https://www.cnblogs.com/coderhf/archive/2020/05/23/12942847.html
-Advertisement-
Play Games

今天終於把樸靈老師寫的《深入淺出Node.js》給學習完了, 這本書不是一本簡單的Node入門書籍,它沒有停留在Node介紹或者框架、庫的使用層面上,而是從不同的視角來揭示Node自己內在的特點和結構。建議有一定Node基礎或者做過Node方面的小項目的同學閱讀,看完以後你的思維會有很奇特的碰撞,我 ...


今天終於把樸靈老師寫的《深入淺出Node.js》給學習完了, 這本書不是一本簡單的Node入門書籍,它沒有停留在Node介紹或者框架、庫的使用層面上,而是從不同的視角來揭示Node自己內在的特點和結構。建議有一定Node基礎或者做過Node方面的小項目的同學閱讀,看完以後你的思維會有很奇特的碰撞,我看的時候就常常會有這樣的想法:“哦,原來這個功能是這樣實現的哦”。下麵這篇文章是我第二次閱讀《深入淺出Node.js》的一些學習記錄,並且通過百度腦圖這個工具來畫出思維導圖,每天將自己的學習總結寫在這篇文章下麵。圖片文字太小可以右鍵從新標簽頁打開圖片,然後點擊就可以放大顯示。 新增原始文件腦圖地址,這樣大家就可以直接到腦圖去看思維導圖

 

Node簡介

 

這一章簡要介紹了Node,從中可以瞭解Node的發展歷程及其帶來的影響和價值。

 

為什麼叫Node?起初,Ryan Dahl稱他的項目為web.js,就是一個Web伺服器,但是項目的發展超過了他當初單純開發一個Web伺服器的想法,變成構建網路應用的一個基本框架,這樣可以在它的基礎上構建更多的東西,諸如伺服器、客戶端、命令行工具等。Node發展為一個強制不共用任何資源的單線程、單進程系統,包括十分適宜網路的庫,為構建大型分散式應用程式提供了基礎設施,其目標也是成為一個構建快速、可伸縮的網路應用平臺。它自身非常簡單,通過通信協議來組織很多Node,非常容易通過擴展來達成構建大型網路應用的目的。每一個Node進程都構成這個網路應用中的一個節點,這是它名字所含意義的真諦。

 

 

模塊機制

 

這一章主要介紹Node的模塊機制,從中瞭解到Node如何實現CommonJS模塊和包規範的。在這一章中,我們詳細的解釋了模塊在引用過程中的編譯、載入規則。另外,我們還能讀到更深度的關於Node自身源代碼的組織架構。

CommonJS規範為JavaScript定製了一個美好的願景—希望JavaScript能夠在任何地方運行。

 

 

非同步I/O

 

這一章展示了Node中我們將非同步I/O作為主要設計理念的原因。另外,還會介紹到非同步I/O的詳細實現過程。

 

事件迴圈是非同步實現的核心,它與瀏覽器中的執行模型基本上保持一致。而向古老的Rhino,儘管是較早就能在伺服器運行的JavaScript運行時但是執行模型並不像瀏覽器採用事件驅動,而是使用像其他語言一樣採用同步I/O作為主要模型,這造成它在性能上面無法發揮。Node正是依靠構建了一套完善的高性能非同步I/O框架,打破了JavaScript在伺服器止步不前的局面。

 

 

非同步編程

 

這一章主要介紹非同步編程,其中最常見的非同步編程問題介紹,也有詳細的解決方案。在這一章中我們可以接觸到Promise、事件、高階函數是如何進行流程式控制制的。 (這一章建議多看書)

 

 

記憶體控制

 

這一章主要介紹了Node的記憶體控制,主要內容有垃圾回收、記憶體限制、查看記憶體、記憶體泄漏、大記憶體應用等細節。

 

Node將JavaScript的主要應用場景幫到了伺服器端,相應要考慮的細節也與瀏覽器端不同,在伺服器端,資源向來是寸土寸金,要為海量用戶服務,就使得一切資源都要高效迴圈利用,需要更嚴謹為每一份資源作出安排。

 

 

理解Buffer

 

這一章主要介紹了前端JavaScript里不能遇到的Buffer。由於Node中會涉及頻繁的網路和磁碟I/O,處理位元組流數據會是很常見的行為,這部分的場景與純粹的前端開發完全不同。

體會過JavaScript友好字元串操作後,有些開發者可能會形成思維定勢,將Buffer當作字元串來理解。但字元串與Buffer之間有實質性的差異,即Buffer是二進位數據,字元串與Buffer之間存在編碼關係。因此,理解Buffer的諸多細節十分必要,對於如何高效處理二進位十分有用。

 

 

網路編程

 

這一章介紹了Node支持的TCP,UDP,HTTP編程,還講了有關於Websocket與TSL、HTTPS的介紹。

 

利用Node可以十分方便地搭建網路伺服器,不需要專門的Web伺服器作為容器,僅僅需要幾行代碼就可以構建伺服器。Node提供了net、dgram、http、https這4個模塊,分別用於處理TCP、UDP、HTTP、HTTPS,適用於服務端和客戶端。

 

 

構建Web應用

 

這一章主要介紹了構建Web應用過程中用到的大多數技術細節,如數據處理、路由、MVC、模板、RESTful等。 我覺得這一章對於我們開發一個Nodejs方面的應用很有指導性作用,整理本章細節就可以完成一個功能的Web開發框架,這章的目的也就是希望讀者學習過這一章後能夠對Node開髮帶來地圖式的啟發,在開發Web應用時能夠心有輪廓,明瞭細微。

 

 

玩轉進程

 

這一章主要介紹Node的多進程技術,以及如何藉助多進程方式來提升應用的可用性和性能。從嚴格意義上面來講,Node並非真正的單線程架構,在第3章我們還敘述過Node自身還有一定的I/O線程存在,這些I/O線程由底層libuv處理,這部分線程對於JavaScript開發者是透明的,只在C++擴展開發時才會關註到。JavaScript代碼永遠運行在V8上,是單線程的。本章將圍繞JavaScript部分展開,所以屏蔽底層細節的討論。

 

 

測試

 

這一章主要介紹Node的單元測試和性能測試技巧。測試的意義在於,在用戶消費產出的代碼之前,開發者首先消費他,給予其重要的質量保證。

測試包括單元測試、性能測試、安全測試和功能測試等幾個方面,本章將從Node實踐的角度來介紹單元測試和性能測試。

 

 

產品化

 

“行百裡路半九十”,完成產品開發的代碼編寫後,才完成了項目的第一步。這是一章介紹了將Node產品化所需要的註意到的細節,如項目工程化、代碼部署、日誌、性能、監控報警、穩定性、異構共存。 對於Node開發者而言,很多其他語言走過的路需要開發者帶著Node特效重新踐行一遍。這並不是壞事,Node更接近底層使得開發者對於細節的可控性非常高。

 

 

“大清亡於閉關鎖國,學習技術需要交流和資料”。 在這裡我給大家準備了很多的學習資料免費獲取,包括但不限於技術乾貨、大廠面試題系列、技術動向、職業生涯等一切有關程式員的分享

.web前端小白進階方法筆記,學習資料,面試題和視頻,項目源碼免費領取(持續更新)

 

掃描圖中二維碼學習哦

先奉上一些資料圖:

 

 

 

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近忙的很久沒寫點啥了,哪怕寫一寫沒什麼價值的東西,也能體現出我還活著,不要板shi了,寫過的東西寫了一遍又一遍,呆zhi; 設置button的圖片與文字位置,用系統自帶的控制其實也可以; .h typedef NS_ENUM(NSUInteger, KLXKLayoutButtonStyle) { ...
  • 背景: 最近在做一個關於android的續航時間測試apk,從開始測試記錄時間到低電自動關機時這整個的時間,當前採用監聽關機廣播的來實際統計續航時間,但遇到的問題是同樣的測試apk在android8及以下系統均能正常監聽到關機廣播,但從android 9開始就監聽不到關機廣播了。 下麵是我的監聽廣播 ...
  • 今天新蘋果機安裝cocoapods,安裝完以後發現怎麼pod search 都沒有用 命令行提示: swhcxp@iosdevmac ~ % pod search Almofire Setup completed [!] Unable to find a pod with name, author, ...
  • 使用React簡短代碼動態生成柵格佈局 作為 TerminalMACS 的一個子進程模塊 React Web管理端,使用Ant Design Pro作為框架。 本文應用到的知識 1.樣式文件less中方法的使用 2.for迴圈創建按鈕和柵格佈局(flex佈局) 1. 最終效果及源碼鏈接 作為前端新手 ...
  • 移動端適配我們需要做哪些事情? 一個最佳實踐除了設置 和 基準值,隨著iPhone手機的不斷升級,我們不得不正視以下2個問題: 安全區域適配 識別劉海屏 關於viewpoint fit 在切入正題之前,我們先展開介紹一下 ,它的作用是用於設置可視區域的尺寸,屬性如下: PropName | Desc ...
  • 一、if和switch的使用場景比較 1.分支比較多且無法窮盡的時候,最好使用if,其他情況可以視情況而定 2.如果數據不是很大,並且數據都是固定的可以使用switch 3.理論上Switch的效率更高 4.switch的弊端在於如果是無窮的可能性,那麼就不適合使用switch 二、迴圈 1.whi ...
  • 在前後端數據交互的過程中,為了能夠減少ajax請求次數,減輕帶寬壓力,後端往往會將當前介面所需的參數以對象的形式集體返回。這樣就導致一個問題:對象內欄位屬性過多,而有些小組件功能又壓根不需要這麼一個大對象參數(主要是對象屬性過多,難得理,也懶得找),這時就需要對這個大對象做再加工處理。 比如:將小組 ...
  • h5+ 開發微信、QQ分享功能 此處只做微信網頁分享示例代碼 方式一、JS+HTML+h5Plus 1.html代碼 <div class="button" onclick="shareWeb()">分享網頁</div> 2.JS代碼 // H5 plus事件處理function plusReady ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...