前端混沌元件初探

2021-10-09 04:54:10 字數 2581 閱讀 7656

混沌即混沌工程,首先我們得知道混沌工程是什麼。

混沌工程起源於netflix公司,netflix公司的工程師建立了一種驗證服務可靠性的測試工具chaos monkey。使用這個工具,可以在我們的web系統中隨機的製造一些麻煩,比如觸發網路異常,流量激增,容器退出等異常,我們可以在這些異常發生時,觀察我們的系統是否依舊按照我們預期的方式執行。假設在流量激增突破承載能力的場景下,我們的系統是否會觸發熔斷機制來保障功能穩定執行。該工具最大的作用是,讓故障在造成重大損失之前暴露出來,給工程師提供足夠的時間和機會來修復問題。隨著時間的發展,混動工具演變成了一套方**,用來指導工程師如何讓系統提前暴露問題,及時修復問題。

目前國內很多大廠都有相關的混沌工程實踐,不過多數都在後端領域實踐,在前端中實踐混沌工程的相對較少。那在前端中,如何將混沌的方**和思想落地呢?

近期在逛github的時候,找到了乙個讓react元件混沌起來的開源庫 react-chaos。這個元件的功能非常簡單,它提供了乙個高階元件,該高階元件的功能是通過乙個隨機數,讓元件隨機的throw exception出來。如果你的元件沒有處理異常的**,那元件在頁面就不會渲染出來的,並且在控制台中會顯示出相應的錯誤資訊。出錯時的效果如下圖所示:

我們來看看他的原始碼

const withchaos =

( level: level,

errormessage?

: string,

runinproduction?

: boolean

): withchaosreturn =>

if(process.env.

node_env

==='production'

&& runinproduction)

return

class

extends react.component

errormessage=

runinproduction=

>

...this

.props}

/>

<

/chaos>);

}};}

;

高階元件withchaos會把傳入的原始元件用chaos元件wrap之後返回,chaos除了實現混沌相關的邏輯外,沒有其他的用途,下面是chaos的原始碼

export

function

chaos

(: args)

:jsx

.element |

null

chaos元件中通過createchaos函式返回的值來判斷是否渲染children元件

if

(process.env.

node_env

==='production'

&&!runinproduction)if(

typeof level !==

'number')`

);}const chaoslevel = level !==5?

convertchaoslevel

(level)

:0.5

;const chaoson = math.

random()

>= chaoslevel;

if(chaoson)

return

false

;

createchaos函式的核心邏輯就是建立乙個隨機數來實現元件隨機拋異常。

這個庫功能和原理雖然簡單,但它其實是混沌思想在前端的乙個非常好的實踐。它能讓你檢測出你的react元件是否對**異常有比較完善的處理機制。

如果想要讓元件具有隨機拋異常的功能,需要通過react-chaos的withchaos來將元件hoc一下。當你專案中元件非常多且想都增加這個功能的時候,如果每個元件都去手動withchaos然後返回,那工作量會比較大。所以我這邊寫了乙個babel外掛程式,可以在webpack構建的時候,自動的將react元件使用withchaos包裹並返回。

這個外掛程式所做的事情就是通過babel提供的操作ast的能力,將源**轉換為帶有withchaos呼叫的**

import react from

'react'

function

hello()

export

default hello;

轉換後

import react from

'react'

import withchaos from

'react-chaos'

function

hello()

export

default

withchaos

(hello,

|chaoslevel|

);

前端初探 JavaScript

如果說html 是乙個簡單的靜態網頁,就像人素顏一樣。css樣式會讓頁面更加酷炫,就像化上妝一樣,js讓頁面可以動態變化,給頁面新增了動畫效果,檢測訪客的瀏覽資訊。事件繫結有三種 第一種 在html 標籤中進行事件繫結 在頁面中 function tnbclick 第二種 物件.事件 fn 例如do...

Web前端CSS初探

通過對 css和 html 中div 的簡單設定就可以做乙個非常漂亮的頁面,只不過就是有點繁瑣,不過只要有耐心,做乙個簡單的好看的頁面還是可以的。css中最最基礎的是對和文字的設定。頁面大多都是有文字和組成的,對文字和的設定是最基本要學會的。文字設定 也許剛開始學習的時候不是特別明白為什麼對文字進行...

Android 桌面元件 widget 初探

2 在 android 如何使用 widget getinstalledproviders 返回乙個list的資訊 getinstance context context 3 後台註冊receiver 5 如何使textview 在兩種文字間來回跳轉 問題丟擲來了,那麼一起解決它吧。如下 主要 如下...