IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue优化技巧 -> 正文阅读

[JavaScript知识库]vue优化技巧

目录

一、使用函数式组件加快组件渲染

二、关于v-for的一些处理

三、局部变量的处理技巧

四、v-show和v-if的使用

五、vue-lazyload图片懒加载研究

六、长列表和无线列表的性能优化方案

七、路由懒加载和骨架屏提高首屏加载速度

八、watch和computed

九、合理使用异步组件

十、自定义事件的销毁

十一、第三方插件按需引入


一、使用函数式组件加快组件渲染

函数式组件:

  • 没有管理任何状态
  • 没有监听任何传递给它的状态
  • 没有生命周期方法
  • 只接收一些prop的函数
// functionCom
<template functional>
  <div v-for="(item, index) in props.list" :key="index">{{item}}</div>
</template>
<script>
  export default{
   props: {
    list: {
      required: true,
      type: Array
    }
   }
  }
</script>



父组件
<template>
  <div>
    <functionCom :list="list"></functionCom>
  <div>
</template>
<script>
  export default{
   data() {
     list: ['q',1,2,3]
   }

  }
</script>

二、关于v-for的一些处理

v-for 之后需要带上 :key? ?key尽量避免使用index?

key是给每一个vnode的唯一id,也是diff的一种优化策略,可以根据key,更准确, 更快的找到对应的vnode节点

如果使用index 会造成删除同级key时增加多余的判断,并且会造成多余的渲染

当使用特定的id做为key时,就不会多判断一次

?

?

三、局部变量的处理技巧

计算属性 / computed 尽量避免使用 this.? 将数据赋值给局部变量 减少使用this. 因为每次使用this.的时候都会触发get函数做依赖收集

四、v-show和v-if的使用

需要频繁切换的使用v-show? 只切换一次的使用v-if

只判断一次组件是否渲染使用v-if

<div v-show="visible">
 <com :n="num"></com>
</div>
<div v-show="!visible">
 <com n="3"></com>
</div>

五、vue-lazyload图片懒加载研究

图片懒加载 图片的懒加载就是在页面打开的时候,不要一次性全部显示页面所有的图片,而是只显示当前视口内的图片,一般在移动端使用(PC端主要是前端分页或者后端分页)。

优点:页面加载速度快、可以减轻服务器的压力、节约了流量,用户体验好

npm install vue-lazyload --save

// 全局配置
import VueLazyload from 'vue-lazyload'
Vue.use(VueLazyload)
// 配置项
Vue.use(VueLazyload, {
  preLoad: 1.3, // 预加载高度比例  默认值
  error: 'error.png',
  loading: 'loading.gif',//懒加载时占位图片(加载中...)预加载图片一定要有,不然会一直重复加载占位图
  attempt: 1// 尝试加载图片数量,
}


// 使用
 <li>
     <img v-lazy="img.png">
  </li>
或是
  <li v-for="(img,index) in imgList">
     <img :v-lazy="img.url">
  </li>

DOM视口监听器 es6? 自己实现图片懒加载

this.$refs['pics'].forEach(item => {
  this.obj.observe(item);
})


this.obj = new IntersectionObserver(changes => {
   // 触发

   changes.foreach((isIntersecting, target) => {
    if(!isIntersecting) return;
    // 出现在视口中 加载真实的图片
    const img = target.querySelector('img');
    if(!img) return;
    img.src = img.getAttribute('data-src');
    img.onload = () => img.style.opcity = 1;
   })
}, { threshold: [1]})?

// 滚动到底部
this.onLoad = new IntersectionObserver(([item]) => {
  if(item.isIntersecting) {
   // 滚动到底部
  }
})

this.onLoad.observe(this.$refs['loading'])

六、长列表和无线列表的性能优化方案

如果列表是纯粹的数据展示,不会有任何变化,就不需要做响应式

export default {
  data() {
   return {
    list: []
   }
  },
  async created() {
    const dataList= await getData();
    this.list = Object.freeze(dataList)
  }
}

?如果是大数据的长列表 可采用虚拟滚动,只渲染少部分区域的内容

vue-virtual-scroller / vue-virtual-scroll-list

七、路由懒加载和骨架屏提高首屏加载速度

在路由列表中使用 () => import('xxxxx')

八、watch和computed

computed能实现的 watch都能实现,但是能用computed的都用computed,因为它有缓存。

watch里可以有异步事件

九、合理使用异步组件

() => import()
defineAsyncComponent(() => import())

十、自定义事件的销毁

比如addEventListener setTimeout这些在组件销毁的时候都应该主动销毁他们

十一、第三方插件按需引入

使用按需引入会减小打包后的体积

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:46:33  更:2022-10-31 11:51:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 19:51:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码