溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

vuejs怎么樣

發(fā)布時(shí)間:2021-09-07 09:42:56 來源:億速云 閱讀:120 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)vuejs怎么樣的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

vuejs是一套用于構(gòu)建用戶界面的漸進(jìn)式JavaScript框架,Vue的核心庫只關(guān)注視圖層,不僅易于上手,還便于與第三方庫或既有項(xiàng)目整合。Vue.js的目標(biāo)是通過盡可能簡單的API實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件。

本教程操作環(huán)境:windows7系統(tǒng)、vue2.9.6版,DELL G3電腦。

Vue (讀音 /vju?/,類似于 view) 是一套用于構(gòu)建用戶界面的漸進(jìn)式JavaScript框架。與其它大型框架不同的是,Vue 被設(shè)計(jì)為可以自底向上逐層應(yīng)用。Vue 的核心庫只關(guān)注視圖層,不僅易于上手,還便于與第三方庫或既有項(xiàng)目整合。另一方面,當(dāng)與現(xiàn)代化的工具鏈以及各種支持類庫結(jié)合使用時(shí),Vue 也完全能夠?yàn)閺?fù)雜的單頁應(yīng)用(SPA)提供驅(qū)動。

Vue.js 的目標(biāo)是通過盡可能簡單的 API 實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件。

Vue.js 自身不是一個(gè)全能框架——它只聚焦于視圖層。因此它非常容易學(xué)習(xí),非常容易與其它庫或已有項(xiàng)目整合。另一方面,在與相關(guān)工具和支持庫一起使用時(shí)  ,Vue.js 也能驅(qū)動復(fù)雜的單頁應(yīng)用。

Vue.js的優(yōu)點(diǎn)

  • 體積?。簤嚎s后只有33k;

  • 更高的運(yùn)行效率:基于虛擬DOM,一種可以預(yù)先通過JavaScript進(jìn)行各種計(jì)算,把最終的DOM操作計(jì)算出來并優(yōu)化的技術(shù),由于這種DOM操作屬于預(yù)處理操作,并沒有真實(shí)的操作DOM,所以叫做虛擬DOM;

  • 雙向數(shù)據(jù)綁定:讓開發(fā)者不用再去操作DOM對象,把更多的精力投入到業(yè)務(wù)邏輯上;

  • 生態(tài)豐富、學(xué)習(xí)成本低:市場上擁有大量成熟、穩(wěn)定的基于vue.js的ui框架及組件,拿來即用實(shí)現(xiàn)快速開發(fā);對初學(xué)者友好、入門容易、學(xué)習(xí)資料多;

為什么要使用Vue.js

隨著前端技術(shù)的不斷發(fā)展,前端開發(fā)能夠處理的業(yè)務(wù)越來越多,網(wǎng)頁也變得越來越強(qiáng)大和動態(tài)化,這些進(jìn)步都離不開JavaScript。在目前的開發(fā)中,已經(jīng)把很多服務(wù)端的代碼放到了瀏覽器中來執(zhí)行,這就產(chǎn)生了成千上萬行的JavaScript代碼,他們連接著各式各樣的HTML和CSS文件,但是缺乏正規(guī)的組織形式。這也是為什么越來越多的前端開發(fā)者使用JavaScript框架的原因,目前比較流行的前端框架有Angular、Reac、Vue等。

Vue是一款友好的、多用途且高性能的JavaScript框架,它能夠幫助你創(chuàng)建可維護(hù)性和可測試性更強(qiáng)的代碼庫。Vue是漸進(jìn)式的JavaScript框架,也就是說,如果你已經(jīng)有了現(xiàn)成的服務(wù)端應(yīng)用,你可以將Vue作為該應(yīng)用的一部分嵌入其中,帶來更加豐富的交互體驗(yàn)?;蛘呷绻阆M麑⒏鄻I(yè)務(wù)邏輯放到前端來實(shí)現(xiàn),那么Vue的核心庫及其生態(tài)系統(tǒng)也可以滿足你的各式需求。

和其他框架一樣,Vue允許你將一個(gè)網(wǎng)頁分割成可復(fù)用的組件,每個(gè)組件都包含屬于自己的HTML、CSS、JavaScript,以用來渲染網(wǎng)頁中相應(yīng)的地方。如果我們構(gòu)建了一個(gè)大型的應(yīng)用,可能需要將東西分割成為各自的組件和文件,使用Vue的命令行工具,使快速初始化一個(gè)真實(shí)的工程變得非常簡單。

vue init webpack my-project

我們甚至可以使用Vue的單文件組件,它包含了各自的HTML、JavaScript以及帶作用域的CSS或SCSS。

數(shù)據(jù)驅(qū)動(雙向數(shù)據(jù)綁定)的原理

什么是數(shù)據(jù)驅(qū)動

數(shù)據(jù)驅(qū)動是Vue.js最大的特點(diǎn)。在vue中,所謂的數(shù)據(jù)驅(qū)動就是當(dāng)數(shù)據(jù)發(fā)生變化時(shí),用戶界面發(fā)生相應(yīng)的變化,開發(fā)者不需要手動的去修改DOM。

比如,我們點(diǎn)擊一個(gè)button,需要元素的文本做一個(gè) “是/否” 的切換操作,在傳統(tǒng)的jQuery中,對于頁面修改的流程通常是:對button綁定事件,然后獲取文案對應(yīng)元素的dom對象,最后根據(jù)切換來修改dom對象的文本值。

Vue實(shí)現(xiàn)數(shù)據(jù)驅(qū)動

vue實(shí)現(xiàn)數(shù)據(jù)雙向綁定主要采用數(shù)據(jù)劫持,配合發(fā)布者-訂閱者模式的方式,通過 Object.defineProperty() 來劫持各個(gè)屬性的 settergetter ,在數(shù)據(jù)變動時(shí)發(fā)布消息給訂閱者,觸發(fā)相應(yīng)監(jiān)聽回調(diào)。

當(dāng)一個(gè)普通 JavaScript 對象傳給 Vue 實(shí)例來作為它的 data 選項(xiàng)時(shí),vue 將遍歷它的屬性,用 Object.defineProperty 將它們轉(zhuǎn)為 getter/setter 。用戶看不到 getter/setter ,但是在內(nèi)部它們讓vue追蹤依賴,在屬性被訪問和修改時(shí)通知變化。

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

vuejs怎么樣

getter和setter的理解

當(dāng)打印出vue實(shí)例下的data對象里的屬性,它的每個(gè)屬性都有兩個(gè)對應(yīng)的get和set方法。顧名思義,get為取值方法,set為賦值方法。正常情況下,取值和賦值是用 obj.prop 的方式,但是這樣做有一個(gè)問題,我們?nèi)绾沃缹ο蟮闹蹈淖兞耍?/p>

我們可以把get和set理解為function,當(dāng)我們調(diào)用對象的屬性時(shí),會進(jìn)入到 get.屬性(){…} 中,先判斷對象是否有這個(gè)屬性,如果沒有,那么就添加一個(gè)name屬性,并給它賦值;如果有name屬性,那么就返回name屬性??梢园裧et看成一個(gè)取值的函數(shù),函數(shù)的返回值就是它拿到的值。

當(dāng)給實(shí)例賦值時(shí),會進(jìn)入 set.屬性(val){…} 中,形參val就是賦給屬性的值,在這個(gè)函數(shù)里做了很多事情,比如雙向綁定等等。因?yàn)檫@個(gè)值每次都要經(jīng)過set,其他方式無法對該值做修改。在ES5中,對象原型有兩個(gè)屬性,_defineGetter__defineSetter_ ,專門用來給對象綁定get和set。

虛擬DOM

什么是虛擬DOM

在Vue.js 2.0版本中引入了 Virtual DOM 的概念,Virtual DOM 其實(shí)就是一個(gè)以JavaScript對象(VNode節(jié)點(diǎn))作為基礎(chǔ)來模擬DOM結(jié)構(gòu)的樹形結(jié)構(gòu),這個(gè)樹形結(jié)構(gòu)包含了整個(gè)DOM結(jié)構(gòu)的信息。簡單來說,可以把Virtual DOM理解為一個(gè)簡單的JS對象,并且最少包含標(biāo)簽名(tag)、屬性(attrs)和子元素對象(children)三個(gè)屬性。不同的框架對這三個(gè)屬性的命名會有所差別。

模板轉(zhuǎn)換成視圖的過程

通過一個(gè)簡單的實(shí)例,來說明虛擬DOM到真實(shí)DOM的渲染過程:

創(chuàng)建模板:

<ul id="app">
	<li v-for="item in list">{{item}}</li>
</ul>

首先將上面的模板編譯成渲染函數(shù):

createElement(
	"ul", //節(jié)點(diǎn)標(biāo)簽名
	{ //標(biāo)簽上的屬性,用對象存儲鍵值對
		attr:{
			id:"app"
		}
	},
	[ //該節(jié)點(diǎn)的子節(jié)點(diǎn)
		createElement("li",1),
		createElement("li",2),
		createElement("li",3)
	]
)

然后將上面的渲染函數(shù),渲染出虛擬DOM樹:

VNode: {
	child: undefined,
	children: [
		VNode-0:{...},
		VNode-1:{...},
		VNode-2:{...}
	],
	elm:{...} //ul
}

最后由虛擬DOM樹生成真實(shí)DOM:

<ul>
	<li>1</li>
	<li>2</li>
	<li>3</li>
</ul>

實(shí)現(xiàn)過程如下圖:

vuejs怎么樣

虛擬DOM的作用

虛擬DOM的最終目標(biāo)是將虛擬節(jié)點(diǎn)渲染到視圖上。但是如果直接使用虛擬節(jié)點(diǎn)覆蓋舊節(jié)點(diǎn)的話,會有很多不必要的DOM操作。例如,一個(gè)ul標(biāo)簽下有很多個(gè)li標(biāo)簽,其中只有一個(gè)li標(biāo)簽有變化,這種情況下如果使用新的ul去替代舊的ul,會因?yàn)檫@些不必要的DOM操作而造成性能上的浪費(fèi)。

為了避免不必要的DOM操作,虛擬DOM在虛擬節(jié)點(diǎn)映射到視圖的過程中,將虛擬節(jié)點(diǎn)與上一次渲染視圖所使用的舊虛擬節(jié)點(diǎn)做對比,找出真正需要更新的節(jié)點(diǎn)來進(jìn)行DOM操作,從而避免操作其他不需要改動的DOM元素。

其實(shí),虛擬DOM在Vue.js中主要做了兩件事情:

  • 提供與真實(shí)DOM節(jié)點(diǎn)所對應(yīng)的虛擬節(jié)點(diǎn)VNode

  • 將虛擬節(jié)點(diǎn)VNode和舊虛擬節(jié)點(diǎn)oldVNode進(jìn)行對比,然后更新視圖

為什么要使用虛擬DOM

  • 具備跨平臺優(yōu)勢,由于Virtual DOM 是以JavaScript對象為基礎(chǔ)而不依賴真實(shí)平臺環(huán)境,所以使它具有了跨平臺的能力,比如說瀏覽器平臺、Weex、Node等。

  • 操作DOM慢,JS運(yùn)行效率高,可以將DOM對比操作放在JS層,提高效率。因?yàn)镈OM操作的執(zhí)行速度遠(yuǎn)不如JavaScript運(yùn)算速度快,因此,把大量的DOM操作搬運(yùn)到JavaScript中,運(yùn)用patching算法來計(jì)算出真正需要更新的節(jié)點(diǎn),最大限度地減少DOM操作,從而顯著提高性能。Vritual DOM本質(zhì)上就是在JS和DOM之間做了一個(gè)緩存,JS只操作Virtual DOM,最后把變更寫入到真實(shí)DOM。

  • 提高渲染性能,Virtual DOM的優(yōu)勢不在于單次的操作,而是在大量、頻繁的數(shù)據(jù)更新下,能夠?qū)σ晥D進(jìn)行合理、高效的更新。

感謝各位的閱讀!關(guān)于“vuejs怎么樣”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI