成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【React進(jìn)階系列】從零開始手把手教你實(shí)現(xiàn)一個(gè)Virtual DOM(一)

PumpkinDylan / 2766人閱讀

摘要:可實(shí)際上并不是創(chuàng)造的,將這個(gè)概念拿過來以后融會(huì)貫通慢慢地成為目前前端最炙手可熱的框架之一。則是將再抽象一層生成的簡(jiǎn)化版對(duì)象,這個(gè)對(duì)象也擁有上的一些屬性,比如等,但它是完全脫離于瀏覽器而存在的。所以今天我要手把手教大家怎么從零開始實(shí)現(xiàn)。

假如你的項(xiàng)目使用了React,你知道怎么做性能優(yōu)化嗎?
你知道為什么React讓你寫shouldComponentUpdate或者React.PureComponent嗎?
你知道為什么React讓你寫Immutable Data Structures嗎?
你知道為什么React讓你在渲染列表時(shí),一定要給每個(gè)子項(xiàng)加一個(gè)key嗎?
你知道為什么React讓你在條件渲染時(shí),不寫if而寫&&操作符或三元操作符嗎?

一切的答案都在Virtual DOM上!
只要你跟著我完成了這個(gè)手寫Virtual DOM的系列,上面的所有問題你都將得到解答,從此進(jìn)入react高手的陣營(yíng)!

現(xiàn)在當(dāng)我們談virtual DOM (VDOM)的時(shí)候,通常會(huì)將React捆綁在一起談??蓪?shí)際上VDOM并不是React創(chuàng)造的,React將這個(gè)概念拿過來以后融會(huì)貫通慢慢地成為目前前端最炙手可熱的框架之一。

什么是VDOM?

首先我們都知道什么是DOM(Document Object Model),簡(jiǎn)單說就是將一個(gè)HTML文檔抽象表達(dá)為樹結(jié)構(gòu)。VDOM則是將DOM再抽象一層生成的簡(jiǎn)化版js對(duì)象,這個(gè)對(duì)象也擁有DOM上的一些屬性,比如id, class等,但它是完全脫離于瀏覽器而存在的。

為什么要用VDOM?

隨著前端技術(shù)的發(fā)展,現(xiàn)在的網(wǎng)頁(yè)應(yīng)用變得越來越龐大,DOM樹也隨之變得復(fù)雜。當(dāng)我們要修改DOM的某個(gè)元素時(shí),我們需要先遍歷找個(gè)這個(gè)元素,然后才修改能修改。而且如果我們大量地去修改DOM,每次DOM修改瀏覽器就得重繪(repaint)頁(yè)面,有的時(shí)候甚至還得重排(reflow)頁(yè)面,瀏覽器的重排重繪是很損耗性能的。

React是怎么用VDOM解決這個(gè)問題的呢?

首先,在React當(dāng)我們要去修改數(shù)據(jù)的時(shí)候,我們會(huì)調(diào)用React提供的setState方法來修改數(shù)據(jù);

React根據(jù)新的數(shù)據(jù)生成一個(gè)新的VDOM,因?yàn)閂DOM本質(zhì)上只是一個(gè)普通的js對(duì)象,所以這個(gè)過程是很快的;

然后React拿著新生成VDOM和之前的VDOM進(jìn)行對(duì)比(diff算法),找出不同的地方(新增,刪除,修改),生成一個(gè)個(gè)的補(bǔ)?。╬atches);

最后React把這些補(bǔ)丁一次性打到DOM上,完成視圖的修改。

原理其實(shí)還是很直觀的,但React到底是怎么用代碼實(shí)現(xiàn)的呢?其中最關(guān)鍵的一步是React是怎么diff的?如果搞清楚了內(nèi)部的實(shí)現(xiàn)原理,對(duì)于我們使用React來寫出性能更高的代碼至關(guān)重要。所以今天我要手把手教大家怎么從零開始實(shí)現(xiàn)VDOM。

我們的設(shè)計(jì)藍(lán)圖

我們將采用跟React類似的方式

使用JSX來編寫組件;

用Babel將JSX轉(zhuǎn)化為純js(類似hyperscript);

將hyperscript轉(zhuǎn)化成我們的VDOM;

將VDOM渲染到頁(yè)面,形成真實(shí)的DOM;

手動(dòng)更新數(shù)據(jù)并手動(dòng)觸發(fā)更新視圖操作(這部分是react做的,跟VDOM的實(shí)現(xiàn)無關(guān),所以我們手動(dòng)模擬一下);

重復(fù)步驟二和步驟三,得到新的VDOM;

diff新VDOM和舊VDOM,得到需要修改真實(shí)DOM的patches;

把patches一次性打到DOM上,只更新DOM上需要更改的地方。

下面我們開始正式進(jìn)入寫代碼環(huán)節(jié),建議大家打開編輯器跟著我一步一步的敲代碼。這樣手把手教你敲代碼的的博主你去哪里找?還不抓住這個(gè)千載難逢的機(jī)會(huì)????

項(xiàng)目結(jié)構(gòu)

index.html

index.js(所有的邏輯都寫在這個(gè)文件里)

.babelrc(babel的配置頁(yè))

package.json

compiled.js (這個(gè)文件是babel打包自己生成的,不需要自己寫)

大家可以新建一個(gè)目錄,然后新建1-4這四個(gè)文件

從零開始手把手教你實(shí)現(xiàn)一個(gè)Virtual DOM(二)

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/94560.html

相關(guān)文章

  • React進(jìn)階系列從零開始把手教你實(shí)現(xiàn)個(gè)Virtual DOM(二)

    摘要:上集回顧從零開始手把手教你實(shí)現(xiàn)一個(gè)一上一集我們介紹了什么是,為什么要用,以及我們要怎樣來實(shí)現(xiàn)一個(gè)。完成后,在命令行中輸入安裝下依賴。最后返回這個(gè)目標(biāo)節(jié)點(diǎn)。明天,我們迎接挑戰(zhàn),開始處理數(shù)據(jù)變動(dòng)引起的重新渲染,我們要如何新舊,生成補(bǔ)丁,修改。 上集回顧 從零開始手把手教你實(shí)現(xiàn)一個(gè)Virtual DOM(一)上一集我們介紹了什么是VDOM,為什么要用VDOM,以及我們要怎樣來實(shí)現(xiàn)一個(gè)VDOM...

    dendoink 評(píng)論0 收藏0
  • React進(jìn)階系列從零開始把手教你實(shí)現(xiàn)個(gè)Virtual DOM(三)

    摘要:函數(shù)依次做了這幾件事調(diào)用函數(shù),對(duì)比新舊兩個(gè),根據(jù)兩者的不同得到需要修改的補(bǔ)丁將補(bǔ)丁到真實(shí)上當(dāng)計(jì)數(shù)器小于等于的時(shí)候,將加,再繼續(xù)下一次當(dāng)計(jì)數(shù)器大于的時(shí)候,結(jié)束下面我們來實(shí)現(xiàn)函數(shù)和函數(shù)。 上集回顧 【React進(jìn)階系列】從零開始手把手教你實(shí)現(xiàn)一個(gè)Virtual DOM(二) 上集我們實(shí)現(xiàn)了首次渲染從JSX=>Hyperscript=>VDOM=>DOM的過程,今天我們來看一下當(dāng)數(shù)據(jù)變動(dòng)的時(shí)...

    qqlcbb 評(píng)論0 收藏0
  • Vue.js最佳實(shí)踐(五招讓你成為Vue.js大師)

    摘要:但如果你想更加高效地使用來開發(fā),成為大師,那下面我要傳授的這五招你一定得認(rèn)真學(xué)習(xí)一下了。雖然損失了一丟丟性能,但避免了無限的。所以我們需要設(shè)置,這些默認(rèn)行為將會(huì)被去掉以上兩點(diǎn)的優(yōu)化才能成功。陸續(xù)可能還會(huì)更新一些別的招數(shù),敬請(qǐng)期待。 本文面向?qū)ο笫怯幸欢╒ue.js編程經(jīng)驗(yàn)的開發(fā)者。如果有人需要Vue.js入門系列的文章可以在評(píng)論區(qū)告訴我,有空就給你們寫。 對(duì)大部分人來說,掌握Vue.j...

    CocoaChina 評(píng)論0 收藏0
  • javascript知識(shí)點(diǎn)

    摘要:模塊化是隨著前端技術(shù)的發(fā)展,前端代碼爆炸式增長(zhǎng)后,工程化所采取的必然措施。目前模塊化的思想分為和。特別指出,事件不等同于異步,回調(diào)也不等同于異步。將會(huì)討論安全的類型檢測(cè)惰性載入函數(shù)凍結(jié)對(duì)象定時(shí)器等話題。 Vue.js 前后端同構(gòu)方案之準(zhǔn)備篇——代碼優(yōu)化 目前 Vue.js 的火爆不亞于當(dāng)初的 React,本人對(duì)寫代碼有潔癖,代碼也是藝術(shù)。此篇是準(zhǔn)備篇,工欲善其事,必先利其器。我們先在代...

    Karrdy 評(píng)論0 收藏0
  • 前方來報(bào),八月最新資訊--關(guān)于vue2&3的最佳文章推薦

    摘要:哪吒別人的看法都是狗屁,你是誰只有你自己說了才算,這是爹教我的道理。哪吒去他個(gè)鳥命我命由我,不由天是魔是仙,我自己決定哪吒白白搭上一條人命,你傻不傻敖丙不傻誰和你做朋友太乙真人人是否能夠改變命運(yùn),我不曉得。我只曉得,不認(rèn)命是哪吒的命。 showImg(https://segmentfault.com/img/bVbwiGL?w=900&h=378); 出處 查看github最新的Vue...

    izhuhaodev 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<