Vue 高級技巧深度解析

Vue 高級技巧深度解析


在這里插入圖片描述

mindmaproot(Vue2高級技巧)組件通信EventBusprovide/inject$attrs/$listeners性能優化虛擬DOM優化函數式組件按需加載狀態管理Vuex模塊化持久化存儲嚴格模式高級指令自定義指令動態組件異步組件渲染控制作用域插槽渲染函數JSX支持

一、組件通信的進階之道

1.1 跨層級通信方案對比

props
props
provide
inject
父組件
子組件
孫子組件
EventBus

通信方案性能測試

方法100組件通信耗時內存占用適用場景
Props/Events120ms父子組件直接通信
EventBus85ms任意組件間低頻通信
Vuex45ms中大型應用狀態管理
provide/inject65ms跨多層級組件通信

1.2 高階屬性傳遞

// 父組件
<template><child v-bind="$attrs" v-on="$listeners"></child>
</template>// 子組件
export default {inheritAttrs: false,mounted() {console.log(this.$attrs); // 獲取非props屬性console.log(this.$listeners); // 獲取所有監聽器}
}

最佳實踐

  • 使用inheritAttrs: false避免自動綁定到根元素
  • 結合v-bind="$attrs"實現屬性透傳
  • 通過$listeners批量處理事件監聽

二、性能優化深度策略

2.1 虛擬DOM優化技巧

// 優化前
<template><div><div v-for="item in list" :key="item.id">{{ item.content }}</div></div>
</template>// 優化后:使用函數式組件
Vue.component('functional-list', {functional: true,render(h, context) {return context.props.list.map(item => h('div', { key: item.id }, item.content)}
})

優化效果對比

列表長度普通組件渲染時間函數式組件時間提升幅度
1000120ms45ms62%
5000680ms220ms67%

2.2 按需加載實現

// 路由配置
const routes = [{path: '/dashboard',component: () => import(/* webpackChunkName: "dashboard" */ './views/Dashboard.vue')}
]// 異步組件工廠
Vue.component('async-component', (resolve) => {setTimeout(() => {resolve(import('./components/HeavyComponent.vue'))}, 1000)
})

性能提升數據

優化項首屏體積加載時間內存占用
全量打包2.8MB3.2s150MB
按需加載1.1MB1.4s80MB

三、Vuex 高級應用模式

3.1 模塊化狀態設計

// store/modules/user.js
export default {namespaced: true,state: () => ({profile: null}),mutations: {SET_PROFILE(state, payload) {state.profile = payload}},actions: {async fetchProfile({ commit }) {const res = await api.getProfile()commit('SET_PROFILE', res.data)}}
}// 組件中調用
this.$store.dispatch('user/fetchProfile')

3.2 持久化存儲方案

// 使用vuex-persistedstate
import createPersistedState from 'vuex-persistedstate'export default new Vuex.Store({plugins: [createPersistedState({key: 'vuex_storage',paths: ['user.profile'],storage: window.sessionStorage})],modules: {user}
})

存儲方案對比

方案容量限制安全性生命周期
localStorage5MB永久
sessionStorage5MB會話期間
Cookie4KB可設置過期時間
IndexedDB250MB+永久

四、自定義指令與渲染控制

4.1 權限控制指令實現

// 注冊全局指令
Vue.directive('permission', {inserted(el, binding) {const { value } = bindingconst permissions = store.state.user.permissionsif (!permissions.includes(value)) {el.parentNode && el.parentNode.removeChild(el)}}
})// 使用示例
<button v-permission="'delete'">刪除</button>

4.2 渲染函數與JSX

// 普通模板
<template><div :class="wrapperClass"><slot name="header"></slot><ul><li v-for="item in items">{{ item }}</li></ul></div>
</template>// 等價渲染函數
export default {render(h) {return h('div', {class: this.wrapperClass}, [this.$scopedSlots.header(),h('ul', this.items.map(item => h('li', item)))])}
}// JSX寫法
export default {render() {return (<div class={this.wrapperClass}>{this.$scopedSlots.header()}<ul>{this.items.map(item => <li>{item}</li>)}</ul></div>)}
}

五、項目最佳實踐

5.1 錯誤監控集成

// 全局錯誤處理
Vue.config.errorHandler = (err, vm, info) => {console.error(`Error: ${err.toString()}\nInfo: ${info}`)Sentry.captureException(err)
}// 異步錯誤捕獲
window.addEventListener('unhandledrejection', event => {event.preventDefault()console.error('Unhandled promise rejection:', event.reason)
})

5.2 性能監控方案

// 使用Performance API
const perfData = {dns: performance.timing.domainLookupEnd - performance.timing.domainLookupStart,tcp: performance.timing.connectEnd - performance.timing.connectStart,ttfb: performance.timing.responseStart - performance.timing.requestStart,domReady: performance.timing.domContentLoadedEventEnd - performance.timing.navigationStart
}// 發送監控數據
axios.post('/perf-log', perfData)

關鍵性能指標

指標優秀值可接受值需優化值
DNS查詢<50ms<100ms>200ms
TCP連接<100ms<300ms>500ms
首字節(TTFB)<200ms<500ms>1s
可交互時間<2s<3s>5s

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901613.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901613.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901613.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024年React最新高頻面試題及核心考點解析,涵蓋基礎、進階和新特性,助你高效備戰

以下是2024年React最新高頻面試題及核心考點解析&#xff0c;涵蓋基礎、進階和新特性&#xff0c;助你高效備戰&#xff1a; 一、基礎篇 React虛擬DOM原理及Diff算法優化策略 ? 必考點&#xff1a;虛擬DOM樹對比&#xff08;同級比較、Key的作用、組件類型判斷&#xff09; ?…

Zookeeper單機三節點集群部署(docker-compose方式)

前提: 服務器需要有docker鏡像zookeeper:3.9.3 或能連網拉取鏡像 服務器上面新建文件夾: mkdir -p /data/zk-cluster/{data,zoo-cfg} 創建三個zookeeper配置文件zoo1.cfg、zoo2.cfg、zoo3.cfg,配置文件里面內容如下(三個文件內容一樣): tickTime=2000 initLimit=10 …

面試題之數據庫-mysql高階及業務場景設計

最近開始面試了&#xff0c;410面試了一家公司 針對自己薄弱的面試題庫&#xff0c;深入了解下&#xff0c;也應付下面試。在這里先祝愿大家在現有公司好好沉淀&#xff0c;定位好自己的目標&#xff0c;在自己的領域上發光發熱&#xff0c;在自己想要的領域上&#xff08;技術…

數字內容體驗案例解析與行業應用

數字內容案例深度解析 在零售行業頭部品牌的實踐中&#xff0c;數字內容體驗的革新直接推動了用戶行為模式的轉變。某國際美妝集團通過搭建智能內容中臺&#xff0c;將產品信息庫與消費者行為數據實時對接&#xff0c;實現不同渠道的動態內容生成。其電商平臺首頁的交互式AR試…

4.15 代碼隨想錄第四十四天打卡

99. 島嶼數量(深搜) (1)題目描述: (2)解題思路: #include <iostream> #include <vector> using namespace std;int dir[4][2] {0, 1, 1, 0, -1, 0, 0, -1}; // 四個方向 void dfs(const vector<vector<int>>& grid, vector<vector<bool&g…

【三維重建與生成】GenFusion:SVD統一重建和生成

標題:《GenFusion: Closing the Loop between Reconstruction and Generation via Videos》 來源&#xff1a;西湖大學&#xff1b;慕尼黑工業大學&#xff1b;上海科技大學&#xff1b;香港大學&#xff1b;圖賓根大學 項目主頁&#xff1a;https://genfusion.sibowu.com 文章…

Quipus,LightRag的Go版本的實現

1 項目簡介 奇譜系統當前版本以知識庫為核心&#xff0c;基于知識庫可以快構建自己的問答系統。知識庫的Rag模塊的構建算法是參考了LightRag的算法流程的Go版本優化實現&#xff0c;它可以幫助你快速、準確地構建自己的知識庫&#xff0c;搭建屬于自己的AI智能助手。與當前LLM…

mysql 8 支持直方圖

mysql 8 可以通過語句 ANALYZE TABLE table_name UPDATE HISTOGRAM ON column_name WITH 10 BUCKETS; 生產直方圖&#xff0c;解決索引數據傾斜的問題 在之前的mysql5.7的版本上是沒有的 參考&#xff1a; MySQL :: MySQL 8.0 Reference Manual :: 15.7.3.1 ANALYZE TABL…

力扣-hot100(最長連續序列 - Hash)

128. 最長連續序列 中等 給定一個未排序的整數數組 nums &#xff0c;找出數字連續的最長序列&#xff08;不要求序列元素在原數組中連續&#xff09;的長度。 請你設計并實現時間復雜度為 O(n) 的算法解決此問題。 示例 1&#xff1a; 輸入&#xff1a;nums [100,4,200,…

RCEP框架下eBay日本站選品戰略重構:五維解析關稅紅利機遇

2024年RCEP深化實施背景下&#xff0c;亞太跨境電商生態迎來結構性變革。作為協定核心成員的日本市場&#xff0c;其跨境電商平臺正經歷新一輪價值重構。本文將聚焦eBay日本站&#xff0c;從政策解讀到實操路徑&#xff0c;系統拆解跨境賣家的戰略機遇。 一、關稅遞減機制下的…

Unity開發框架:輸入事件管理類

開發程序的時候經常會出現更改操作方式的情況&#xff0c;這種時候就需要將操作模式以事件的方式注冊到管理輸入事件的類中&#xff0c;方便可以隨時切換和調用 using System; using System.Collections.Generic; using UnityEngine;/// <summary> /// 記錄鼠標事件的的…

【kind管理腳本-2】腳本使用說明文檔 —— 便捷使用 kind 創建、刪除、管理集群腳本

當然可以&#xff0c;以下是為你這份 Kind 管理腳本寫的一份使用說明文檔&#xff0c;可作為 README.md 或內部文檔使用&#xff1a; &#x1f680; Kind 管理腳本說明文檔 本腳本是一個便捷的工具&#xff0c;幫助你快速創建、管理和診斷基于 Kind (Kubernetes IN Docker) 的…

opencv常用邊緣檢測算子示例

opencv常用邊緣檢測算子示例 1. Canny算子2. Sobel算子3. Scharr算子4. Laplacian算子5. 對比 1. Canny算子 從不同視覺對象中提取有用的結構信息并大大減少要處理的數據量的一種技術&#xff0c;檢測算法可以分為以下5個步驟&#xff1a; 噪聲過濾&#xff08;高斯濾波&…

Token安全存儲的幾種方式

文章目錄 1. EncryptedSharedPreferences示例代碼 2. SQLCipher示例代碼 3.使用 Android Keystore加密后存儲示例代碼1. 生成密鑰對2. 使用 KeystoreManager 代碼說明安全性建議加密后的幾種存儲方式1. 加密后采用 SharedPreferences存儲2. 加密后采用SQLite數據庫存儲1. Token…

MySQL數據庫表的約束類型和使用

表完整約束性 約束條件 說明 PRIMARY KEY (PK) 標識該字段為該表的主鍵&#xff0c;是可以唯一的標識記錄&#xff0c;不可以為空 UNIQUENOT NULL (primary key) FOREIGN KEY (FK) 標識該字段為該表的外鍵&#xff0c;實現表與表之間的關聯 (foreign key) NULL …

Java 線程詳解 --線程概念、線程池、線程同步與安全機制

一、Java線程的概念 Java 線程的本質&#xff1a;每個線程對應一個操作系統線程&#xff0c;由操作系統調度。JVM 通過調用操作系統 API&#xff08;如 Linux 的 pthread&#xff09;創建線程。 關鍵點&#xff1a; ? 用戶態與內核態&#xff1a;線程調度依賴操作系統&#…

PCL 計算點云至平面距離(SIMD加速)

文章目錄 一、簡介二、實現代碼三、實現效果一、簡介 SIMD 是一種并行計算模型,其中“單指令”表示處理器在同一時刻執行相同的指令,而“多數據”則表示同一條指令操作多個數據元素(如數組中的多個元素或矩陣中的多個元素)。與傳統的串行計算不同,SIMD 能夠同時處理多個數…

Ubuntu 22.04 完美安裝 ABAQUS 教程:從零到上手,解決兼容問題

教程概述與安裝準備 本教程詳細介紹了在 Ubuntu 22.04 系統上安裝 ABAQUS 2023 及 ifort 2021 的步驟,并實現用戶子程序的鏈接。教程同樣適用于 ABAQUS 2021(需相應調整文件名和路徑)以及 Ubuntu 18.04 至 22.04 系統,盡管未在所有版本上測試。需要注意的是,Intel 的 One…

Spark-TTS(Text-to-Speech):基于大語言模型的語音合成革新者!!!

Spark-TTS&#xff1a;基于大語言模型的語音合成革新者 &#x1f680; &#xff08;全稱解析 核心特性 行業影響全解讀&#xff09; 一、概念定義與技術定位 1. 英文全稱 Spark-TTS: An Efficient LLM-Based Text-to-Speech Model ? 關鍵詞解析&#xff1a; ? LLM-Based…

2025年十六屆藍橋杯Python B組原題及代碼解析

相關試題可以在洛谷上測試用例&#xff1a; 2025 十六屆 藍橋杯 Python B組 試題 A&#xff1a;攻擊次數 答案&#xff1a;103 print(103)代碼&#xff1a; # 初始化敵人的血量 x 2025# 初始化回合數 turn 0# 模擬攻擊過程 while x > 0:# 回合數加一turn 1# 第一個英…