当前位置:   article > 正文

vue 内置指令-v-pre/v-memo

v-memo

一、v-pre 使用了该指令的元素和子元素会被编译忽略,也就是不进行编译,其中包含的所有vue模版语法都会原样显示,作用加快vue的编译

例子:

  1. <p v-pre>
  2. {{不会被编译}}
  3. <span v-text="msg"></span>
  4. </p>

运行效果:

二、v-memo vue3.2+新增命令

       提高渲染能力,接收的一个数组,上次数组值和本次获取的数组值不变情况下,直接复用缓存中的进行渲染,如果数组不相同,则会重新渲染

例子:

  1. <h3>v-memo 提高性能,接收的一个数组</h3>
  2. <!-- 哪一行的[item.status]的值变了,对应就不会从缓存中获取渲染-->
  3. <!--注意v-for 中使用v-memo 时,两者都要绑定在同一个元素上,v-memo 不能用v-for内部-->
  4. <li v-for="(item,index) in eps" :keys="item.id" v-memo="[item.status]">
  5. <span>{{item.id}}</span> &nbsp;
  6. <span>{{item.name}}</span> &nbsp;
  7. <span>状态{{item.status}}</span> &nbsp;
  8. <button @click="updateStatus(item)">更新状态</button>
  9. </li>

运行效果:点击更新状态,渲染状态为false 的耗时为平均为18.51416015625 ms

未加v-memo="[item.status]" 耗时如下:55.84326171875 ms

总结:加了v-memo ,在大数据时,可以有效减少前段渲染耗时

完整例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>vue 内置指令</title>
  7. </head>
  8. <body>
  9. <!--
  10. v-text {{}}
  11. v-clock
  12. v-html
  13. v-if/v-else-if/v-else
  14. v-for v-for="(item,index) in array"
  15. v-on /@
  16. v-bind v-bind:name="xx" :name="xx" /prop
  17. v-model
  18. - v-model.lazy 监听change事件
  19. - v-model.number 针对可转换为数字的字符串,进行parseFloat格式遗失加我司微信
  20. - v-model.trim 去除左右空格
  21. v-once 一次性插值
  22. v-pre 使用了该指令的元素和子元素会被编译忽略,也就是不进行编译,其中包含的所有vue模版语法都会原样显示
  23. 加快vue的编译
  24. v-memo vue3.2+新增命令
  25. 提高渲染能力,接收的一个数组,上次数组值和本次获取的数组值不变情况下,直接复用缓存中的进行渲染,如果数组不相同,则会重新渲染
  26. -->
  27. <div id="app">
  28. {{msg}}
  29. <h3>v-pre</h3>
  30. <p v-pre>
  31. {{不会被编译}}
  32. <span v-text="msg"></span>
  33. </p>
  34. <h3>v-memo 提高性能,接收的一个数组</h3>
  35. <!-- 哪一行的[item.status]的值变了,对应就不会从缓存中获取渲染-->
  36. <!--注意v-for 中使用v-memo 时,两者都要绑定在同一个元素上,v-memo 不能用v-for内部-->
  37. <li v-for="(item,index) in eps" :keys="item.id" >
  38. <span>{{item.id}}</span> &nbsp;
  39. <span>{{item.name}}</span> &nbsp;
  40. <span>状态{{item.status}}</span> &nbsp;
  41. <button @click="updateStatus(item)">更新状态</button>
  42. </li>
  43. </div>
  44. </body>
  45. <script src="./node_modules/vue/dist/vue.global.js"></script>
  46. <script type="text/javascript">
  47. const {createApp} = Vue;
  48. const app = createApp({
  49. data(){
  50. return{
  51. msg:"样例",
  52. pa1:'111',
  53. pa2:'222',
  54. eps:Array.from({length:20000},(_,index)=>{
  55. return {id:index,name: "行数"+index,status:true}
  56. })
  57. }
  58. }
  59. ,
  60. methods:{
  61. updateStatus(item){
  62. //1、请求更新状态接口
  63. const {id,status} = item;
  64. console.log("item",item)
  65. // alert('请求更新状态接口:'+!status);
  66. //2、查询最新列表数据
  67. this.eps=Array.from({length:20000},(_,index)=>{
  68. const updateStatus=index==id?!status:true;
  69. return{
  70. id:index,
  71. name:"行数"+index,
  72. status:updateStatus
  73. }
  74. })
  75. //记录开始时间
  76. console.time();
  77. // this.$nextTick 用于渲染完成后执行函数体
  78. this.$nextTick(()=>{
  79. console.timeEnd();
  80. })
  81. }
  82. }
  83. }).mount("#app");
  84. console.log("app",app);
  85. </script>
  86. </html>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/197636
推荐阅读
相关标签
  

闽ICP备14008679号