vue
vue3+vite自动化注册全局组件
vue3加载远程组件
Vue Vine 编写 Vue 的另一种风格
Vueuse 实现数字滚动 Count-to
学会这几个常用功能,给你的 vue3 项目加点餐!
为什么有些 Vue3 项目已经开始弃用 Pinia 了?
Vue3 的 5 个组合式 API 方法
Vue3+TS+canvas 项目预览图片时,添加水印,浏览器禁止右键功能、前端禁止直接获取图片地址
Vue3.x 生态最能打的组合!
vue2封装常用工具类
使用 v-once 和 v-memo 进行 Vue 渲染优化
基于 Vue + Element plus + Node 实现大文件分片上传,断点续传和秒传的功能!
Vue中的$attrs和$listeners对象有什么作用?
本文档使用 MrDoc 发布
-
+
首页
使用 v-once 和 v-memo 进行 Vue 渲染优化
**前言** 在 Vue 中,模板会被编译成虚拟 DOM 渲染函数。每当数据发生变化时,虚拟 DOM 将会重新渲染并更新实际的 DOM。这种机制虽然强大,但在某些情况下可能会导致不必要的性能开销。为了减少不必要的渲染开销,Vue 提供了 `v-once` 和 `v-memo` 指令。 - • `v-once`:用于标记内容只渲染一次。后续的数据变化不会影响到该内容,从而避免了不必要的渲染。 - • `v-memo`:用于缓存计算结果。只有当指定的依赖发生变化时,才会重新计算和渲染。 ## v-once 指令 ### v-once 的作用 `v-once` 指令可以让绑定的元素和组件只渲染一次。后续的重新渲染中,即使依赖的数据发生变化,也不会重新计算和更新该元素和组件。这在需要渲染静态内容时非常有用。 ### 使用方法 在模板中使用 `v-once` 指令非常简单,只需将其添加到需要优化的元素或组件上即可: ```vue <template> <div v-once> <h1>这个标题只会渲染一次</h1> <p>{{ message }}</p> </div> </template> <script> export default { data() { return { message: 'Hello, Vue!' } } } </script> ``` 在上面的示例中,即使 `message` 的值发生变化,`v-once` 所绑定的 `div` 元素也不会重新渲染。 ### 使用场景 `v-once` 指令适用于那些在初次渲染后不再变化的内容。例如: - • 静态文本或静态图片 - • 不依赖响应式数据的组件 - • 初始化时不需要变化的结构 通过使用 `v-once`,可以显著减少不必要的 DOM 更新,提高渲染性能。  ## v-memo 指令 ### v-memo 的作用 `v-memo` 指令用于缓存计算结果,只有当指定的依赖发生变化时,才会重新计算和渲染。与 `v-once` 不同,`v-memo` 允许在某些依赖发生变化时重新渲染,从而提供了更大的灵活性。 ### 使用方法 使用 `v-memo` 指令时,需要指定一个依赖数组,当这些依赖发生变化时,Vue 会重新计算和渲染对应的内容: ```vue <template> <div v-memo="[count]"> <h1>Count: {{ count }}</h1> <p>{{ message }}</p> </div> </template> <script> export default { data() { return { count: 0, message: 'Hello, Vue!' } }, methods: { increment() { this.count++ } } } </script> ``` 在这个示例中,只有当 `count` 发生变化时,`div` 内的内容才会重新渲染,而 `message` 的变化不会触发重新渲染。 ### 使用场景 `v-memo` 指令适用于需要根据某些依赖进行缓存优化的场景。例如: - • 复杂计算结果的缓存 - • 部分依赖变化时才需要更新的内容 - • 需要优化性能的频繁更新区域 通过使用 `v-memo`,可以减少不必要的计算和渲染,提高整体性能。 ## 实际应用示例 ### 优化静态内容 在实际项目中,我们经常会遇到一些静态内容,这些内容在初次渲染后不会再发生变化。使用 `v-once` 可以显著优化这些内容的渲染性能。 ```vue <template> <div> <header v-once> <h1>My Static Header</h1> </header> <main> <p>{{ dynamicContent }}</p> </main> </div> </template> <script> export default { data() { return { dynamicContent: 'This content changes dynamically' } } } </script> ``` 在这个示例中,`header` 部分使用了 `v-once`,所以它只会在初次渲染时更新,而不会随着 `dynamicContent` 的变化而重新渲染。 ### 缓存复杂计算结果 对于一些复杂的计算结果,我们可以使用 `v-memo` 进行缓存优化,避免每次渲染时都重新计算。 ```vue <template> <div> <div v-memo="[expensiveComputation]"> <p>Computed Result: {{ expensiveComputation }}</p> </div> <button @click="changeInput">Change Input</button> </div> </template> <script> export default { data() { return { input: 0, } }, computed: { expensiveComputation() { // 模拟复杂计算 return this.input * 1000 } }, methods: { changeInput() { this.input = Math.random() } } } </script> ``` 在这个示例中,`expensiveComputation` 是一个复杂的计算结果。通过使用 `v-memo`,只有当 `input` 发生变化时,`div` 内的内容才会重新渲染,从而优化了渲染性能。 ## 总结 通过使用 `v-once` 和 `v-memo`,我们可以在 Vue.js 项目中显著优化渲染性能。`v-once` 适用于静态内容的初次渲染,而 `v-memo` 则适用于需要根据依赖进行缓存的场景。 ### 主要区别 - • `v-once`:标记内容只渲染一次。适用于不依赖响应式数据的静态内容。 - • `v-memo`:缓存计算结果。适用于需要根据特定依赖进行缓存的内容。 通过合理使用这两个指令,我们可以在不影响用户体验的前提下,提高应用的渲染性能和响应速度。 > 原文地址 https://mp.weixin.qq.com/s/92avK4w6Cc3lUuhZ1p9KVw
admin
2024年7月2日 11:51
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码