你使用这几个内置指令提升性能吗?

一、

        想必大家在开发vue项目时,内置指令肯定是缺一不可的,比如:v-for、v-if等等,今天给大家讲解几个内置指令,这几个指令用完之后是提升系统性能!

二、下面一 一详细讲解一下:

1. v-once

        作用:当我们在标签上使用 v-once 时,它能够使元素或者表达式只渲染一次。当首次渲染后,之后数据发生变化时 v-once 就不会进行更新,因此大家可以在不需要变化的地方进行性能优化。

        原理:当组件初始化编译时会标记上 v-once,首次渲染会正常执行,后续再次渲染时看到有标记则不会进行渲染。

        示例:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js"></script>
  </head>
  <body>
    <div id="app">
      <p v-once>{{msg}}</p>
      <!-- msg不会改变 -->
      <p>{{msg}}</p>
      <input type="text" v-model="msg" name="" />
    </div>
 
    <script type="text/javascript">
      let vm = new Vue({
        el: "#app",
        data: {
          msg: "Hello",
        },
      });
    </script>
  </body>
</html>
2.v-pre

        作用:告诉 Vue.js 跳过这个元素及其所有子元素的编译过程,将其视为静态内容,不会触发 Vue.js 的编译过程。

        原理:当组件初始化编译时会标记上 v-pre ,那么会直接跳过编译,直接将 HTML 插入到DOM 中。

        示例:

<template>
	<div class="djs-box">
		<div class="topBox">
			<h3>vue内置指令示例</h3>
		</div>
		<div class="dajianshi" id="dajianshi">
             <p v-pre>这里面的desc不会被替换掉{{ desc}}</p>
		</div>
	</div>
</template>

<script>
    import Vue from 'vue'
	import MyPlugin from "../plugin/myplug_demo.js";
	Vue.use(MyPlugin);
	export default {
		data() {
			return {
			  desc:'对对对!'
			}
		},
	}
</script>

最终的页面展示是 :这里面的desc不会被替换掉{{ desc}} ,而不是 :这里面的desc不会被替换掉对对对!

注意: 要区分v-prev-once的区别,v-once用于只渲染一次,而v-pre是直接跳过编译。

3. v-memo

        作用:主要用于优化组件的渲染方面性能,能控制达到某个条件才重新当堂组件,否则不重新渲染。 v-memo 会缓存 DOM,只有当指定的数据发生变化时才会重新渲染,从而减少渲染次数提升性能。

        原理:Vue 初始化组件时会识别是否有 v-memo 标记,如果有就把这部分vnode缓存起来,当数据变化时会对比依赖是否变化,变化再重新渲染。

        示例:

<template>
  <div>
    <ul v-memo="arr">
      <li v-for="(item, index) in arr" :key="index">
        {{ item.text }}
      </li>
    </ul>
  </div>
</template>

<script setup>
import { ref } from 'vue';

let arr = ref([
  { text: '内容1' },
  { text: '内容2' },
  { text: '内容3' }
]);

setInterval(() => {
  arr.value[1].text = '修改2';
}, 2000);
</script>

注意: 用 v-memo 来指定触发渲染的条件,但只建议在长列表或者说复杂的渲染结构才使用。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值