欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

你應(yīng)該要知道的Vue.js-創(chuàng)新互聯(lián)

原文:你應(yīng)該要知道的Vue.js

創(chuàng)新互聯(lián)是一家專(zhuān)注于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計(jì),漢源網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:漢源等地區(qū)。漢源做網(wǎng)站價(jià)格咨詢(xún):13518219792

該篇文章主要對(duì)Vue中應(yīng)該要掌握的知識(shí)點(diǎn)的一些整理。只是一個(gè)引子,并沒(méi)有過(guò)多的深入,但是希望能根據(jù)這篇文章從各個(gè)點(diǎn)對(duì)Vue有一個(gè)更好的了解,對(duì)自己有一個(gè)更好的定位。只會(huì)用API的前端不是好的程序員。

組件data為什么必須是函數(shù)?
因?yàn)榻M件可能被多處使用,但它們的data是私有的,所以每個(gè)組件都要return一個(gè)新的data對(duì)象,如果共享data,修改其中一個(gè)會(huì)影響其他組件

組件通信
父子組件通信:$on、$emit
非父子組件的通信: event bus
復(fù)雜情況: vuex
怎么動(dòng)態(tài)添加組件
場(chǎng)景:在vue中,點(diǎn)擊button,隨機(jī)生成a、b、c組件中的一個(gè)

is
render
思路:設(shè)定一個(gè)components數(shù)組,button點(diǎn)擊一次,push一個(gè)組件名,v-for遍歷components,并用is或render動(dòng)態(tài)生成

vue-loader是什么?
vue-loader 是一個(gè) webpack 的 loader,可以將單文件組件轉(zhuǎn)換為 JavaScript 模塊

引用文檔的說(shuō)法:

默認(rèn)支持 ES2015;
允許對(duì) Vue 組件的組成部分使用其它 webpack loader,比如對(duì) <style> 使用 Sass 和對(duì) <template> 使用 Jade;
.vue 文件中允許自定義節(jié)點(diǎn),然后使用自定義的 loader 進(jìn)行處理;
把 <style> 和 <template> 中的靜態(tài)資源當(dāng)作模塊來(lái)對(duì)待,并使用 webpack loader 進(jìn)行處理;
對(duì)每個(gè)組件模擬出 CSS 作用域;
支持開(kāi)發(fā)期組件的熱重載。
實(shí)現(xiàn) Vue
主要通過(guò)vue-server-renderer將Vue組件輸出成HTML,過(guò)程:

客戶(hù)端 entry-client 主要作用掛載到 DOM 上,服務(wù)端 entry-server 除了創(chuàng)建和返回實(shí)例,還進(jìn)行路由匹配與數(shù)據(jù)預(yù)獲取
webpack打包客戶(hù)端為client-bundle,打包服務(wù)端為server-bundle
服務(wù)器接收請(qǐng)求,根據(jù) url 來(lái)加載相應(yīng)組件,然后生成 html 發(fā)送給客戶(hù)端
客戶(hù)端激活, Vue 在瀏覽器端接管由服務(wù)端發(fā)送的靜態(tài) HTML,使其變?yōu)橛?Vue 管理的動(dòng)態(tài) DOM,為確?;旌铣晒?,客戶(hù)端與服務(wù)器端需要共享同一套數(shù)據(jù)。在服務(wù)端,可以在渲染之前獲取數(shù)據(jù),填充到 stroe 里,這樣,在客戶(hù)端掛載到 DOM 之前,可以直接從 store 里取數(shù)據(jù)。首屏的動(dòng)態(tài)數(shù)據(jù)通過(guò) window.INITIAL_STATE 發(fā)送到客戶(hù)端
數(shù)據(jù)雙向綁定原理
實(shí)現(xiàn)數(shù)據(jù)綁定的常見(jiàn)做法:

Object.defineProperty:劫持各個(gè)屬性的setter,getter
臟值檢測(cè):通過(guò)特定事件進(jìn)行輪循
發(fā)布/訂閱模式:通過(guò)消息發(fā)布并將消息進(jìn)行訂閱
vue采用的是數(shù)據(jù)劫持結(jié)合發(fā)布者-訂閱者模式的方式,通過(guò)Object.defineProperty()來(lái)實(shí)現(xiàn)對(duì)屬性的劫持,并在數(shù)據(jù)變動(dòng)時(shí)發(fā)布消息給訂閱者,使其觸發(fā)相應(yīng)的監(jiān)聽(tīng)回調(diào)。

具體步驟:

1、 實(shí)現(xiàn)Observer

將需要observe的數(shù)據(jù)對(duì)象進(jìn)行遞歸遍歷,包括子屬性對(duì)象的屬性,都加上setter和getter。實(shí)現(xiàn)一個(gè)消息訂閱器,維護(hù)一個(gè)數(shù)組,用來(lái)收集訂閱者,數(shù)據(jù)變動(dòng)觸發(fā)notify,再調(diào)用訂閱者的update方法

2、 實(shí)現(xiàn)Compile

compile解析模板指令,將模板中的變量替換成數(shù)據(jù),然后初始化渲染頁(yè)面視圖,并將每個(gè)指令對(duì)應(yīng)的節(jié)點(diǎn)綁定更新函數(shù),添加監(jiān)聽(tīng)數(shù)據(jù)的訂閱者,一旦數(shù)據(jù)有變動(dòng),收到通知,更新視圖

3、 實(shí)現(xiàn)Watcher

Watcher訂閱者是Observer和Compile之間通信的橋梁

主要做的事情是:

在自身實(shí)例化時(shí)往屬性訂閱器(dep)里面添加自己
自身必須有一個(gè)update()方法
待屬性變動(dòng)dep.notice()通知時(shí),能調(diào)用自身的update()方法,并觸發(fā)Compile中綁定的回調(diào),則功成身退。
4、 實(shí)現(xiàn)MVVM

MVVM作為數(shù)據(jù)綁定的入口,整合Observer、Compile和Watcher三者,通過(guò)Observer來(lái)監(jiān)聽(tīng)自己的model數(shù)據(jù)變化,通過(guò)Compile來(lái)解析編譯模板指令,最終利用Watcher搭起Observer和Compile之間的通信橋梁,達(dá)到數(shù)據(jù)變化 -> 視圖更新;視圖交互變化(input) -> 數(shù)據(jù)model變更的雙向綁定效果

參考:剖析Vue原理&實(shí)現(xiàn)雙向綁定MVVM

對(duì)Vue.js的template編譯的理解
template會(huì)被編譯成AST語(yǔ)法樹(shù),AST會(huì)經(jīng)過(guò)generate得到render函數(shù),render的返回值是VNode,VNode是Vue的虛擬DOM節(jié)點(diǎn)

parse 過(guò)程,將 template 利用正則轉(zhuǎn)化成 AST 抽象語(yǔ)法樹(shù)。
optimize 過(guò)程,標(biāo)記靜態(tài)節(jié)點(diǎn),后 diff 過(guò)程跳過(guò)靜態(tài)節(jié)點(diǎn),提升性能。
generate 過(guò)程,生成 render 字符串
司徒大佬有一篇很好的文章:前端模板的原理與實(shí)現(xiàn)

vue 為什么采用Virtual DOM?
一方面是出于性能方面的考量:

創(chuàng)建真實(shí)DOM的代價(jià)高:真實(shí)的 DOM 節(jié)點(diǎn) node 實(shí)現(xiàn)的屬性很多,而 vnode 僅僅實(shí)現(xiàn)一些必要的屬性,相比起來(lái),創(chuàng)建一個(gè) vnode 的成本比較低。
觸發(fā)多次瀏覽器重繪及回流:使用 vnode ,相當(dāng)于加了一個(gè)緩沖,讓一次數(shù)據(jù)變動(dòng)所帶來(lái)的所有 node 變化,先在 vnode 中進(jìn)行修改,然后 diff 之后對(duì)所有產(chǎn)生差異的節(jié)點(diǎn)集中一次對(duì) DOM tree 進(jìn)行修改,以減少瀏覽器的重繪及回流
但是性能受場(chǎng)景的影響是非常大的,不同的場(chǎng)景可能造成不同實(shí)現(xiàn)方案之間成倍的性能差距,所以依賴(lài)細(xì)粒度綁定及 Virtual DOM哪個(gè)的性能更好不是一個(gè)容易下定論的問(wèn)題。更重要的原因是為了解耦HTML依賴(lài),這帶來(lái)兩個(gè)非常重要的好處是:

不再依賴(lài) HTML 解析器進(jìn)行模版解析,可以進(jìn)行更多的 AOT 工作提高運(yùn)行時(shí)效率:通過(guò)模版 AOT 編譯,Vue 的運(yùn)行時(shí)體積可以進(jìn)一步壓縮,運(yùn)行時(shí)效率可以進(jìn)一步提升;
可以渲染到 DOM 以外的平臺(tái),同構(gòu)渲染這些高級(jí)特性,Weex 等框架應(yīng)用的就是這一特性。
綜上,Virtual DOM 在性能上的收益并不是最主要的,更重要的是它使得 Vue 具備了現(xiàn)代框架應(yīng)有的高級(jí)特性。

diff算法
這部分比較復(fù)雜,不好懂,推薦一篇不錯(cuò)的文章: 解析vue2.0的diff算法

vue 和 react 區(qū)別
相同點(diǎn):

都有Virtual DOM
組件化開(kāi)發(fā)
數(shù)據(jù)驅(qū)動(dòng)
...
不同點(diǎn):

vue推薦的是使用 webpack + vue-loader 的單文件組件格式,React 推薦的做法是 JSX + inline style
vue 的Virtual DOM是追蹤每個(gè)組件的依賴(lài)關(guān)系,不會(huì)渲染整個(gè)組件樹(shù),react 每當(dāng)應(yīng)該狀態(tài)被改變時(shí),全部子組件都會(huì) re-render

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞名稱(chēng):你應(yīng)該要知道的Vue.js-創(chuàng)新互聯(lián)
新聞來(lái)源:http://chinadenli.net/article14/dhggge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、建站公司、域名注冊(cè)外貿(mào)建站面包屑導(dǎo)航、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化