## 1. 虚拟滚动 (Virtual Scrolling)
虚拟滚动是一种常见的处理大数据量列表的方案。它通过只渲染可见区域的数据条目,大幅减少了DOM元素的数量,从而提高渲染性能。
### 示例代码
```vue<template><div class="container" @scroll="onScroll"><div class="spacer" :style="{ height: spacerHeight + 'px' }"></div><div class="item" v-for="(item, index) in visibleItems" :key="index">{{ item }}</div></div></template><script>export default {data() {return {items: Array.from({ length: 10000 }, (_, index) => `Item ${index + 1}`),startIndex: 0,endIndex: 20,};},computed: {visibleItems() {return this.items.slice(this.startIndex, this.endIndex);},spacerHeight() {return this.items.length * 20; // 每个项的高度},},methods: {onScroll(event) {const scrollTop = event.target.scrollTop;const itemHeight = 20;this.startIndex = Math.floor(scrollTop / itemHeight);this.endIndex = this.startIndex + 20;},},};</script><style scoped>.container {height: 400px;overflow-y: scroll;position: relative;}.spacer {width: 100%;}.item {height: 20px;box-sizing: border-box;border-bottom: 1px solid #ccc;}</style>```
## 2. 使用 `v-once` 指令
Vue提供了`v-once`指令,允许你一次性地渲染数据,不再进行后续变化监听。对于那些不需要重复更新的静态内容,使用`v-once`可以显著减少渲染和更新过程的性能消耗。
### 示例代码
```vue<template><div v-once><p>这段内容仅会渲染一次:{{ staticContent }}</p></div></template><script>export default {data() {return {staticContent: '这是静态内容'};}};</script>```
## 3. 分组渲染 (Chunk Rendering)
对于超大数据量,直接一次性渲染可能会导致页面卡顿甚至浏览器崩溃。分组渲染可以将大量数据分成几批逐步渲染,从而避免性能瓶颈。
### 示例代码
```vuetemplate><div><div v-for="(item, index) in visibleItems" :key="index">{{ item }}</div><button @click="loadMore">加载更多</button>div></template><script>export default {data() {{items: Array.from({ length: 10000 }, (_, index) => `Item ${index + 1}`),visibleItems: [],chunkSize: 100,currentIndex: 0,};},created() {this.loadMore();},methods: {loadMore() {if (this.currentIndex < this.items.length) {this.visibleItems.push(...this.items.slice(this.currentIndex, this.currentIndex + this.chunkSize));this.currentIndex += this.chunkSize;}},}};</script>```
## 4. 使用 `requestAnimationFrame`
对于那些需要频繁更新的动画或滚动事件,使用`requestAnimationFrame`可以优化性能。它确保在屏幕刷新之前执行回调函数,从而提高渲染效率。
### 示例代码
```vue<template><div @scroll="onScroll"><div class="content" :style="{ height: scrollHeight + 'px' }">内容...</div></div></template><script>export default {data() {return {scrollHeight: 2000,ticking: false,};},methods: {onScroll(event) {if (!this.ticking) {window.requestAnimationFrame(() => {// 处理滚动事件this.ticking = false;});this.ticking = true;}},},};</script><style scoped>.content {width: 100}</style>```
## 5. 优化模板和计算属性
尽量拆分复杂的计算属性和模板渲染逻辑,避免单一属性和函数承担过多渲染任务,提升代码的可读性和执行效率。
### 示例代码
```vue<template><div><p>{{ computedItem }}</p></div></template><script>export default {data() {return {items: [/* 大量数据 */],};},computed: {computedItem() {return this.items.map(item => {// 简化计算逻辑return `Item: ${item.name}`;});},},};</script>```

860

被折叠的 条评论
为什么被折叠?



