為什么虛擬dom會(huì)提高性能
因?yàn)樘摂Mdom相當(dāng)于在真實(shí)dom間加了層緩存幼东,極大減少了直接dom操作
react用js對(duì)象存儲(chǔ)虛擬dom樹,當(dāng)state發(fā)生變化時(shí)檀夹,生成新的虛擬dom樹筋粗,利用diff算法對(duì)比前后兩個(gè)虛擬dom樹,將差異跟新到真實(shí)dom樹上
const element = React.createElement(
'h1',
{className: 'greeting'},
'Hello, world!'
);
diff算法
深度優(yōu)先遍歷虛擬dom炸渡,返回一個(gè)補(bǔ)丁包娜亿,補(bǔ)丁內(nèi)以action形式存儲(chǔ), keys包含 刪除蚌堵,替換等標(biāo)識(shí)买决,從根結(jié)點(diǎn)開始,同層比較吼畏,優(yōu)先判斷節(jié)點(diǎn)類型督赤,某節(jié)點(diǎn)不一致的時(shí)候直接替換該節(jié)點(diǎn)的子樹。
合并操作泻蚊,標(biāo)記為 dirty.到每一個(gè)事件循環(huán)結(jié)束, React 檢查所有標(biāo)記 dirty 的組件進(jìn)行重新繪制