vue3為什麼快? vue3的效率提升主要在哪方面?下面這篇文章就來跟大家介紹一下vue3相對於vue2 做了那些優化,希望對大家有幫助!
尤大大在介紹vue3說客戶端的渲染效率比vue2提升了1.3-2倍, SSR渲染效率比 vue2 提升了2-3倍。
對靜態節點的提升
什麼是靜態節點?
所謂的靜態節點就是在vue 中的寫在template
模板中的標籤 且該標籤沒有使用v-bind
綁定屬性, 在vue3 就認為是靜態節點。 (學習影片分享:vuejs教學)
<template > <img src="/static/imghwm/default1.png" data-src="/_assets/logo.102c1acc.jpg" class="lazy" alt="logo"> // 静态节点 没有绑定任何属性 <h1 id="Hello-nbsp-World">Hello World</h1> // 静态节点 没有绑定任何属性 <h1 id="nbsp-text-nbsp">{{ text }}</h1> </template> <script> export default { data() { return { text: 'Hello World', } }, } </script>
vue3 就會在render
函數中將靜態節點 用變數保存下來, 所以該靜態節點只會創建一次。
// vue2 的静态节点 render(){ createVNode("h1", null , "Hello World") } // vue3 的静态节点 const h1 = createVNode("h1", null , "Hello World") render(){ // 直接使用即可 }
為了證明這一點, 本地創建一個vue3 的項目, 看網絡請求
#靜態屬性也會被提升
<template > <div class="container"> //container 这是一个静态属性 {{ text }} // 内容是动态的 </div> </template> <script> export default { data() { return { text: 'Hello World', } }, } </script>
container
也會使用變數來保存
預先字串化
在實際的開發中, template
中實際很大一部分都是靜態節點
<template > <div class="container"> <div class="logo"> <h1 id="logo">logo</h1> </div> <ul class="nav"> <li><a href="">菜单</a></li> <li><a href="">菜单</a></li> <li><a href="">菜单</a></li> <li><a href="">菜单</a></li> </ul> <div class="user"> {{ user.name }} </div> </div> </template> <script> export default { data() { return { user: { name: '张三' } } }, } </script>
vue3 的編譯器遇到大量的連續的靜態節點, 會直接將其編譯為一個普通的字元創節點
.logo .nav
整個div 都是靜態節點, 如果按照vue2 的處理方式會進行遞歸創建處理
而在vue3 直接轉換成字串, 然後在創建真實dom 是賦值給innerHTML 屬性, 就減少了 vue2 中的遞歸創建時間
預字符串化的性能提升不緊緊在第一次創建時的提升, 當在render 函數重新渲染時的提升減少了大量的虛擬節點的對比時間(非常恐怖)
快取事件處理函數
<template > <button @click="handleClick">点一下</button> </template> <script> export default { data() { return { } }, methods: { handleClick() { console.log('点击了') } }, } </script>
handleClick
事件,比較一下vue2和vue3 的處理方式
// vue2 render(ctx){ return createVNode("button",{ onclick: function ($event) { console.log('点击了') } }) } // vue3 export function render(_ctx, _cache, $props, $setup, $data, $options) { return (_openBlock(), _createBlock("button", { onClick: _cache[1] || (_cache[1] = (...args)=>($options.handleClick && $options.handleClick(...args))) }, "点一下")) }
_cache[1] || (_cache[1] = (...args)=>($options.handleClick && $options .handleClick(...args)))
這段程式碼就是對事件函數的快取
Block Tree
vue3 在對虛擬節點樹比較時也做了最佳化
vue2 在對比新舊節點樹時, 並不知道那些節點是靜態的, 那些節點是動態的, 因此只能一層一層的比較,這就導致浪費了大量的時間在靜態節點對比上
vue3 是如何進行對比的, 其實在當在創建節點時有一個標記記錄了該節點的類型
這裡的-1 其實就是標記該節點的型別, 所以當在Block Tree 時, 根據該標記就能直接跳過對靜態節點的對比, 從而達到減少對比的時間。
PatchFlag
PatchFlag 是對 Block Tree 進一步優化, 在對比單一節點的時, 會對比屬性, 內容等等。
vue2 在單一節點對比時不知道那些是要比較的所以全部對比一次
##vue3 就知道那些屬性是動態的,每次更新只比較動態的屬性
<template > <div class="logo"> <h1 id="nbsp-text-nbsp">{{ text }}</h1> </div> </template> <script> export default { data() { return { text: 'Hello World', } }, } </script>l
.logo中只有
h1 的內容是動態的所以在建立標虛擬節點時就是做標記
1就是標記該內容是動態的, 所以在進行對比時就只對比內容 是否變化, 就極大的縮短了對比時間(恐怖如斯)
總結上面的優化都依託於vue3強大的編譯器 恐怖如斯
(學習影片分享:以上是vue3為什麼快? vue3的效率提升主要在哪方面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Netflix在框架選擇上主要考慮性能、可擴展性、開發效率、生態系統、技術債務和維護成本。 1.性能與可擴展性:選擇Java和SpringBoot以高效處理海量數據和高並發請求。 2.開發效率與生態系統:使用React提升前端開發效率,利用其豐富的生態系統。 3.技術債務與維護成本:選擇Node.js構建微服務,降低維護成本和技術債務。

Netflix主要使用React作為前端框架,輔以Vue用於特定功能。 1)React的組件化和虛擬DOM提升了Netflix應用的性能和開發效率。 2)Vue在Netflix的內部工具和小型項目中應用,其靈活性和易用性是關鍵。

Vue.js是一種漸進式JavaScript框架,適用於構建複雜的用戶界面。 1)其核心概念包括響應式數據、組件化和虛擬DOM。 2)實際應用中,可以通過構建Todo應用和集成VueRouter來展示其功能。 3)調試時,建議使用VueDevtools和console.log。 4)性能優化可通過v-if/v-show、列表渲染優化和異步加載組件等實現。

Vue.js適合小型到中型項目,而React更適用於大型、複雜應用。 1.Vue.js的響應式系統通過依賴追踪自動更新DOM,易於管理數據變化。 2.React採用單向數據流,數據從父組件流向子組件,提供明確的數據流向和易於調試的結構。

Vue.js適合中小型項目和快速迭代,React適用於大型複雜應用。 1)Vue.js易於上手,適用於團隊經驗不足或項目規模較小的情況。 2)React的生態系統更豐富,適合有高性能需求和復雜功能需求的項目。

實現 Vue 中 a 標籤跳轉的方法包括:HTML 模板中使用 a 標籤指定 href 屬性。使用 Vue 路由的 router-link 組件。使用 JavaScript 的 this.$router.push() 方法。可通過 query 參數傳遞參數,並在 router 選項中配置路由以進行動態跳轉。

Vue 中實現組件跳轉有以下方法:使用 router-link 和 <router-view> 組件進行超鏈接跳轉,指定 :to 屬性為目標路徑。直接使用 <router-view> 組件顯示當前路由渲染的組件。使用 router.push() 和 router.replace() 方法進行程序化導航,前者保存歷史記錄,後者替換當前路由不留記錄。

Vue 中 div 元素跳轉的方法有兩種:使用 Vue Router,添加 router-link 組件。添加 @click 事件監聽器,調用 this.$router.push() 方法跳轉。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),