返回顶部
首页 > 资讯 > 前端开发 > JavaScript >浅谈Vue3的几个优势
  • 774
分享到

浅谈Vue3的几个优势

2024-04-02 19:04:59 774人浏览 安东尼
摘要

目录1、源码1.1 monorepo1.2 typescript2、性能2.1 优化源码体积2.3 Proxy2.4 Composition api Vue2已经非常优秀,且具备完善

Vue2已经非常优秀,且具备完善的社区和生态,但是vue3仍然在源码、性能和语法 API 三个大的方面进行了优化

1、源码

1.1 monorepo

源码管理方式采用monorepo的方式进行管理,monorepo 把这些模块拆分到不同的 package 中,每个 package 有各自的 API、类型定义和测试。这样使得模块拆分更细化,职责划分更明确,模块之间的依赖关系也更加明确,开发人员也更容易阅读、理解和更改所有模块源码,提高代码的可维护性

1.2 TypeScript

Vue2时期选择的是flow,由于flow自身存在一些功能上的短板,且TS发展势头更好,Vue3选择使用TS编写代码,也可以更好的支持TS提升开发体验

2、性能

2.1 优化源码体积

主要从两个方面进行了源码体积优化:

移除一些冷门API,比如 filterinline-template

API减少,必然会减少代码体积,这点非常容易理解

引入tree-shaking 减少打包体积

tree-shaking 依赖 ES2015 模块语法的静态结构(即 import export),通过编译阶段的静态分析,找到没有引入的模块并打上标记,这个技术在webpack等打包工具上已经非常普及

在Vue3中的应用:我们大概率不会使用Vue提供的全部API,总会有一些冷门的、业务场景单一使用不到的API,那么在打包的过程中就可以将这些没有被用户使用的API移除,减少打包体积

2.3 Proxy

Vue2之前使用Object.defineProperty进行数据劫持


Object.defineProperty(source, key, {
  get(){
    // todo...
  },
  set(){
    // todo...
  }
})

其存在一些缺陷

  • 必须预先知道劫持的key是什么,并不能很好的监听到对象属性的添加、删除
  • 初始化时递归遍历整个data,导致深层嵌套数据结构造成性能负担,
  • Vue3使用Proxy进行数据劫持,可以很好的规避Object.defineProperty带来的缺陷

p = new Proxy(source, {
  get() {
    // todo...
  },
  set() {
    // todo...
  }
})

2.4 Composition API

Vue3 在语法方面进行了优化,主要是提供了 Composition API替换原本的Options API

Options API提供了 methodscomputeddataprops以及各个阶段的生命钩子选项,开发者可以在每个API中做着对应的事情,各司其职,上手和理解成本非常低,对于新手开发者非常友好。使用其开发小型项目时代码的阅读性、维护性等也是可观的,但是当遇到大型项目或者较为复杂的业务逻辑时,代码将会变得非常难以维护,常常导致修改一个功能需要在代码中跳转多个地方,一个功能的代码分散在各个地方,造成阅读和理解成本直线增加,Composition API,它有一个很好的机制去解决这样的问题,就是将某个逻辑关注点相关的代码全都放在一个函数里,这样当需要修改一个功能时,就不再需要在文件中跳来跳去

到此这篇关于浅谈Vue3的几个优势的文章就介绍到这了,更多相关Vue3优势内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 浅谈Vue3的几个优势

本文链接: https://lsjlt.com/news/155421.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 浅谈Vue3的几个优势
    目录1、源码1.1 monorepo1.2 TypeScript2、性能2.1 优化源码体积2.3 Proxy2.4 Composition API Vue2已经非常优秀,且具备完善...
    99+
    2024-04-02
  • 浅谈Springboot之于Spring的优势
    Spring在Java EE开发中是实际意义上的标准,但我们在开发Spring的时候可能会遇到以下令人头疼的问题:(1)大量配置文件的定义;(2)与第三方软件整合的技术问题,Spring每个新版本的推出都以减少配置作为自己的主要目标,例如:...
    99+
    2023-05-31
    springboot 优势 bo
  • 浅谈Redis的几个过期策略
    目录概述设置过期时间三种过期策略定时删除懒汉式式删除定期删除Redis采用的过期策略总结概述 设置过期时间 expire key time(以秒为单位) 这是最常用的方式 setex...
    99+
    2024-04-02
  • 浅谈Mybatis之参数传递的几种姿势
    目录I. 环境配置1. 项目配置2. 数据库表II. 参数传递1. @Param注解2. 单参数3. 多参数3. Map传参4. POJO对象5. 简单参数 + Map参数6.小结I...
    99+
    2024-04-02
  • PostgreSQL与MySQL优劣势比较浅谈
    目录1 简介2 PostgreSQL比mysql强大在那些方面3 PostgreSQL 为什么在国内没有MySQL流行4 postgresql比mysql一些主要区别5 postgresql比mysql特征比较5.1 m...
    99+
    2023-04-19
    PostgreSQL与MySQL优劣势比较 PostgreSQL优劣势 MySQL优劣势
  • 浅谈React多个setState会调用几次
    目录1. 两个setState,调用几次?2. 两个setState,调用的是哪一个?3. 两个setState放在setTimeout中?4. 总结1. 两个setState,调用...
    99+
    2024-04-02
  • 浅谈Spring中几个PostProcessor的区别与联系
    目录Spring几个PostProcessor的区别首先明确 Bean 的生命周期:查看 IOC 容器创建时的调用流程spring-postProcessor的执行时机BeanPos...
    99+
    2024-04-02
  • 浅谈Java当作数组的几个应用场景
    目录前言1.保存数据2.. 参数传基本数据类型3.. 参数传数组类型(引用数据类型)4. 作为函数的返回值总结前言 对于数组,在C语言中就有过学习,但是,并没有怎么进行总结过,所以,...
    99+
    2022-11-13
    数组的应用场景 Java数组的用法 java数组的应用
  • 浅谈Vue3中watchEffect的具体用法
    前言 watchEffect,它立即执行传入的一个函数,同时响应式追踪其依赖,并在其依赖变更时重新运行该函数。 换句话说:watchEffect相当于将watch 的依赖源...
    99+
    2024-04-02
  • 浅谈C++11中的几种锁
    目录互斥锁(mutex)条件锁(condition_variable)自旋锁(不推荐使用)递归锁(recursive_mutex)互斥锁(mutex) 可以避免多个线程在某一时刻同时...
    99+
    2024-04-02
  • 浅谈C#中[]的几种用法
    目录一、导入外部DLL函数二、结构体时表明属性一、导入外部DLL函数 如[DllImport(“kernel32.dll”)]这叫引入kernel32.dll...
    99+
    2023-01-28
    C# []用法 C# []
  • 浅谈绕过open_basedir 的几种用法
    基础知识: open_basedir 是php.ini 中的 一个配置选项。可以用作与 将用户访问文件的活动范围限制在指定的区域 , 假设 open_basedir=/var/www/html:/tmp/ , 那么通过 web 1 访问服务...
    99+
    2023-08-31
    php 开发语言
  • 浅谈vue+vite项目部署会遇到的几个问题
    今天来打包硅谷外卖项目,通过解决项目中遇到的问题来加深对vite打包的理解。 运行yarn build 报错,报[WARNING] Expected identifier but f...
    99+
    2023-05-18
    vue vite 项目部署 vue vite部署
  • 浅谈vue3中ref、toRef、toRefs 和 reactive的区别
    目录一、ref——定义任意类型响应式数据二、reactive——定义响应式对象三、toRef——将一个 rea...
    99+
    2024-04-02
  • 浅谈线程的几种可用状态
    1. 新建( new ):新创建了一个线程对象。...
    99+
    2023-05-31
    线程 状态
  • 浅谈java socket的正确关闭姿势
    java socket对应的是网络协议中的tcp,tcp的三次握手、四次挥手、11中状态什么的这里就不说了,不知道大家平常使用socket的时候如果不注意的情况下,会不会遇到各种异常...
    99+
    2024-04-02
  • 浅谈Vue3中key的作用和工作原理
    这个key属性有什么作用呢?我们先来看一下官方的解释: kekey属性主要用在Vue的虚拟DOM diff算法中,在新旧nodes对比时辨识Vnodes; 如果不使...
    99+
    2024-04-02
  • 浅谈shell 遍历数组的几种方法
    背景 某天遇到一个问题,现象如下:第一种遍历正常打印元素,然而第二种遍历只会打印一个元素! #!/bin/bash # $1 代表文件目录 # 执行 eg: # sh your_shell.sh /user/li...
    99+
    2022-06-04
    shell 遍历数组
  • 浅谈go中cgo的几种使用方式
    目录最简单的CGO程序源码方式调用C函数内部机制编译和链接参数编译参数:CFLAGS/CPPFLAGS/CXXFLAGS链接参数:LDFLAGS通过静态库的方式调用C函数通过动态库的...
    99+
    2024-04-02
  • 浅谈react路由传参的几种方式
    第一种传参方式,动态路由传参 通过设置link的path属性,进行路由的传参,当点击link标签的时候,会在上方的url地址中显示传递的整个url <Link to='/...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作