掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
通過今天的學(xué)習(xí),你將收獲這些內(nèi)容:

創(chuàng)新互聯(lián)服務(wù)項目包括盂縣網(wǎng)站建設(shè)、盂縣網(wǎng)站制作、盂縣網(wǎng)頁制作以及盂縣網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,盂縣網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到盂縣省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
首先來想一個問題。比如在 vue 中一次更新中。
姓名: {{ name }}
年齡: {{ age }}
如上是一個非常簡單的邏輯代碼,點擊按鈕,會觸發(fā) name 和 age 的更新。那么首先想一個問題就是:
那么暴露的問題就是,我們在 handleClick 中,同時改變了 name 和 age 屬性,那么按照正常情況下,會分別觸發(fā) name 和 age 的 set,那么如果不做處理,那么會讓渲染 watcher 執(zhí)行兩次,結(jié)果就是組件會 update 兩次,但是結(jié)果是這樣的嗎?
結(jié)果是:vue 底層通過批量處理,只讓組件 update 一次。
上面介紹了在 vue 中更新批處理的案例之后,我們來看一下在 react 中的批量更新處理。把上述案例用 react 來實現(xiàn)一下:
function Index(){
const [ age , setAge ] = React.useState(0)
const [ name, setName ] = React.useState('')
return
姓名: {name}
年齡: {age}
}點擊按鈕,觸發(fā)更新,會觸發(fā)兩次 useState 的更新函數(shù)。那么 React 的更新流程大致是這樣的。
那么按常理來說,Index 組件會執(zhí)行兩次??墒聦嵤侵粓?zhí)行一次 render。
通過上面的案例說明在主流框架中,對于更新都采用批處理。一次上下文中的 update 會被合并成一次更新。那么為什么要進(jìn)行更新批處理呢?
批處理主要是出于對性能方面的考慮,這里拿 react 為例子,看一下批處理前后的對比情況:
/ ------ js 層面 ------
/ ------ 瀏覽器渲染 ------
我們可以看到如果沒有批量更新處理,那么會多走很多步驟,包括 render 階段 ,commit 階段,dom 的更新等,這些都會造成性能的浪費,接下來看一下有批量更新的情況。
/ ------ js 層面 ------
/ ------ 瀏覽器渲染 ------
從上面可以直觀看到更新批處理的作用了,本質(zhì)上在 js 的執(zhí)行上下文上優(yōu)化了很多步驟,減少性能開銷。
在正式講批量更新之前,先來溫習(xí)一下宏任務(wù)和微任務(wù),這應(yīng)該算是前端工程師必須掌握的知識點。
所謂宏任務(wù),我們可以理解成,
打印結(jié)果:
分析一下核心流程:
React進(jìn)階實踐指南

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流