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

資訊專欄INFORMATION COLUMN

Redux“七宗罪”

LoftySoul / 939人閱讀

摘要:七宗罪目前已經成為了前端開發領域內較為主流的一種架構模式。以下詳細探討最主要的個問題,簡稱七宗罪。一過多的文件眾所周知由三個部分組成。雖然功能強大但相對較重而且目前主要使用的僅僅是部分。

Redux“七宗罪”

React+Redux目前已經成為了前端開發領域內較為主流的一種架構模式。其中React負責頁面渲染,Redux負責管理所有的業務數據,如下圖所示。引入redux確實能夠很好的將數據與UI解藕,讓React組件做到最大程度的復用性,但也帶來了很多問題,這些問題都一定程度上降低了業務開發效率。以下詳細探討redux最主要的7個問題,簡稱“七宗罪”。

一 過多的文件
眾所周知redux由三個部分組成:store、action、reducer。在使用redux時,當我們開發一個頁面,我們就需要定義所有和這個頁面邏輯相關的action。在處理業務數據時,我有由需要給每個頁面或者時某種資源定義相應的reducer,久而久之,我們的項目里就有了許多action和reducer文件。過多的文件不僅增加了開發成本還會導致開發者在進行業務開發時不斷的切換文件,降低了開發效率。

二 業務邏輯割裂
redux框架中使用了reducer這一函數式編程的工具來進行數據管理,對獲取到的數據(用戶通過UI交互產生或后臺數據返回)進行加工和保存。在前端開發中的業務邏輯一般包含了四個部分:收集數據、發送請求、接收請求、處理數據,如下圖所示,這四個步驟一般出現在一個文件里,相對容易修改和維護。而redux把處理數據的邏輯多帶帶抽離出來放入了reducer中,一定程度上增加了業務邏輯開發流程,讓開發者必須定義好reducer中接受數據的格式,并且需要經常在不同文件中切換,造成了業務邏輯割裂。

三 不必要的消息機制
在使用redux框架的項目中,涉及到store中數據更新的都需要通過發送一個action觸發,這是一種典型的消息機制驅動的軟件系統設計。消息機制在大型項目中解藕不同模塊,提高可測試性和可擴展性方面都有不錯的表現,但在一些小型項目中確沒有起到什么本質性的幫助,反而需要開發者創建不同類型的action并定義action中payload的格式,增加了業務開發的整體流程。redux的本質是一個數據流管理工具,action的引入讓系統毫無選擇的被設計成消息機制驅動,對開發者不太友善。

四 強制語法
redux的reducer的寫法必須符合特定的格式,即每個reducer函數都必須返回一個新的對象。我們翻看一下源碼不難發現,作者在這里才作用了比較對象地址來進行判斷,如下所示。這種強制的語法不僅開銷巨大,同樣對開發者不太友善,一旦忘記這個約束就會造成業務邏輯錯誤。

for (var _i = 0; _i < finalReducerKeys.length; _i++) {
  var _key = finalReducerKeys[_i];
  var reducer = finalReducers[_key];
  var previousStateForKey = state[_key];
  var nextStateForKey = reducer(previousStateForKey, action);
  if (typeof nextStateForKey === "undefined") {
    var errorMessage = getUndefinedStateErrorMessage(_key, action);
    throw new Error(errorMessage);
  }
  nextState[_key] = nextStateForKey;
  hasChanged = hasChanged || nextStateForKey !== previousStateForKey;
}

五 龐大的計算開銷
我們繼續查看上面的redux源碼,當一個action被dispatch出去后,reducer是如何被執行的呢?注意到源碼中遍歷了所有的reducer并逐個比較返回的對象有沒有改變。這就意味著任何一個action都會觸發所有的reducer被執行一次,其中的計算開銷是顯而易見的。

六 陡峭的學習曲線
redux作為一個前端數據流框架,內容較多,學習成本是相對較高的。redux中的store和reducer的使用方式是典型的函數式編程的方法,這對于習慣了面向對象編程的開發者來說需要一定的學習成本。此外action這種消息類型的開發模式對于前端開發者來說也相對陌生,需要一定的學習時間。

七 不成熟的生態
目前圍繞redux的相關技術比較多,主要都是redux的一些中間件,比如: redux-promise、redux-observable、saga等等。redux-promise、redux-observable都能解決異步數據的問題,但對業務開發的實質性幫助并不大。saga雖然功能強大但相對較重而且目前主要使用的僅僅是side effects部分。總體來說圍繞redux的相關框架都不是特別成熟,尚不能對業務開發起到非常大的幫助。

結尾
上文總結了redux的“七宗罪”,前端數據流框架的核心任務就是管理組件之間需要共享的數據,及時觸發組件的重新渲染,這點在如今的前端架構中是非常重要的一環。redux的store能夠很好的完成這一點,但引入reducer和action卻帶來了很多問題,降低了項目整體開發效率。那么一個合格的數據流框架究竟應該是怎樣的呢?在下一篇文章中我會詳細介紹我的解決方案-Hytex框架。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/91782.html

相關文章

  • 深扒現今大學計算機專業宗罪---第一罪“錯誤的入門指導”

    摘要:勸說孩子志愿填寫計算機專業成為家長眼中的為未來籌劃的一小步。預告歡迎大家閱讀本期唱唱反調欄目,下周日的同一時間我會繼續更新下一期深扒現今大學計算機專業七宗罪第二罪面向教材編程祝大家晚安,好夢 ...

    不知名網友 評論0 收藏0
  • 凱文•斯拉文:算法塑造世界

    摘要:在中,算法專家凱文斯拉文提起這個故事,并向觀眾展示了算法控制的圖景。斯拉文把算法稱之為計算機用于決策的數學。凱文斯拉文表示我們正在用炸藥和巖石鋸打穿美國,讓算法能早微秒完成交易,所有的一切都是為了一個前所未有的通訊系統。 The Making of a Fly,這是一本1992年出版的學術書籍,受研究者喜歡。2011年4月8日,一家書商對其的售價為170萬美元,另一家書商標價220萬美元。如...

    iamyoung001 評論0 收藏0
  • 爬蟲初級操作(一)

    摘要:一個對應相應的狀態碼,狀態碼表示協議所返回的響應的狀態。下面將狀態碼歸結如下繼續客戶端應當繼續發送請求。繼續處理由擴展的狀態碼,代表處理將被繼續執行。處理方式丟棄該狀態碼不被的應用程序直接使用,只是作為類型回應的默認解釋。 本篇內容為 python 網絡爬蟲初級操作,內容主要有以下 3 部分: python 關于爬蟲的一些基本操作和知識 靜態網頁抓取 動態網頁抓取 基本操作和知識...

    Ocean 評論0 收藏0
  • 從設計的角度看 Redux

    摘要:協調狀態的這三個方面是前端開發的重要組成部分,對這項任務有不同程度的支持。這使得保持高度統一。的真正威力到目前為止,看上去只是的輔助工具。在的術語中這稱之為派發動作。撤銷重做流行的撤銷重做功能需要系統級規劃。 想閱讀更多優質文章請猛戳GitHub博客,一年百來篇優質文章等著你! 你知道 Redux 真正的作用遠不止狀態管理嗎? 你是否想要了解 Redux 的工作原理? 讓我們深入研究 ...

    fantix 評論0 收藏0

發表評論

0條評論

LoftySoul

|高級講師

TA的文章

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