国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Node.js 前后端分離開發(fā)新思路

Lionad-Morotar / 919人閱讀

摘要:從事開發(fā)的程序員,對于前后端分離模式多半不陌生,這也是目前主流的開發(fā)模式,具體關(guān)于前后端分離的模式可以參看文章你不得不了解的前后端分離原理,在這里寫者不進行說明。原理圖如下,前后端在一個進程同一個端口中,通過熱替換更新的,而不是全量重啟。

從事 Web 開發(fā)的程序員,對于前后端分離模式多半不陌生,這也是目前主流的 Web 開發(fā)模式,具體關(guān)于前后端分離的模式可以參看文章《你不得不了解的前后端分離原理!》,在這里寫者不進行說明。

好了,讓我們進入主題 —— Node.js 前后端分離開發(fā)新思路
在進入新思路之前,我們現(xiàn)需要了解“老思路”是什么?(注意:后面的案例都是以全棧工程師為例,即前后端代碼在一起)

前后端分離開發(fā)常規(guī)思路

以一種具體情景為例:小牛是一名全棧工程師,喜歡前端后端全干,前端使用目前主流的 Webpack + React 全家桶(或 Vue 全家桶),后端使用 express(或 Koa),小牛在同時開發(fā)前后端過程中,開啟兩個進程(前后端各一個),同時使用 nodemon 熱重啟后臺服務(wù),使用 Webpack Proxy 轉(zhuǎn)發(fā)實現(xiàn)跨域請求,然后哼哧哼哧開發(fā)。
如例子:一個前后端分離的簡單案例

 Process 1                Process 2
 ___________          ____________________
|           | Proxy  |          |         |
| FrontEnd  | <----> | Nodemon  | BackEnd |
|           |        |          | (cp 1)  |
-------------        ----------------------

如上示意,該模式啟動需要啟動兩個進程(前端 和 Nodemon),其中 BackEnd 程序作為子進程掛載在 Nodemon 進程,而且前端和 Nodemon 進程通過 Proxy 轉(zhuǎn)發(fā)實現(xiàn)通信。

乍看一下這樣挺美好的,但是這種模式的缺陷也很容易暴露出來

傳統(tǒng)思路的缺陷

BackEnd 程序復雜度提升后,啟動時間也變得不可控,每次熱啟動后臺服務(wù)時間過長;

需要同時開啟兩個進程,一定程度提高了開發(fā)成本

那么對于上述的問題,需要介紹一下我們今天的主角!

前后端分離開發(fā)新思路

依舊是小牛的例子,大牛同樣使用小牛相同的前后端技術(shù)棧,但不同的是,大牛不使用 Nodemon 實現(xiàn)后端程序的熱重啟,而是使用類似 Webpack HMR(Hot Module Replacement) 的思路,熱更新 Node.js 中的 module,具體實現(xiàn)使用 hot-module-require。

原理圖如下,前后端在一個進程(同一個端口)中,通過 Fs Watcher 熱替換更新的 Module,而不是全量重啟。

          Process
 _________________________
|          | File Watcher |
| Frontend |       +      |
|          |    Backend   |
---------------------------

其中核心的 Node.js 端 HMR 實現(xiàn)思路如下

Node.js 端 HMR 實現(xiàn)思路

首先我們來看看一個程序的依賴圖關(guān)系

得到程序依賴圖
index.js 為程序入口,可以通過靜態(tài)代碼分析,得到 index.js 的直接依賴 express/index.jslib/middleware.js,然后遞歸地進行,依次得到一個完整的依賴圖,算法具體實現(xiàn)參看 detect-dep。

監(jiān)聽依賴圖中涉及到的文件
需要熱更新,那就離不開文件改動的監(jiān)聽,所以進行依賴圖中文件的監(jiān)聽(實際上只需要監(jiān)聽本地的文件,排除 node builtin modules 和第三方模塊)

某個時候,lib/to-array.js 文件發(fā)生改動!

刪除更新模塊 A 緩存 (delete require.caches[modulePath])

以 A 為入口,更新依賴圖

發(fā)出 A 更新的信號

根據(jù)依賴圖,得到依賴 A 的模塊集合 B

向上回溯 B,再次從 0. 開始執(zhí)行

其中這一步需要注意環(huán)狀依賴的處理,需要保證一條依賴路徑,不進行重復的依賴更新。
lib/to-array.js,存在兩條路徑:lib/to-array.js -> lib/middleware.js -> index/jslib/to-array.js -> lib/express-utils.js -> lib/middleware.js -> index/js

以上算法的具體實現(xiàn)參看 hot-module-require,
具體的應(yīng)用代碼可以參看這里

相比與傳統(tǒng)模式,新思路的優(yōu)點十分突出。

優(yōu)勢

細化 Module 更新的顆粒度,避免不必要的更新開銷,大大縮減服務(wù)更新時間

只有一個進程,一定程度上縮減了進程調(diào)度,進程切換的開銷

用一個具體的場景對比舉例,如后端使用內(nèi)存存儲用戶 session 數(shù)據(jù)。如使用傳統(tǒng)方式開發(fā),則每一次更新后臺代碼,都會丟失內(nèi)存中的用戶數(shù)據(jù),所以每次都需要重新進行登錄;但是在新方式,只需要不修改用戶登錄模塊代碼,則不會重置用戶 session 數(shù)據(jù),即不需重新登錄。

      Backend 入口
  /                
 -                   -
登錄 --> Common <-- 某業(yè)務(wù)邏輯

如上簡易模塊依賴圖,A -> B 表示 A 依賴 B,所以上圖中,Backend 入口直接依賴 “登錄”和“某業(yè)務(wù)邏輯”,間接依賴“Common”;這時候我們只有在修改了“登錄”或“Common”的代碼,才會觸發(fā)登錄模塊的熱更新。

但是新方法也不是無缺陷

缺陷

如代碼模塊中包含全局副作用代碼,可能會有各種奇怪問題出現(xiàn)

擴展

使用 Node.js HMR 可以實現(xiàn)各種各樣的熱更新體驗,如熱更新 proxy,熱更新 mock 數(shù)據(jù),熱更新配置文件...,非常 Cool!

相關(guān)材料

靜態(tài)依賴分析

Node.js HMR 實現(xiàn)

Node.js HMR 在開發(fā)環(huán)境中的使用

Node.js 環(huán)狀依賴

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/104977.html

相關(guān)文章

  • node技術(shù)棧 - 收藏集 - 掘金

    摘要:異步最佳實踐避免回調(diào)地獄前端掘金本文涵蓋了處理異步操作的一些工具和技術(shù)和異步函數(shù)。 Nodejs 連接各種數(shù)據(jù)庫集合例子 - 后端 - 掘金Cassandra Module: cassandra-driver Installation ... 編寫 Node.js Rest API 的 10 個最佳實踐 - 前端 - 掘金全文共 6953 字,讀完需 8 分鐘,速讀需 2 分鐘。翻譯自...

    王偉廷 評論0 收藏0
  • Node.js作為中間層實現(xiàn)簡單的前后分離

    摘要:基本邏輯如下圖所示對此做了一個點贊的,邏輯不復雜,但達到了作為中間層實現(xiàn)前后端分離的目的。 零、用koa2實現(xiàn)前后端分離的點贊+1的功能(歡迎clone和star) Github:https://github.com/pengxiaohua/praise-by-koa簡書:http://www.jianshu.com/p/c3215333655a 一、前后端不分離存在什么問題 之前做一...

    moven_j 評論0 收藏0
  • [ 好文分享 ] 美團酒店Node全棧開發(fā)實踐

    摘要:我所在的美團酒店事業(yè)部去年月份成立,新的業(yè)務(wù)新的開發(fā)團隊,這一切使得我們的前后端分離推進的很徹底。日志監(jiān)控平臺日志監(jiān)控平臺是美團內(nèi)部的一個日志收集系統(tǒng),目前美團統(tǒng)一使用收集日志,具有接收格式日志的能力,而日志監(jiān)控平臺也是以格式日志來收集。 轉(zhuǎn)自:美團技術(shù)團隊 作者:美團技術(shù)團隊 分享理由:很好的分享,可見,基于Node的前后端分離的架構(gòu)是越顯流行和重要,前端攻城獅們,No...

    wangdai 評論0 收藏0
  • 關(guān)于前后分離開發(fā)模式

    摘要:因此今天要討論的話題就是前后端分離的開發(fā),讓前端工程師的工作更飽滿,更具有價值如何實現(xiàn)前后端分離要實現(xiàn)前后端分離開發(fā)其實不是什么難事,前輩早就有很多經(jīng)驗了,比如等。 為什么要做分離開發(fā): 現(xiàn)在很多公司的web開發(fā)模式都是用jsp、php、asp等等開發(fā),由服務(wù)端渲染,而前端工程師的工作就是完成切圖及靜態(tài)頁面的搭建,他們的精力都放在了輔助別人完成項目的工作,背鍋還不討好,責任劃分不明確。...

    zacklee 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<