咨询热线:15911225507
龙霄
登录
首页-所有文章-Nuxt.js繁体,Vue.js繁体-正文

Pinia 狀態持久化與記憶體治理實戰

龙霄龙霄
Nuxt.js繁体, Vue.js繁体
9天前
0
0
3.54K
本文系統介紹大型 Nuxt 4 專案中 25 個 Pinia Store 的狀態管理架構,深入分析 shallowRef 記憶體最佳化、localStorage 持久化白名單策略、路由級 KeepAlive 控制,以及配套的 memory profiling 工具鏈。
大型 Nuxt 4 專案中 Pinia Store 的記憶體管理、持久化策略和路由級 KeepAlive 控制的完整方案

一、Store 體系

25 個獨立 Pinia Store,分為四大類:

類別Store說明
內容類PostStore, ArchiveStore, SearchStore, DocumentStore, VideoStore文章/歸檔/搜尋/文件/影片
使用者類LoginStore, UserCenterStore, AnswerStore, BookmarkStore, CommentStore登入/使用者中心/收藏/評論
業務類CartStore, ShopStore, ProductStore, OrderStore, PayStore購物車/商城/產品/訂單/支付
系統類GeneralStore, HeaderStore, BuilderStore, EventStore通用設定/頭部/建構器/事件

二、Pinia 持久化

modules: [
    ['@pinia/nuxt', { autoImports: ['defineStore', 'storeToRefs', 'acceptHMRUpdate'] }],
    'pinia-plugin-persistedstate/nuxt'
]

piniaPluginPersistedstate: {
    cookieOptions: { sameSite: 'strict', secure: process.env.NODE_ENV !== 'development' },
    storage: 'localStorage',
    debug: process.env.NODE_ENV === 'development'
}
export const useCartStore = defineStore('cart', () => {
    const items = ref([])
}, {
    persist: { key: 'salong_cart', storage: localStorage, paths: ['items'] }
})

三、shallowRef 記憶體最佳化

// ❌ ref 遞迴將整個物件樹轉換為響應式
const posts = ref<Post[]>([])

// ✅ shallowRef 只追蹤陣列引用變化
const posts = shallowRef<Post[]>([])

儲存 100 篇文章時:ref 約 2MB 額外記憶體,shallowRef 約 8KB。

四、KeepAlive

const KEEPALIVE_MAX = 12
const keepaliveExcludeRules = [/^\\/builder/, /^\\/login/, /^\\/cart/, ...]

export default defineNuxtRouteMiddleware((to) => {
    if (shouldKeepAlive(to.path)) { to.meta.keepalive = { max: KEEPALIVE_MAX } }
})
路由KeepAlive理由
首頁 /✅ 快取高頻訪問
內容詳情 .html✅ 快取保持捲動位置
建構器 /builder❌ 不快取編輯態需即時狀態

五、工具鏈

pnpm memory:test    # 單元測試
pnpm memory:profile # 記憶體分析(--expose-gc)
pnpm memory:load    # 負載測試
pnpm memory:analyze # 日誌分析

六、總結

層級機制控制參數
Store 級shallowRef大陣列用 shallowRef
持久化級paths 白名單 + localStorage只持久化關鍵欄位
路由級KeepAlive max=12高頻頁面快取
快取級LRU 預算控制500 條 / 32MB
标签:
本文原创,作者:龙霄,其版权均为龙霄所有。如需转载,请注明出处:https://lx.yfdxs.com/1427.html
龙霄

龙霄

Lv1Vip2Rec2
以 Nuxt.js 之力,焕新 WordPress 体验
121.93M3413.92W1W
加载中…
分享:
1
Nuxt 4 中 Naive UI 集成与 UnoCSS 原子化样式实战
Nuxt 4 中 Naive UI 集成与 UnoCSS 原子化样式实战上一篇
Nuxt 4 + WordPress GraphQL:数据管理策略与性能优化深度指南下一篇
Nuxt 4 + WordPress GraphQL:数据管理策略与性能优化深度指南
相关文章
总数:0
龙霄
没有相关内容
评论表单游客 您好,欢迎参与讨论。
加载中…
评论列表
总数:0
龙霄
没有相关内容