Vue性能优化

2023-11-01

一、Object.freeze()

如果我们已知该数据是不会改变的,就不需要Vue将其设置成响应式的了,利用 Object.freeze(),该方法可以冻结一个对象,使该对象不能被修改。Vue就不能够为对象添加,setter getter等数据劫持的方法。

export default {
  data() {
    return {
      obj: {}
    }
  },
  created() {
    // 返回一个冻结的对象参数和返回值是全等的。
    this.obj = Object.freeze({a: 0, b: 1})
    console.log(this.obj)
  }
}

 控制台打印出该对象没有getter和setter

二、v-if 和 v-show

v-if 会根据条件进行元素的销毁和重建,如果初始状态下条件为假,则根本不会渲染

v-show 不论条件是什么都会渲染元素,只是基于 css 的 display 属性进行切换

综上,v-if 适用于元素很少进行显示与隐藏的切换,而v-show适用于,元素需要频繁的进行切换。

三、computed和watch的使用

computed和watch都有监听数据的作用,但两者使用上有所不同。

computed 是计算属性,是描述依赖响应式状态的复杂逻辑,也就是说,计算出来的值,是依赖vue中其他的响应式数据的。

watch 是侦听器,用来监听数据的改变,并执行一些操作。

他们之间的不同除了应用场景外,计算属性值会基于其响应式依赖被缓存。一个计算属性仅会在其响应式依赖更新时才重新计算。

<template>
  <div>
    {{ totalPrice }}
    {{ totalPrice }}
    {{ totalPrice }}
    {{ totalPrice }}
    {{ init() }}
    {{ init() }}
    {{ init() }}
    {{ init() }}
    <button @click="count++">+1</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      count: 1,
      price: 12
    }
  },
  computed: {
    totalPrice() {
      console.log('computed')
      return this.count * this.price
    }
  },
  watch: {
    totalPrice(newValue, oldValue) {
      console.log('watch')
    }
  },
  methods: {
    init() {
      console.log('method')
    }
  }
}
</script>

 如上所示,执行了一次computed,证明当第一次执行的时候计算属性值被缓存下来了,但是执行了四次init方法。

四、v-for key 和 v-if

v-for 遍历时要给遍历的元素添加一个 key(唯一) ,这样做是为了方便vue内部准确找到该元素,当数据变化时根据key对比,从而判断是否复用旧节点。;且避免同时使用 v-if,因为v-for的优先级比v-if高,每次都会先遍历整个数组;可以先把数据筛选好了在进行遍历,不要用 v-if 再进行判断了。

五、事件的销毁

Vue组件销毁时,会自动清理它与其它实例的连接,解绑它的全部指令及事件监听器,但是仅限于组件本身的事件。如果在 js 内,我们需要手动关闭定时器,取消订阅的消息,解除自定义事件等收尾操作。

六、图片懒加载

vue-lazyload 插件

七、路由懒加载

// 导入组件的收用该方式
const Foo = () => import('./Foo.vue')
const router = new VueRouter({
  routes: [
    { path: '/foo', component: Foo }
  ]
})

八、第三方插件按需引入

可以减小项目体积

九、使用 keep-alive 缓存组件

通过<keepAlive>组件强制被切换掉的组件仍然保持“存活”的状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue性能优化 的相关文章

  • 在生产中使用 babel-node 可以吗

    我一直在使用 babel node 和 browserify 以及 babelify 转换来开发一个网站 以支持 ES6 语法 我只是想知道 我可以在生产中运行它吗 babel node server 而不是 node server 要在
  • 如何将 div (或任何元素)覆盖在表格行 (tr) 上?

    我想在恰好有多个列的表行 tr 标记 上覆盖一个 div 或任何可以使用的元素 我尝试了几种方法 似乎都不起作用 我在下面发布了我当前的代码 我确实得到了一个覆盖 但不是直接覆盖在该行上 我尝试将覆盖顶部设置为 div Bottom css
  • 如何在react-select v2中创建optgroup?

    我想在我的反应选择列表中包含 optgroups 但它似乎没有记录在任何地方 我有以下结构 是从评论中提取的https github com JedWatson react select issues 59 https github com
  • NodeJs读取JSON文件

    我正在使用 NodeJs 读取 json 文件 我的代码非常基本 var obj require sample json console log obj 0 Sample json 文件包含这样的字符串化 JSON sample good
  • 是否可以将自定义 HTML 添加到传单图层组和图层控件

    有什么方法可以将自定义 HTML 注入图层组和图层控件中吗 在我们的应用程序中 我们实现了滑块 输入 范围 来调整不透明度设置 并且很明显 在其控制容器内部的基础层上使用专用滑块是有意义的 没有选项或参数可以修改此控件 理想情况下 我们希望
  • Disqus 评论数始终为 0 条评论

    我想我已经按照通用代码的说明设置了 Disqus 问题是它总是说某个帖子有 0 条评论 拿这个帖子来说 http tx0rx0 com retropie and the raspberry pi http tx0rx0 com retrop
  • 语法:const {} = 变量名,任何人都可以解释或指出我正确的方向[重复]

    这个问题在这里已经有答案了 这个语法在 JavaScript 中意味着什么 可能是 ES6 const 变量名 我目前正在尝试掌握 React 在很多例子中我都遇到过这种语法 例如 const girls guys women men st
  • SVG 中三角形的圆角

    我正在尝试制作一个具有圆角的三角形 三角形将如下所示 左下角是唯一看起来相当容易制作的角 主要是因为这是一个 90 度的 转弯 该转弯是使用QSVG 中的命令具有以下参数 Q x y height x y height RADIUS从我正在
  • 禁用整个站点的 IE8 加速器

    是的 我知道有类似的问题 https stackoverflow com questions 499565 is it possible to disable ie8 accelerators on my website在 SO 上 但它已
  • 模型不是 AngularJS 中输入的日期对象

    使用 AngularJS 我试图使用输入显示日期type date
  • FormData 中的 Blob 为 null

    我正在尝试通过远程 API 通过 ajax 在 android 中发送创建的照片 我在用着相机图片背景 https github com an rahulpandey cordova plugin camerapicturebackgrou
  • 使用 Javascript eval() 100% 安全吗?

    我正在编写一个生成 Javascript 代码的 PHP 库 Javascript 代码有许多名为component001 component002 etc 页面通过 AJAX 动态加载 我需要通过 URL 变量传递组件的名称 然后由脚本进
  • 将数组中的所有元素相乘

    我在这里找不到我真正想要的例子 我想将所有数组元素相乘 因此如果数组包含 1 2 3 总和将为 123 6 到目前为止 我已经得到了这段代码 但它返回未定义 function multiply array var sum 1 for var
  • 表单序列化javascript(无框架)

    想知道 javascript 中是否有一个没有 jquery 或任何框架的函数可以让我序列化表单并访问序列化版本 2023 年更新 Use FormData https developer mozilla org en US docs We
  • Google 地图 InfoBubble PixelOffset(从标记上方的默认位置移动)

    我正在尝试实现一个自定义 infoBubble 它的框打开到标记的侧面 而不是顶部的默认位置 事实证明这比预期的要困难 使用普通的infoWindow 您可以使用pixelOffset 请参阅此处文档 https developers go
  • javascript/jquery 禁用点击提交按钮,防止重复提交

    所以我的提交按钮如下所示 a href img src images user create product png border 0 a 当我双击它时 显然会双重提交 问题是 我将信息保存在数据库中 因此那里会有重复的信息 我不想那样 这
  • D3.js - 具有多个环的圆环图

    以下示例显示了 D3 js 中的圆环图 是否可以向图表添加多个圆环 var dataset apples 53245 28479 19697 24037 40245 var width 460 height 300 radius Math
  • 简单的颜色变化

    我正在创建一个用户界面 用户可以在其中更改页面的颜色值 我想要的是获取分配给其背景颜色的值并将其变亮一定程度 我只是想获得一条亮点线 而不必每次都制作新图像 示例 用户将背景颜色设置为 ECECEC 现在我希望某个元素边框变成 F4F4F4
  • 在 Firefox 中使用 Javascript 检测键盘布局

    有没有办法在 Firefox 中检测客户端的键盘布局 我知道 Chrome 的答案是肯定的 请参阅https developer mozilla org en US docs Web API Navigator keyboard https
  • 角度 ng-repeat 根据条件添加样式

    我在 div 列表上使用 ng repeat 并且在渲染此 div 的 json 中手动添加项目 我需要定位我在 json 中添加的最后一个 div 它会自动在屏幕上渲染 即 couse 光标所在的位置 其余部分保持在相同位置 但没有给出渲

随机推荐

  • 为什么要在C ++ 11中使用“override”说明符?

    如果您知道Java 那么您可能已经很熟悉Java了 这对您来说可能是完全简单的 Override annotation 如果您一直使用C C 进行编码 那么这可能是新的 您可能会问自己一个问题 为什么在不必要的时候为什么要放一个额外的说明符
  • 数独基本规则_数独入门:你必须掌握的那些规则和技巧

    很多人想涉足数独领域 但苦于不知该如何入门和上手 甭愁了 北京市数独运动协会贴心地为菜鸟们总结了这一篇数独的元素 规则和技巧 满满的都是干货 如果你看完还觉得不够过瘾 那就移步至数独女王的达人攻略 接受高阶的训练和挑战吧 数独的规则 在空格
  • 获取OpenHarmony源码:从DevEco Marketplace获取(2)

    引言 OpenHarmony源码的获取方式有三种 从gitee GitHub等基于git的代码托管平台获取 从华为的DevEco Marketplace网站获取 从镜像站点获取 本文介绍如何在Ubuntu版本的DevEco Device T
  • 大数据知识目录

    第一阶段 安装虚拟机 第二阶段 Linux操作系统 第三阶段 zookeeper分布式协调服务框架 第四阶段 Hadoop分布式文件系统HDFS 第五阶段 Hadoop分布式计算Mapreduce和资源管理 第六阶段 数据仓库Hive 第七
  • 对于uts namespace共享的测试

    前言 单单以下列命令运行虽然是root 还不行 我们需要加 privileged 不然会报 hostname you must be root to change the host name docker run it uts host u
  • python写程序计算无穷级数_圆周率 π 展开 为 无穷级数

    圆周率 展开 为 无穷级数 其实 很简单 如图 可以用 黄色小三角形 和 橙色小三角形 以及 依此类推 下去 的 无数个 小三角形 来 逼近 圆面积 把 这个 无限逼近 的 圆面积 称为 S 因为 圆面积 r 所以 有 S r S r 即
  • 【VC++类型转换】CString和System::String类型的转换

    1 CString 转换为System String类型 这里的CString是指MFC的CString System String为CLR中的字符串类 我认为最简单的做法是 CString text System String str1
  • 【HBZ分享】Mysql的InnoDB原理

    没有配置主键时Mysql的InnoDB是如何做的 Mysql会使用自带的rowid作为主键 InnoDB的底层数据结构是什么 B Tree BTree的特点 MyISAM 非聚集索引 即 索引 和 对应数据 是分开的两个文件 找到对应数据后
  • 两年来主要工作框架图

    两年来主要工作框架图 包含了从MES到SAP的全程流程 从收集一线数据开始到汇总历史数据 归档 直到最后的BI DW分析展现 主要工作流程图
  • Java中正则表达式的使用

    在Java中 我们为了查找某个给定字符串中是否有需要查找的某个字符或者子字串 或者对字符串进行分割 或者对字符串一些字符进行替换 删除 一般会通过if else for 的配合使用来实现这些功能 如下所示 Java代码 public cla
  • 以互联网思维做好客户端软件

    加入爱奇艺的时间不长 但我感受到的震撼却不小 在外企打拼了十几个春秋 今年终于有机会进入一家国内顶尖的互联网企业 真真切切地有一番不太一样的体验 不过 我今天并不想说在外企工作与国内企业的差别 目前 我负责 爱奇艺PPS影音 PC客户端软件
  • 2种方法简单爬取JS加载的动态数据

    参考原文 http www cnblogs com buzhizhitong p 5697683 html 需要爬取的网站数据 http gkcx eol cn soudaxue queryProvince html page 1 一共是1
  • webdriver相关API

    webdriver相关API 一 元素的定位 二 操作测试对象 三 添加等待 四 打印信息 五 浏览器的操作 六 键盘事件 七 鼠标事件 一 元素的定位 webdriver提供的常用的对象定位方法 id 页面内 id 唯一 name cla
  • vector C++ 详细用法

    原文地址 http blog csdn net edify article details 4035243 vector是C 标准模板库中的部分内容 它是一个多功能的 能够操作多种数据结构和算法的模板类和函数库 vector之所以被认为是一
  • 压测注意事项

    文章目录 常用术语 流程及注意事项 常用工具 ab 命令 Jmeter 声明这里只是面向RD的 简单的 为摸清服务性能相关的自压测笔记 正规压测请向QA同学请教 常用术语 QPS 每秒请求数 也是吞吐量 内存使用情况 CPU使用情况 针对计
  • 企业级镜像仓库Harbor的部署及使用

    文章目录 一 环境准备 二 下载 三 HTTPS证书 1 生成证书颁发机构证书 2 生成服务器证书 3 提供证书给Harbor和Docker 四 Harbor配置文件 五 安装 六 Web页面 七 上传及拉取镜像 1 配置 2 上传镜像 3
  • ubuntu彻底卸载ffmpeg 与安装

    卸载 卸载旧的FFmpeg 输入以下指令 sudo apt get purge remove ffmpeg sudo apt get purge autoremove 当时试了一下 并没有成功 命令行输入 ffmpeg version 当时
  • 计算机视觉与深度学习-经典网络解析-GoogLeNet-[北邮鲁鹏]

    这里写目录标题 GoogLeNet 参考 GoogLeNet模型结构 创新点 Inception结构 它能保留输入信号中的更多特征信息 去掉了AlexNet的前两个全连接层 并采用了平均池化 引入了辅助分类器 GoogLeNet GoogL
  • 从Cookie 中取出来对特殊字符的转换

    页面存入Cookie中的值含有特殊字符 但所传的值中包含一些特殊字符比如 Cookie中是无法对特殊字符直接承载的 所以在存入Cookie时 将其转换为unicode编码 document cookie key escape value 但
  • Vue性能优化

    一 Object freeze 如果我们已知该数据是不会改变的 就不需要Vue将其设置成响应式的了 利用 Object freeze 该方法可以冻结一个对象 使该对象不能被修改 Vue就不能够为对象添加 setter getter等数据劫持