-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
vue畫心電圖(canvas畫心電圖)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于vue畫心電圖的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
ChatGPT國內(nèi)免費在線使用,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com
本文目錄:
一、Ionic vue 初探
Ionic 是一個廣為人知的橋接app開發(fā)方案,它豐富的組件以及完善的文檔,對于快速開發(fā)app是一種好的選擇。然而不同的人使用的技術(shù)棧不一樣, Ionic 組件已經(jīng)可以和 Vue 集成,對于使用 Vue 開發(fā)移動端應(yīng)用的同學(xué)來說,多了一種選擇。
github地址
本篇主要參照Youtube視頻: https://www.youtube.com/watch?v=6H1wftPS0oo
在彈出的 preset 選擇中,選擇 `default (babel, eslint)
創(chuàng)建成功之后,進入到 ionic-vue-test 工作路徑中,安裝 @ionic/vue ,并且添加 router
使用 vscode 打開 ionic-vue-test 路徑,打開 main.js 文件,改造為
對于 router ,使用基于 VueRouter 的 IonicVueRouter ,改造 router.js
相應(yīng)的,去掉 App.vue 中的內(nèi)容,使用 <ion-app> 包裝, <ion-app> 代表 ionic 應(yīng)用的入口
現(xiàn)在即可以放心的使用 Ionic 中的組件啦。在 Home.vue 中,刪除原來的內(nèi)容,改造為
執(zhí)行效果貼圖
歡迎留言討論!
二、vue-like(點贊)組件的封裝
寫仿豆瓣的時候經(jīng)常會遇到一個點贊的按鈕,點一下贊了 它的樣式也改變了,然后再點一下還可以取消。于是打算封裝一個點贊的組件
剛開始封裝的時候?qū)⒚看吸c贊和取消點贊的這個邏輯寫到了組件內(nèi)部,后來再看感覺很不合理,所以重新重構(gòu)了一下。
template:
<div id="like" :class="like?'active':''" @click="change">
<span class="img"></span><span>{{count}}</span>
</div>
img是顯示的小心心的點贊圖標(biāo),后面是點贊數(shù)量,因為想到有些點贊按鈕可能沒有數(shù)量,所以count設(shè)置為非必填項。
style:
#like{
width: 100px;
height: 30px;
line-height: 30px;
display: flex;
align-items:center;
justify-content:center;
font-size: 15px;
margin: 30px auto;
color: #42bd56;
border: 1px solid #42bd56;
}
#like .img{
margin-right: 4px;
width: 20px;
height: 20px;
background:url(https://img3.doubanio.com/f/talion/c689ab2369da387f2cb0d4da4a22614d7f048bf9/pics/card/ic_heart_green.svg) no-repeat;
}
#like.active{
color: #333;
border: 1px solid #bfbfbf;
}
#like.active .img{
background-image: url(https://img3.doubanio.com/f/talion/0129352875382ff0544020161709c2ae9b00c737/pics/card/ic_heart_red.svg);
}
樣式當(dāng)時寫的是比較隨意的,點贊的小圖標(biāo)是直接用的豆瓣的圖片。。
script:
分開說吧
props
props:{
count:{
type: Number,
required: false,
},
like:{
type:Boolean,
required:true,
default:false
}
}
因為count可能沒有,所以非必填,like涉及到顯示效果,給他設(shè)置了個默認(rèn)值。
正常來說其實這個組件中是不需要寫邏輯的,但是這里有個問題就是vue2.0中給自定義組件設(shè)置原生事件一定要加native修飾符,那如果使用的時候父組件忘記了呢?所以這里給這個組件設(shè)定了個點擊事件
這個change方法里其實只做了一件事
change:function () {
this.$emit('click');
}
就是觸發(fā)父組件傳遞進來的方法。
所以父組件如果這樣使用
<div class="like">
<Like-it @click="changeValue" count="15" :like="like"></Like-it>
</div>
也不會有任何問題了。
當(dāng)然如果確??梢栽诟附M件中使用@click.native來觸發(fā)原生事件,則組件的上面的操作都可以省略了。
三、React 18 發(fā)布、Vue 3、Vitest、Pinia 正式成為 Vue 官方推薦的狀態(tài)
Pinia 終于轉(zhuǎn)正了,它具有與 Vuex 5 幾乎完全相同或者增強的 API,簡單來說,它就是和 Vuex 5 名字不同。Vuex 3 和 4 仍會繼續(xù)維護,但是新功能不太可能會添加了。Pinia 也支持漸進式遷移,Vuex 和 Pinia 可以安裝在同一個項目中,新項目的話建議直接使用 Pinia。
Vite 發(fā)布了 v2.9.0。
React 18 終于發(fā)布了,官方團隊從 v16 就開始普及并發(fā)概念,到正式版發(fā)布時難免少了一些新鮮感。照目前的發(fā)展趨勢看,React 未來會朝著前端底層“操作系統(tǒng)”的方向發(fā)展,會變得越來越復(fù)雜。這些復(fù)雜的操作又會被元框架(Next.js、Remix)消化掉,開發(fā)者并不會直接接觸,使用這些元框架開發(fā)即可。
穩(wěn)定不停滯,支持增量升級,v5、v6 的版本代碼可以同時存在。
下面是其他的發(fā)布信息和 TC39 提案的一些推進情況,大家可以找感興趣的自行查閱。
下面我們來看技術(shù)資料。
和好朋友卡頌一起在做的項目: 前端賞金獵人 。
這是一個用單純的金錢關(guān)系維系的前端學(xué)習(xí)社區(qū),懸賞答題 + 答題賺錢。
期待你的加入,如果覺得有價值的話,可以給個 Star 鼓勵一下。
把技術(shù)名詞的大小寫拼寫正確是基本的素養(yǎng),但很多人都不重視,這個項目可以幫助你糾正錯誤的大小寫。
免費的編程中文書籍索引,項目已有 90.1k Star。
從 2008 年谷歌瀏覽器推出至今的 100 個精彩瞬間回 憶錄。
在這里插入圖片描述
Pinia 是 Vue.js 的輕量級狀態(tài)管理庫,最近很受歡迎。它使用 Vue 3 中的新反應(yīng)系統(tǒng)來構(gòu)建一個直觀且完全類型化的狀態(tài)管理庫。
Pinia的成功可以歸功于其管理存儲數(shù)據(jù)的獨特功能(可擴展性、存儲模塊組織、狀態(tài)變化分組、多存儲創(chuàng)建等)。
另一方面,Vuex也是為Vue框架建立的一個流行的狀態(tài)管理庫,它也是Vue核心團隊推薦的狀態(tài)管理庫。 Vuex高度關(guān)注應(yīng)用程序的可擴展性、開發(fā)人員的工效和信心。它基于與Redux相同的流量架構(gòu)。
在這篇文章中,我們將對Pinia和Vuex進行比較。我們將分析這兩個框架的設(shè)置、社區(qū)優(yōu)勢和性能。我們還將看一下Vuex 5與Pinea 2相比的新變化。
Pinia 設(shè)置
Pinia 很容易上手,因為它只需要安裝和創(chuàng)建一個store。
要安裝 Pinia,您可以在終端中運行以下命令:
該版本與Vue 3兼容,如果你正在尋找與Vue 2.x兼容的版本,請查看v1分支。
Pinia是一個圍繞Vue 3 Composition API的封裝器。因此,你不必把它作為一個插件來初始化,除非你需要Vue devtools支持、SSR支持和webpack代碼分割的情況:
在上面的片段中,你將Pinia添加到Vue.js項目中,這樣你就可以在你的代碼中使用Pinia的全局對象。
為了創(chuàng)建一個store,你用一個包含創(chuàng)建一個基本store所需的states、actions和getters的對象來調(diào)用 defineStore 方法。
Vuex 也很容易設(shè)置,需要安裝和創(chuàng)建store。
要安裝Vuex,您可以在終端中執(zhí)行以下命令:
要創(chuàng)建store,你可以使用包含創(chuàng)建基本store所需的states、actions和 getter 的對象調(diào)用 createStore 方法:
要訪問 Vuex 全局對象,需要在 Vue.js 項目根文件中添加 Vuex,如下所示:
使用 Pinia,可以按如下方式訪問該store:
請注意,在訪問其屬性時省略了 store 的 state 對象。
使用Vuex,可以按如下方式訪問store:
這兩個狀態(tài)管理庫都相當(dāng)容易學(xué)習(xí),因為它們在 YouTube 和第三方博客上都有很好的文檔和學(xué)習(xí)資源。對于以前有使用 Redux、MobX、Recoil 等 Flux 架構(gòu)庫經(jīng)驗的開發(fā)人員來說,他們的學(xué)習(xí)曲線更容易。
這兩個庫的文檔都很棒,并且以對經(jīng)驗豐富的開發(fā)人員和新開發(fā)人員都友好的方式編寫。
Pinia和Vuex都非??欤谀承┣闆r下,使用Pinia的web應(yīng)用程序會比使用Vuex更快。這種性能的提升可以歸因于Pinia的極輕的重量,Pinia體積約1KB。
盡管Pinia是在Vue devtools的支持下建立的,但由于Vue devtools沒有暴露出必要的API,所以一些功能如時間旅行和編輯仍然不被支持。當(dāng)開發(fā)速度和調(diào)試對你的項目來說更重要時,這是值得注意的。
Pinia 將這些與 Vuex 3 和 4 進行了比較:
這些是Pinia在其狀態(tài)管理庫和Vuex之間的比較中提出的額外見解:
將 Pinia 2(目前處于 alpha 階段)與 Vuex 進行比較,我們可以推斷出 Pinia 領(lǐng)先于 Vuex 4。
Vue.js核心團隊為Vuex 5制定了一個開放的RFC,類似于Pinia使用的RFC。目前,Vuex通過RFC來盡可能多地收集社區(qū)的反饋。希望Vuex 5的穩(wěn)定版本能夠超越Pinea 2。
據(jù)同時也是 Vue.js 核心團隊成員并積極參與 Vuex 設(shè)計的 Pinia 的創(chuàng)建者(Eduardo San Martin Morote)所說,Pania 和 Vuex 的相似之處多于不同之處:
盡管 Pinia 足以取代 Vuex,但取代 Vuex 并不是它的目標(biāo),因此 Vuex 仍然是 Vue.js 應(yīng)用程序的推薦狀態(tài)管理庫。
根據(jù)我的個人經(jīng)驗,由于Pinea是輕量級的,體積很小,它適合于中小型應(yīng)用。它也適用于低復(fù)雜度的Vue.js項目,因為一些調(diào)試功能,如時間旅行和編輯仍然不被支持。
將 Vuex 用于中小型 Vue.js 項目是過度的,因為它重量級的,對性能降低有很大影響。因此,Vuex 適用于大規(guī)模、高復(fù)雜度的 Vue.js 項目。
批處理是 React將多個狀態(tài)更新分組到單個重新渲染中以獲得更好的性能。
例如,如果你在同一個點擊事件中有兩個狀態(tài)更新,React 總是將它們分批處理到一個重新渲染中。如果你運行下面的代碼,你會看到每次點擊時,React 只執(zhí)行一次渲染,盡管你設(shè)置了兩次狀態(tài):
這對性能非常有用,因為它避免了不必要的重新渲染。它還可以防止你的組件呈現(xiàn)僅更新一個狀態(tài)變量的“半完成”狀態(tài),這可能會導(dǎo)致錯誤。
這可能會讓你想起餐廳服務(wù)員在你選擇第一道菜時不會跑到廚房,而是等你完成訂單。
然而,React 的批量更新時間并不一致。例如,如果你需要獲取數(shù)據(jù),然后更新handleClick上面的狀態(tài),那么 React不會批量更新,而是執(zhí)行兩次獨立的更新。
這是因為 React 過去只在瀏覽器事件(如點擊)期間批量更新,但這里我們在事件已經(jīng)被處理(在 fetch 回調(diào)中)之后更新狀態(tài):
在 React 18 之前,我們只在 React 事件處理程序期間批量更新。默認(rèn)情況下,React 中不會對 promise、setTimeout、本機事件處理程序或任何其他事件中的更新進行批處理。
從 React 18 開始createRoot,所有更新都將自動批處理,無論它們來自何處。
這意味著超時、承諾、本機事件處理程序或任何其他事件內(nèi)的更新將以與 React 事件內(nèi)的更新相同的方式進行批處理。
我們希望這會導(dǎo)致更少的渲染工作,從而在你的應(yīng)用程序中獲得更好的性能:
注意:作為采用 React 18 的一部分,預(yù)計你將升級到createRoot。舊行為的render存在只是為了更容易地對兩個版本進行生產(chǎn)實驗。
無論更新發(fā)生在何處,React 都會自動批量更新,因此:
行為與此相同:
通常,批處理是安全的,但某些代碼可能依賴于在狀態(tài)更改后立即從 DOM 中讀取某些內(nèi)容。對于這些用例,你可以使用ReactDOM.flushSync()選擇退出批處理:
2、Suspense 的 SSR 支持
這基本上是服務(wù)器端渲染 (SSR) 邏輯的擴展。在典型的 React SSR 應(yīng)用程序中,會發(fā)生以下步驟:
典型 SSR 應(yīng)用程序的問題在于,在下一步可以開始之前,必須立即完成整個應(yīng)用程序的每個步驟。這會使您的應(yīng)用程序在初始加載時變慢且無響應(yīng)。
React 18 正試圖解決這個問題。 組件已經(jīng)以這樣的方式進行了革命性的改變,它將應(yīng)用程序分解為更小的獨立單元,這些單元經(jīng)過提到的每個步驟。這樣一旦用戶看到內(nèi)容,它就會變成互動的。
我們將狀態(tài)更新分為兩類:
單擊、懸停、滾動或打字等緊急更新需要立即響應(yīng)以匹配我們對物理對象行為方式的直覺。否則他們會覺得“錯了”。
然而,轉(zhuǎn)換是不同的,因為用戶不希望在屏幕上看到每個中間值。
例如,當(dāng)您在下拉列表中選擇過濾器時,您希望過濾器按鈕本身在您單擊時立即響應(yīng)。但是,實際結(jié)果可能會單獨轉(zhuǎn)換。
一個小的延遲是難以察覺的,而且通常是預(yù)料之中的。如果在結(jié)果渲染完成之前再次更改過濾器,您只關(guān)心看到最新的結(jié)果。
在典型的 React 應(yīng)用程序中,大多數(shù)更新在概念上都是過渡更新。但出于向后兼容性的原因,過渡是可選的。
默認(rèn)情況下,React 18 仍然將更新處理為緊急更新,您可以通過將更新包裝到startTransition.
構(gòu)建流暢且響應(yīng)迅速的應(yīng)用程序并不總是那么容易。有時,諸如單擊按鈕或輸入輸入之類的小動作可能會導(dǎo)致屏幕上發(fā)生很多事情。這可能會導(dǎo)致頁面在所有工作完成時凍結(jié)或掛起。
例如,考慮在過濾數(shù)據(jù)列表的輸入字段中鍵入。您需要將字段的值存儲在 state 中,以便您可以過濾數(shù)據(jù)并控制該輸入字段的值。您的代碼可能如下所示:
在這里,每當(dāng)用戶鍵入一個字符時,我們都會更新輸入值并使用新值來搜索列表并顯示結(jié)果。
對于大屏幕更新,這可能會導(dǎo)致頁面在呈現(xiàn)所有內(nèi)容時出現(xiàn)延遲,從而使打字或其他交互感覺緩慢且無響應(yīng)。
即使列表不是太長,列表項本身也可能很復(fù)雜并且每次擊鍵時都不同,并且可能沒有明確的方法來優(yōu)化它們的呈現(xiàn)。
從概念上講,問題在于需要進行兩種不同的更新。第一個更新是緊急更新,用于更改輸入字段的值,以及可能會更改其周圍的一些 UI。
第二個是顯示搜索結(jié)果的不太緊急的更新。
用戶希望第一次更新是即時的,因為這些交互的本機瀏覽器處理速度很快。但是第二次更新可能會有點延遲。
用戶不希望它立即完成,這很好,因為可能有很多工作要做。(實際上,開發(fā)人員經(jīng)常使用去抖動等技術(shù)人為地延遲此類更新。)
在 React 18 之前,所有更新都被緊急渲染。
這意味著上面的兩個狀態(tài)仍然會同時呈現(xiàn),并且仍然會阻止用戶看到他們交互的反饋,直到一切都呈現(xiàn)出來。我們?nèi)鄙俚氖且环N告訴 React 哪些更新是緊急的,哪些不是的方法。
新startTransitionAPI 通過讓您能夠?qū)⒏聵?biāo)記為“轉(zhuǎn)換”來解決此問題:
包裝在其中的更新startTransition被視為非緊急處理,如果出現(xiàn)更緊急的更新(如點擊或按鍵),則會中斷。
如果用戶中斷轉(zhuǎn)換(例如,連續(xù)輸入多個字符),React 將拋出未完成的陳舊渲染工作,僅渲染最新更新。
Transitions 可讓您保持大多數(shù)交互敏捷,即使它們導(dǎo)致顯著的 UI 更改。它們還可以讓您避免浪費時間渲染不再相關(guān)的內(nèi)容。
上述問題的一個常見解決方案是將第二次更新包裝在 setTimeout 中:
這將延遲第二次更新,直到呈現(xiàn)第一次更新之后。節(jié)流和去抖動是這種技術(shù)的常見變體。
一個重要的區(qū)別是startTransition不安排在以后喜歡的setTimeout是。它立即執(zhí)行。傳遞給的函數(shù)startTransition同步運行,但其中的任何更新都標(biāo)記為“轉(zhuǎn)換”。
React 將在稍后處理更新時使用此信息來決定如何呈現(xiàn)更新。這意味著我們比在超時中包裝更新更早地開始呈現(xiàn)更新。
在快速設(shè)備上,兩次更新之間的延遲非常小。在較慢的設(shè)備上,延遲會更大,但 UI 會保持響應(yīng)。
另一個重要的區(qū)別是 a 內(nèi)的大屏幕更新setTimeout仍然會鎖定頁面,只是在超時之后。
如果用戶在超時觸發(fā)時仍在鍵入或與頁面交互,他們?nèi)詫⒈蛔柚古c頁面交互。但是標(biāo)記為 的狀態(tài)更新startTransition是可中斷的,因此它們不會鎖定頁面。
它們讓瀏覽器在呈現(xiàn)不同組件之間的小間隙中處理事件。
如果用戶輸入發(fā)生變化,React 將不必繼續(xù)渲染用戶不再感興趣的內(nèi)容。
最后,因為setTimeout只是延遲更新,顯示加載指示器需要編寫異步代碼,這通常很脆弱。
通過轉(zhuǎn)換,React 可以為您跟蹤掛起狀態(tài),根據(jù)轉(zhuǎn)換的當(dāng)前狀態(tài)更新它,并讓您能夠在用戶等待時顯示加載反饋。
您可以使用startTransition來包裝要移動到后臺的任何更新。通常,這些類型的更新分為兩類:
總結(jié)
React 18 沒有任何重大更改,因此,我們將當(dāng)前的存儲庫升級到最新版本幾乎不需要更改代碼,但我們可以享受它們很酷的功能。
四、uniappvue3vue2性能
新版 uni-app 框架主要做了三大改進:
重寫框架內(nèi)核:基于vue3 + ts重寫內(nèi)置組件和API,實現(xiàn)更徹底、更高效的tree-shaking;
新增支持 Vite 構(gòu)建工具,在H5平臺實現(xiàn)秒開預(yù)覽;
新增支持 Vue3.x,實現(xiàn)更靈活的開發(fā)方式,及更高的運行性能;
基于這三大改進,uni-app項目獲得了多快好省四大收益:
更多的語法支持,支持組合式API,業(yè)務(wù)聚焦,開發(fā)效率更高;
更快的編譯速度,H5平臺十倍加速,小程序、App加速30%以上;
更好的運行性能,用戶端響應(yīng)更快,體驗更好;
更小的代碼體積,瘦身30%以上,更省體積、更省流量
更多的語法支持
新版uni-app支持Vue 3.x框架,支持組合式API,可實現(xiàn)更聚焦的業(yè)務(wù)開發(fā)。
Vue 3.x的一些新增特性,uni-app也已經(jīng)完全支持,如:
支持<script setup>
支持<style scoped>、<style module>、State-Driven Dynamic CSS(v-bind)
支持jsx、tsx(h5,app 平臺支持,小程序不支持)
另外,在小程序平臺,新版uni-app也擴展了更多的語法,如:
更完善的模板語法支持(如 class、style 支持函數(shù)、變量等,不再局限數(shù)組、對象類型)
更完整的 props 支持(如傳遞函數(shù))
更完善的 slot 支持(如作用域插槽)
更快的編譯速度
開發(fā)者日常工作中,最無聊的就是等待編譯構(gòu)建。
某乎上還有一個”程序員在等待編譯的時候都做什么?“的討論帖,可見編譯時間對開發(fā)者而言,是一個多么尷尬無聊的碎片時間。
uni-app本次升級vue3 & Vite后,在編譯時間上有多少改進?帶給開發(fā)者多少福利?我們安排真實測試,以數(shù)據(jù)說話。
測試環(huán)境說明:
硬件:RedmiBook 14 二代
處理器:Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz
內(nèi)存:16.0 GB
操作系統(tǒng):Windows 11 專業(yè)版 64 位操作系統(tǒng)
關(guān)于編譯速度,我們做了兩個維度的對比:
縱向?qū)Ρ龋禾暨xuni-app常用項目模板,在H5、小程序、App平臺,分別測試vue 2.6和vue 3.x的編譯時間
橫向?qū)Ρ龋菏褂脴I(yè)內(nèi)優(yōu)秀的其它跨端框架,創(chuàng)建默認(rèn)項目模板,記錄其編譯時間,和uni-app的vue 3.x版本進行對比
uni-app 歷史版本縱向?qū)Ρ?/p>
我們選擇uni-app默認(rèn)模板、uni-starter、hello-uniapp三個項目模板,分別測試vue 2.6和vue 3.x的編譯時間。
uni-app項目編譯時間的采集方式:
vue 2.6版本編譯時間 = webpack 的 stats.endTime - stats.startTime
vue 3.x版本編譯時間 = 構(gòu)建工具入口處記錄 global.vite_start_time = performance.now(),構(gòu)建工具編譯完成時:performance.now() - global.vite_start_time
H5平臺
對uni-app的三個項目模板分別運行到H5平臺,進行多次編譯測試,并求其均值后,獲得如下數(shù)據(jù):

由此,我們可以觀察到:
在vue 2.6環(huán)境下,隨著項目復(fù)雜度的提升,H5首頁預(yù)覽所需編譯時間會直線增加;這是因為在vue 2.6版本下,雖然僅預(yù)覽首頁,但依然會使用 webpack 編譯整個項目資源;故項目越復(fù)雜,編譯時間越長;
在vue 3.x環(huán)境下,H5首頁預(yù)覽的編譯時間跟項目復(fù)雜度也有關(guān)系,但增幅不大;這是因為在vue 3.x版本下,使用 Vite 進行構(gòu)建,預(yù)覽首頁時僅編譯首頁及首頁所依賴資源,不會編譯其它頁面資源。
通過圖表對比,我們可以直觀得出結(jié)論:vue 3.x環(huán)境下的首頁編譯時間,平均不到vue 2.6環(huán)境下的十分之一。
換言之,vue 3.x版本下的首頁編譯速度,相比vue 2.6版本,有十倍效率提升。
這個十倍效率提升,主要得益于新版采用Vite作為構(gòu)建工具,由此帶來了兩大好處:
使用原生 ESM 文件,無需打包,實現(xiàn)極速的服務(wù)啟動;
預(yù)覽(運行)使用esbuild作為打包工具,相比vue 2.6環(huán)境下的webpack,構(gòu)建速度快 10-100 倍(這不是我們夸大,詳見esbuild)
本著這個十倍效率提升,小伙伴們還不趕緊上手試試?
小程序平臺
對uni-app的三個模板項目運行到小程序平臺,多次編譯測試,并求其均值后,獲得如下數(shù)據(jù):

從上圖對比數(shù)據(jù)來看,我們可以得出結(jié)論:小程序平臺,vue 3.x版本下的運行編譯,相比vue 2.6版本,編譯性能至少提升30%;且項目越復(fù)雜,編譯性能提升越明顯,可以達到40% ~ 50%。
App平臺
對uni-app的三個項目模板繼續(xù)運行到App平臺,多次編譯測試,并求其均值后,獲得如下數(shù)據(jù):

從上圖對比數(shù)據(jù)來看,我們可以得出結(jié)論:App平臺,vue 3.x版本下的運行編譯,相比vue 2.6版本,編譯性能提升將近50%。
雖沒有H5平臺的十倍效率提升那么刺激,但將近50%的速度提升,經(jīng)常開發(fā)小程序/App的小伙伴,還不心動?
業(yè)內(nèi)優(yōu)秀框架橫向?qū)Ρ?/p>
除了采用不同版本的uni-app進行縱向?qū)Ρ韧?,我們還使用業(yè)內(nèi)優(yōu)秀的跨端框架Taro,創(chuàng)建空的項目模板,進行橫向?qū)Ρ葴y試。
具體測試方案:
安裝Taro的最新cli,本文測試時使用的版本為"@Tarojs/Taro": "3.3.16"
使用Taro init命令,分別選擇react、vue、vue3框架,創(chuàng)建三個默認(rèn)項目模板,三個項目名稱分別為taro3-react、taro3-vue、taro3-vue3,如下圖:

使用npm run dev:h5,運行到H5平臺進行預(yù)覽,記錄每次預(yù)覽編譯時間,重復(fù)執(zhí)行,求其均值
關(guān)于Taro編譯時間的計算方案:
開發(fā)一個Taro擴展插件,插件規(guī)范參考Taro官網(wǎng) - 插件功能
在ctx.onBuildStart中記錄開始編譯時間
在ctx.onBuildFinish中記錄編譯結(jié)束時間
兩者的時間差,即為編譯過程消耗時間
然后使用uni-app的cli命令行,創(chuàng)建基于vue3.x的空項目模板,項目命名為uni-app-vue3。
我們使用各自框架的命令行,將如上創(chuàng)建的5個項目分別編譯到H5平臺和小程序平臺,多次測試,并求其均值。
同框架版本在H5平臺上的編譯時間,結(jié)果如下:

從圖中可以看出,uni-app的vue3版本,在H5平臺上的首頁編譯預(yù)覽性能是遙遙領(lǐng)先的。這個遙遙有多遠呢?這么講吧,你都編譯20次了,友商第一次還沒完呢。
繼續(xù)編譯到小程序平臺,多次測試,求其均值,結(jié)果如下:

從圖中可以看出,uni-app的vue3版本,在小程序平臺上的編譯性能也是遙遙領(lǐng)先的,這個遙遙也不近。
更好的運行速度
開發(fā)環(huán)節(jié)編譯快了,那面向最終用戶的軟件,運行性能怎么樣?
我們進入性能測試章節(jié)。
測試方案:
開發(fā)內(nèi)容:開發(fā)一個仿微博小程序首頁的復(fù)雜長列表,支持下拉刷新、上拉翻頁、點贊。
界面如下:

測試機型:小米 Mi 10 pro、MIUI 12.5 (21.11.3 開發(fā)版) 、微信版本 8.0.16
準(zhǔn)備工作:每次開始測試前,殺掉各App進程、清空內(nèi)存,保證測試機環(huán)境基本一致;每次從本地讀取靜態(tài)數(shù)據(jù),屏蔽網(wǎng)絡(luò)差異。
評測點:長列表中的某個組件,比如點贊組件,點擊時是否能及時的修改未贊和已贊狀態(tài)?
測試計時方式:
選中某微博,點擊“點贊”按鈕,實現(xiàn)點贊狀態(tài)狀態(tài)切換(已贊高亮、未贊灰色),
點贊按鈕 onclick函數(shù)開頭開始計時,setData回調(diào)函數(shù)開頭結(jié)束計時;
在小米手機上進行多次測試,求其平均值,結(jié)果如下:
記錄條數(shù) 200 400 600 800 1000
vue2 30ms 43ms 56ms 72ms 90ms
vue3 8ms 9ms 9ms 8ms 9ms
從表格中可以看出:
隨著頁面記錄的增加,vue 2.6版本的uni-app項目,點贊組件響應(yīng)時間快速增加,響應(yīng)越來越慢;
基于vue 3.x的uni-app項目,點贊組件的響應(yīng)時間跟頁面條數(shù)無關(guān),一直保持極高的響應(yīng)靈敏度,性能體驗遠高于vue 2.6版本。
從這個常見的長列表組件響應(yīng)實驗來看,vue 3.x的性能體驗要遠高于vue 2.6版本。
更小的代碼體積
項目發(fā)行后的代碼體積,是一個很重要的考量指標(biāo):
H5平臺:更小的代碼體積,可以幫助開發(fā)者節(jié)省服務(wù)端帶寬及CDN流量,可實現(xiàn)更快的資源加載及頁面渲染;
小程序平臺:更小的代碼體積,可加速小程序包的下載(甚至可能免了分包加載的繁瑣),幫助用戶更快進入小程序業(yè)務(wù)界面;
App平臺:更小的代碼體積,可實現(xiàn)更快的App啟動,幫助用戶更快進入App首頁
為了測試vue 3.x新版升級后,代碼體積的變化,我們同樣做了兩個維度的測試:
縱向?qū)Ρ龋哼x擇uni-app常用項目模板,在H5、小程序、App平臺,分別測試vue 2.6和vue 3.x的編譯包大小
橫向?qū)Ρ龋菏褂脴I(yè)內(nèi)優(yōu)秀的其它跨端框架,創(chuàng)建默認(rèn)項目模板,記錄其編譯后的包體積大小,和uni-app版本進行對比
Tips:
開發(fā)階段重在編譯速度,對應(yīng)npm run dev操作
發(fā)行階段重在編譯包大小,對應(yīng)npm run build操作
uni-app 不同版本縱向?qū)Ρ?/p>
我們復(fù)用之前創(chuàng)建的uni-app默認(rèn)模板、uni-starter、hello-uniapp三個項目模板,分別測試vue 2.6和vue 3.x的編譯包體積。
uni-app項目編譯包體積的采集方式:編譯到對應(yīng)平臺后,記錄編譯后文件夾的大小。
H5平臺
H5平臺編譯后代碼體積記錄如下:

從統(tǒng)計結(jié)果來看,uni-app的vue3.x版本,在H5平臺上的編譯包體積至少瘦身30%以上。
H5平臺的瘦身優(yōu)化,主要得益于uni-app框架的底層全面重構(gòu),實現(xiàn)了更徹底的搖樹優(yōu)化。
小程序平臺
小程序平臺編譯后代碼體積記錄如下:

從統(tǒng)計結(jié)果來看,uni-app的vue3.x版本,在小程序平臺上也有大幅瘦身。
以上就是關(guān)于vue畫心電圖相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀: