Vue3进阶(叁):关于 Vue2 项目迁移至 Vue3 的几点注意事项

news2024/11/15 23:44:11

文章目录

    • 一、前言
    • 二、Vue3 新特性
    • 三、Vue2 安全保障
    • 四、迁移方案
      • 4.1 迁移辅助工具 @vue/compat 库
    • 五、迁移注意事项
      • 5.1 升级和兼容性
      • 5.2 组件的改变
      • 5.3 Composition API
      • 5.4 Vue Router
      • 5.5 Vuex
      • 5.6 其他库和插件
      • 5.7 差异示例
        • 5.7.1 创建vue
        • 5.7.2 定义时间格式全局过滤器
        • 5.7.3 vue2自定义组件中使用到的修饰符sync
    • 六、综述
    • 七、拓展阅读

一、前言

    1 月 2 日消息,Vue.js 作者尤雨溪发文声称,Vue 2 已于 2023 年 12 月 31 日结束生命周期(EOL),目前 Vue 2 已经无法接收到新功能及修复补丁,还在使用 Vue 2 的开发团队应迁移至最新的 Vue 3 版本。
    Vue 2.0 最初发布于 2016 年,至今已经有 7 年历史,尤雨溪表示,2.0 版本是 Vue 成为主流框架历程中的一个重要里程碑,“不过随着 Vue 3 的成熟,如今是时候淘汰 Vue 2 了”。

根据公司战略要求,公司项目需进行升级改造,对于前端项目,计划由Vue2升级至Vue3,考虑到存量系统项目体量较大,故需结合两者特点制定可行性迁移方案。

二、Vue3 新特性

当前 Vue 最新稳定版本是 v3.4.21。具有如下新特性:

  1. 增加代码可维护性
    Vue2 使用的是 options API ,代码逻辑比较分散,可读性差,可维护性差。Vue3 使用的composition API 逻辑分明,可维护性高,更友好的支持TS。在 template 模板中支持多个根节点,支持jsx语法。

笔者自身体验是独立使用 Vue2 开发应用项目的时候,不管怎么去组织代码,总是无法避免在 datatemplatemethods 中上下反复横跳,这种弊端在项目规模上来之后会更加明显。而且由于 vue-cli 是基于 Webpack 开发的,当项目规模上来后,每执行一下,调试环境就要 1 分钟时间甚至更长时间,这也是大部分复杂项目的痛点之一。

Vue3Composition API 带来的代码组织方式更利于封装代码,维护起来也不会上下横跳。

但是,Vue3 也不是没有问题,由于新的响应式系统用了 Proxy,会存在兼容性问题。也就是说,如果应用系统被要求兼容 IE11,就应该选择 Vue2。而且,Vue 团队也已经放弃 Vue 3 对 IE11 浏览器的支持。

其实,官方原来是有计划在 Vue3 中支持 IE11,但后来由于复杂度和优先级的问题,这个计划就搁置了下来。

不过,随着前端的快速发展,会发现浏览器和 JavaScript 本身已经有了巨大发展。大部分的前端项目都在直接使用现代的语言特性,而且微软本身也在抛弃 IE,转而推广 Edge。所以 Vue 官方在重新思考后,决定让 Vue 3 全面拥抱未来,把原来准备投入到 Vue 3 上支持 IE11 的精力转投给 Vue 2.7

那么 Vue 2.7 会带来什么内容呢?

Vue 2.7 会移植 Vue3 的一些新特性,让开发者在 Vue2 的生态中,也能享受 Vue3 的部分新特性。在 Vue3 发布之前,Vue2 项目中就可以基于 @vue/composition-api 插件,使用 Composition API 语法,Vue2 会直接内置这个插件,在 Vue2 中默认也可以用 Compositon API来组合代码。

在这里插入图片描述

  1. 提升页面渲染性能
    Vue3 在更新DOM算法上,做了优化。在 Vue2 中,每次更新diff,都是全量对比,Vue3则只对比带有标记的,这样大大减少了非动态内容的对比消耗。

  2. 加强 MVVM 双向数据绑定效率
    Vue2 双向数据绑定利用 ES5Object.definePropert() 对对象属性进行劫持,结合发布订阅模式的方式来实现的。Vue3 中使用了 es6ProxyAPI 对数据代理。
    相比于vue2.x,使用proxy的优势如下:

  • defineProperty只能监听某个属性,不能对全对象监听;
  • 可以省去for in、闭包等内容来提升效率(直接绑定整个对象即可);
  • 可以监听数组,不用再去单独的对数组做特异性操作。vue3.x 可以检测到数组内部数据元素变化。
  1. 项目可持续发展
    Vue2已于2023.12.31停止维护,EOL之后,官方就不承诺修复和提供解答,现在继续用 Vue2 存在一定的风险隐患。

三、Vue2 安全保障

对于Vue3来说,并不是所有的Vue2特性被废弃,例如选项式API仍然支持。但同时存在非兼容性改变,对于这部分非兼容性改变,升级迁移过程中就是不得不做的改造工作。关于非兼容性改造,详参官网文档《非兼容性(或称之为破坏性)改变》。

那么,是否必须由Vue2升级至Vue3呢?

对于暂时无法迁移的用户,尤雨溪表示,用户可以更新到 Vue 2 的最终版本(2.7.16),或购买 Vue 2 的扩展支持,从而保证相关框架依然能够获得一定的安全性。

在这里插入图片描述

也就是说,如果不升级至Vue3,Vue2框架潜在的漏洞问题是无法得到修复的,存在一定的安全风险漏洞。当然,对于严重安全漏洞,Vue2还是会继续修复的。这也就不难理解为何规模稍微大点、管理审慎的公司会考虑做框架升级改造。

四、迁移方案

通过工具+手动升级

思路:
第一版可以先从基础进行迁移。完成框架整体升级到Vue3(可运行)之后可以进行细化。

步骤:
第一步: 先把Vue2 框架整体替换成 Vue3,因为目前 Vue3兼容 Options API 写法,这样代码结构可以先不用更改,后期可以逐步修改(因为涉及到所有页面和组件)。之后新增的页面和组件按照 Vue3 新增的 composition API 结构来写。

第二步: 把 Vue3 中已经不再支持的 API 和语法进行修改替换。包括 Vue3 已经不再支持过滤器filterv-model 用法也改变等。

第三步: 把项目使用到的第三方插件和UI框架(Element)替换成Vue3版本,对应用法可能也需要修改。可通过 package.json 进行检索修改。

对于这一步升级有以下几点比较麻烦:

  • 项目中依赖库并不支持vue3
  • vue2vue3的一些破坏性更改;
  • 项目中依赖组件库(ElementUI等)的破坏性更改;
  • 对一些新特性的尝试(vite,ts,pinia)等 公司项目迁移造成稳定性破坏(极其重要);

第四步: 确保项目代码语法编译无误后,需要检查代码中的业务是否正确,避免对公司项目迁移造成稳定性破坏(极其重要)。

第五步: 使用 TypeScript 重构 JS 代码,TypeScriptJavaScript 多了静态类型检查,也增加了一些新的语法,是给项目锦上添花。但是这一步会比较耗时(因为相当于修改把JS代码都要过一遍),但是项目中可以同时存在JS 和 TS,所以可以逐步替换。

使用自动化工具:
通过使用目前比较好用的开源工具可以完成第一步和第二步的转换(及框架转换废弃属性检测),目前使用比较多的就是 gogocode。

GoGoCode 是一个基于 ASTJavaScript/Typescript/HTML 代码转换工具,可以用它来构建一个代码转换程序自动化完成如框架升级、代码重构、多平台转换等工作。
当前 GoGoCode 支持解析和操作类型的代码为:JavaScript(JSX)、Typescript(TSX)、HTMLVue

对于工具改造代码,存在很多未知性,项目业务代码中有些比较复杂的(例如表单联动,规则校验等等)可能会对原来的逻辑有影响,需要逐一人工比对和测试。

4.1 迁移辅助工具 @vue/compat 库

使用自动化升级工具进行 Vue 的升级。
小项目不用多说,从 Vue2 升级到 Vue3 之后,对于语法的改变之处,挨个替换写法就可以。但对于复杂项目,需要借助自动化工具来帮我们过渡。

首先是在 Vue 3 的项目里,有一个 @vue/compat 的库,这是一个 Vue 3 的构建版本,提供了兼容 Vue 2 的行为。这个版本默认运行在 Vue 2 下,它的大部分 API 和 Vue 2 保持了一致。当使用那些在 Vue3 中发生变化或者废弃的特性时,这个版本会提出警告,从而避免兼容性问题的发生,帮助开发者很好地迁移项目。并且通过升级的提示信息,@vue/compat 还可以很好地帮助开发者学习版本之间的差异。

在下面的代码中,首先把项目依赖的 Vue 版本换成 Vue 3,并且引入 @vue/compat

"dependencies": {
-  "vue": "^2.6.12",
+  "vue": "^3.2.19",
+  "@vue/compat": "^3.2.19"
   ...
},
"devDependencies": {
-  "vue-template-compiler": "^2.6.12"
+  "@vue/compiler-sfc": "^3.2.19"
}

然后给 vue 设置别名 @vue/compat,也就是以 compat 作为入口,代码如下:

// vue.config.js
module.exports = {
  chainWebpack: config => {
    config.resolve.alias.set('vue', '@vue/compat')
    ......
  }
}

这时就会在控制台看到很多警告,以及很多优化的建议。参照建议,挨个去做优化即可。

@vue/compat 提供了很多建议后,开发者需要慢慢做修改。但从另一个角度看,“偷懒”是优秀程序员的标志,社区就有能够做自动化替换的工具,比较好用的就是“阿里妈妈”出品的 gogocode,官方文档也写得很详细,就不在这里赘述了。

自动化替换工具的原理很简单,和 VueCompiler 优化的原理是一样的,也就是利用编译原理做代码替换。利用 babel 分析 Vue 2 的源码,解析成 AST,然后根据 Vue 3 的写法对 AST 进行转换,最后生成新的 Vue 3 代码。

对于替换过程的中间编译成的 AST,可以理解为用 JavaScript 的对象去描述这段代码,这和虚拟 DOM 的理念有一些相似,基于这个对象去做优化,最终映射生成新的 Vue 3 代码。

五、迁移注意事项

5.1 升级和兼容性

首先,需要确保项目依赖项都与Vue3兼容。一些依赖库可能需要更新才能与Vue3协同工作。在升级过程中,可能还需要进行一些代码调整以适应Vue3的新变化。因此,在升级之前,建议先确保项目在最新版本的Vue2中运行正常。

5.2 组件的改变

Vue3对组件系统进行了许多改进。现在,组件默认是按组合(Composition)编写的,而不是按选项(Options)。这意味着在Vue3中,需要使用setup函数来定义组件的状态和属性。如果正在将一个使用Vue2的旧组件迁移到Vue3,那么这将是一个重大的改变。当然,对于选项式API,Vue3目前还是支持的,后期是否废弃不得而知。

解决方法:
setup函数用于新创建的组件,以及需要使用组合API的任何现有组件。对于那些不需要组合API的组件,可以选择不使用setup函数,并继续使用旧的选项API。

5.3 Composition API

Vue3引入了组合API,它是一个更灵活、更强大的方式来组织和复用组件逻辑。然而,这并不意味着组合API可以完全替代选项API。在某些情况下,可能需要同时使用两种API。

解决方法:
对于需要使用组合API的组件,确保理解了它的工作方式,并正确地将其应用于项目代码。同时,对于那些仍然需要使用选项API的组件,确保正确地进行了转换。

5.4 Vue Router

Vue Router是Vue.js的官方路由库。在Vue 3中,Vue Router也得到了更新。如果正在使用Vue Router2,那么需要了解一些重要的改变。

解决方法:
确保阅读了Vue Router 4的文档,并理解了新API的工作方式。特别是要注意createRouter函数和新的导航守卫的变化。如果遇到了任何问题,可以查看Vue Router的迁移指南以获取帮助。

5.5 Vuex

Vuex是Vue.js的状态管理库。如果正在使用Vuex 2,那么你需要了解一些重要的改变。

解决方法:
确保阅读了Vuex 4的文档,并理解了新API的工作方式。特别是要注意createStore函数和新的模块系统的变化。如果遇到了任何问题,可以查看Vuex的迁移指南以获取帮助。

5.6 其他库和插件

如果项目还使用了其他库或插件,例如Vuetifyvue-tables,确保这些库或插件已经更新到与Vue3兼容的版本。

解决方法:
查看这些库或插件的文档,并检查是否已经发布了与Vue3兼容的版本。如果有必要,你可以考虑迁移到替代库或自行编写必要的功能。

总结:
Vue2迁移到Vue3可能会遇到一些挑战,但只要了解了新版本的变化并采取正确的措施,就可以成功地进行迁移。在迁移过程中,保持耐心并持续测试你的代码以确保一切正常工作是非常重要的。

5.7 差异示例

了解一下 Vue3 不兼容的那些具体语法,除了可以帮助开发者在升级项目后,避免写的代码无法使用,还会让更好地适应 Vue3。详细的兼容性变更,官方有一个迁移指南。

5.7.1 创建vue

首先,来看一下 Vue 2 和 Vue 3 在项目在启动上的不同之处。在 Vue 2 中,使用 new Vue() 来新建应用,有一些全局的配置会直接挂在 Vue 上,比如通过 Vue.use 来使用插件,通过 Vue.component 来注册全局组件,如下面代码所示:

Vue.component('el-counter', {
  data(){
    return {count: 1}
  },
  template: '<button @click="count++">Clicked {{ count }} times.</button>'
})
let VueRouter = require('vue-router')
Vue.use(VueRouter)

上述代码注册了一个 el-counter 组件,这个组件是全局可用的,它直接渲染一个按钮,并且在点击按钮的时候,按钮内的数字会累加。

然后注册路由插件,这也是 Vue 2 中使用 vue-router 的方式。这种形式虽然很直接,但是由于全局的 Vue 只有一个,所以当在一个页面的多个应用中独立使用 Vue 就会非常困难。

看下面这段代码,在 Vue 上先注册了一个组件 el-counter,然后创建了两个 Vue 的实例。这两个实例都自动都拥有了 el-couter 这个组件,但这样做很容易造成混淆。

Vue.component('el-counter',...)
new Vue({el:'#app1'})
new Vue({el:'#app2'})

为了解决这个问题,Vue 3 引入一个新的 API ,createApp,来解决这个问题,也就是新增了 App 的概念。全局的组件、插件都独立地注册在这个 App 内部,很好的解决了上面提到的两个实例容易造成混淆的问题。下面的代码是使用 createApp 的简单示例:

const { createApp } = Vue
const app = createApp({})
app.component(...)
app.use(...)
app.mount('#app1')
const app2 = createApp({})
app2.mount('#app2')

createApp 还移除了很多常见的写法,比如在 createApp 中,就不再支持 filteronoffsetdelete 等 API。

在 Vue 3 中,v-model 的用法也有更改。其实 Vue 3 还有很多小细节的更新,比如 slotslot-scope 两者实现了合并,而 directive 注册指令的 API 等也有变化。

vue2写法 :

import Vue from 'vue'

vue3写法 :

import { createApp } from 'vue'  //引入vue的构造函数createApp ,官网推荐
import App from './App'  //  引入主页面
const app = createApp(App) 

以上3句才能真正创建vue。

5.7.2 定义时间格式全局过滤器

vue2写法 :

Vue.filter('dateFormat', function (daraStr, pattern = 'YYYY-MM-DD HH:mm:ss') {
   return moment(daraStr).format(pattern)
 })

vue3写法 :

// 定义时间格式全局过滤器
app.config.globalProperties.$filters = {
	dateFormat(daraStr, pattern = 'YYYY-MM-DD HH:mm:ss') {
		return moment(daraStr).format(pattern)} 
}
5.7.3 vue2自定义组件中使用到的修饰符sync

例如::trees.sync:model.sync
v-model.sync 将表单元素的值与数据对象中的 username 属性进行双向绑定。当输入框的值发生变化时,username 属性的值也会自动更新;反之亦然。

解决办法: 直接去除sync关键字即可

例如,vue2写法定义组件:

<treeItem v-for="(model,i) in treeDataSource" 
	:key="'root_node_'+i" 
	:root="0"  
	:num="i" 
	:nodes="treeDataSource.length" 
	:trees.sync="treeDataSource" 
	:model.sync="model" ></treeItem>

vue3写法定义组件:

<treeItem v-for="(model, i) in treeDataSource" 
	:key="`root_node_${i}`" 
	:root="0" 
	:num="i" 
	:nodes="treeDataSource.length"  
	:trees="treeDataSource" 
	:model="model" ></treeItem>   

六、综述

综上所述,首先,如果要开启一个新项目,那直接使用 Vue 3 是最佳选择。
Vue2升级至Vue3过程中,需要考虑如下要点:

  • 依赖包升级
  • 非兼容性改造
  • 浏览器兼容性

七、拓展阅读

  • Vue官网
  • Vue3 迁移指南
  • 《Vue3进阶(壹):初探 Vue3》
  • 《Vue3进阶(贰):Vue3 新特性》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1549334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

修复ubuntu引导

一、制作ubuntu启动U盘 进入启动盘后&#xff0c;点击Try ubuntu&#xff0c;进入U盘的ubuntu系统。 二、配置和添加源 sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update三、运行 Boot Repair重新制作引导 sudo boot-repair注意&#x…

QT 控件有突出感,定义控件边框

QT 控件有突出感&#xff0c;定义控件边框 1.设计师页面 在flat部分选中 这个时候按钮会失去边框如下图&#xff1a; 然后在.cpp文件中写入代码&#xff1a; ui->pushButton->setStyleSheet("border: 1px solid gray;");按钮就有了新的边框&#xff1a;

hdlbits系列verilog解答(Hadd)-65

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 本节我们创建一个半加法器。半加法器将两个位相加(无进位)并产生求和和进出。 模块声明 module top_module( input a, b, output cout, sum ); 思路: 可用真值表写出逻辑表达式,或者直接用数据流方式。 二…

VMware和Xshell连接

1.开启虚拟机 2.使用管理员账户&#xff0c;点击未列出 3.输入用户名密码 4.点击编辑虚拟网络编辑器 5.记住自己的网关和IP地址 6.打开终端 7.输入命令&#xff0c;vim / etc / sysconfig / network -scripts / ifcfg-ens33 回车 8.修改图中两处按“ I ”键进入编辑 d…

【网安小白成长之路】2.PHP与MySQL交互

&#x1f42e;博主syst1m 带你 acquire knowledge&#xff01; ✨博客首页——syst1m的博客&#x1f498; &#x1f51e; 《网安小白成长之路(我要变成大佬&#x1f60e;&#xff01;&#xff01;)》真实小白学习历程&#xff0c;手把手带你一起从入门到入狱&#x1f6ad; &…

Jenkins--在Linux上使用Docker安装

一、Jenkins 简介 Jenkins是一个流行的开源自动化服务器&#xff0c;用于持续集成和持续交付&#xff08;CI/CD&#xff09;。Jenkins的核心功能主要包括以下几点&#xff1a; 持续集成&#xff1a;Jenkins可以监控版本控制系统&#xff08;如Git、SVN&#xff09;中的代码变…

Django开发复盘

一、URL 对于一个不会写正则表达式的蒟蒻来说&#xff0c;在urls.py中就只能傻傻的写死名字&#xff0c;但是即便这样&#xff0c;还会有很多相对路径和绝对路径的问题&#xff08;相对ip端口的路径&#xff09;&#xff0c;因为我们网页中涉及到页面跳转&#xff0c;涉及到发送…

【LaTeX】7实现章节跳转

使用 LaTeX 实现章节跳转 写在最前面1. 引入 hyperref 包2. 标记章节3. 引用章节示例代码注意 小技巧总结 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;…

江协STM32:点亮第一个LED灯和流水灯

很多单片机都是高电平弱驱动&#xff0c;低电平强驱动&#xff0c;所以这里是低电平有效 点亮一个LED灯 操作STM32的GPIO需要三个操作&#xff1a; 第一个使用RCC开启GPIO的时钟 第二步使用GPIO_Init函数初始化GPIO 第三步使用输出或输入函数控制GPIO 1.使用RCC开启GPIO的时…

使用patchelf解决vscode远程连接不支持低版本glibc的问题

使用patchelf解决vscode远程连接不支持低版本glibc的问题 目录 使用patchelf解决vscode远程连接不支持低版本glibc的问题1. 动态链接库下载2. 用 patchelf 修改 vscode-server 依赖的 glibc 版本 VScode 1.86 版本的 remote 要求 glibc 2.28 及以上&#xff0c;于是在各种旧版本…

python--函数的参数问题

1.函数的参数&#xff1a; 默认值参数&#xff1a;通过定义函数时&#xff0c;将可能调用时不怎么变化的参数&#xff0c;给定默认值&#xff0c;在调用时方便调用 注意&#xff1a;位置参数不能写在默认值参数后边 可变参数&#xff08;不定长参数&#xff09;&#xff1a;在开…

阿里云云服务器资源规格推荐指南

资源规格推荐可以根据您的特定业务场景&#xff0c;为您推荐最合适的计算资源规格以及满足您算力需求的资源规模。本文介绍如何根据物理机规格推荐ECS资源和根据总算力推荐ECS资源。 根据物理机规格推荐ECS资源 IDC上云可以帮助您在将线下IDC服务器搬迁上云前&#xff0c;根据…

《深入Linux内核架构》第3章 内存管理(4)

目录 3.4 初始化内存管理 3.4.1 建立数据结构 3.4.2 特定于体系架构的设置 内核在内存中的布局 初始化步骤 分页机制的初始化 3.4.3 启动期间的内存管理 数据结构 初始化 与内核的接口 停用bootmem分配器 释放初始化数据 3.4 初始化内存管理 包括&#xff1a; 显式…

【数字图像处理matlab系列】数组索引

【数字图像处理matlab系列】数组索引 【先赞后看养成习惯】【求点赞+关注+收藏】 MATLAB 支持大量功能强大的索引方案,这些索引方案不仅简化了数组操作,而且提高了程序的运行效率。 1. 向量索引 维数为1xN的数组称为行向量。行向量中元素的存取是使用一维索引进行的。因此…

STM32收发HEX数据包

在实际应用中&#xff0c;STM32的串口通信都是以数据包格式进行收发&#xff0c;这个数据包一般都包含包头和包尾&#xff0c;表示一个数据包。源代码在文末给出 数据包格式&#xff1a; 固定长度&#xff0c;含包头包尾 可变包长&#xff0c;含包头包尾 问题1&#xff1a;当…

Anaconda虚拟环境的介绍与使用

Anaconda虚拟环境介绍 虚拟环境是一种工具&#xff0c;可以让您在同一台计算机上创建多个独立的Python环境&#xff0c;每个环境可以拥有自己的Python解释器版本、包和依赖项。使用虚拟环境有以下几个优点&#xff1a; 隔离项目环境&#xff1a; 在开发中&#xff0c;不同的项…

使用LangChain LCEL生成RAG应用、使用LangChain TruLens对抗RAG幻觉

# 导入LangChain的库 from langchain import *# 加载数据源 loader WebBaseLoader() doc loader.load("https://xxx.html")# 分割文档对象 splitter RecursiveCharacterTextSplitter(max_length512) docs splitter.split(doc)# 转换文档对象为嵌入&#xff0c;并…

3d放上模型为什么渲染不出来---模大狮模型网

如果在3D软件中放置模型后无法正确渲染出来&#xff0c;可能有几个常见的原因导致这种情况发生&#xff1a; 材质设置问题&#xff1a;确保所放置的模型具有正确的材质和纹理&#xff0c;并且材质设置正确。如果材质设置有误&#xff0c;可能会导致模型无法正确显示。 光照设置…

BaseDao封装JavaWeb的增删改查

目录 什么是BaseDao&#xff1f; 为什么需要BaseDao&#xff1f; BaseDao的实现逻辑 什么是BaseDao&#xff1f; Basedao 是一种基于数据访问对象&#xff08;Data Access Object&#xff09;模式的设计方法。它是一个用于处理数据库操作的基础类&#xff0c;负责封装数据库…

大模型论文阅读:ADAPTIVE BUDGET ALLOCATION FOR PARAMETEREFFICIENT FINE-TUNING

大模型论文阅读:ADAPTIVE BUDGET ALLOCATION FOR PARAMETEREFFICIENT FINE-TUNING 论文链接:https://arxiv.org/pdf/2303.10512v1.pdf 当存在大量下游任务时,微调所有预训练模型的参数变得不可行。因此,为了以参数高效的方式学习预训练权重的增量更新,提出了许多微调方法,…