從java到vue3:第二天

文章目錄

  • 前言
  • 一、setup
    • 1.定義
    • 2.作用
    • 3.響應式數據
      • 1.ref
      • 2.reactive
      • 3.ref與reactive的區別
      • 4.toRefs
      • 5.computed
    • 二、Watch
    • 1.監視ref:基本數據
    • 2.監視ref:對象數據
    • 3.監視reactive:對象數據。
    • 4.監視ref或reactive中某個屬性
    • 5.監視多個屬性
  • 總結


前言

  • setup、響應式數據的幾個函數、watch監聽。

一、setup

1.定義

  • 它是一個新的組件選項,與以前的data、methods標簽相同的地位。

2.作用

  • 可以在setup里面定義變量、方法,同時返回值可以使用類似于lambda表達式的簡便寫法。

關鍵問題1:在setup中能否讀到以前data選項或methods選項里面的數據?
不能,淺顯的理解一下就是。因為setup沒有維護this對象,無法調用。
關鍵問題2:在data選項或methods選項中可以讀到setup中的數據?
可以,需要使用this進行調用。

setup示例:

export default {name:'Person', // 組件名// 1.setup能和methods data共存 // 2.data里面能不能讀到setup里面的數據?// >>可以,使用this.變量進行讀取// 3.但是setup不可以讀到data里面的數據// 4.setup是一個全新的配置項 它的優先級比vue2中的beforeCreate的優先級更高// 5.它不存在this,沒有維護this對象setup(){// 1.數據 ---> data選項let name = '張三'let age = 18let tel = '1388888888'// 2.方法function changeName () {// 注意:此時的數據不是響應式的// 雖然改了但是頁面不會有變化 name = 'zhang-san'}function changeAge () {age += 1}function showTel () {alert(tel)}// 2.通過返回值進行返回數據 可交可不交return {name,age,changeName,changeAge,showTel}// return ()=>'哈哈' 直接返回 setup的返回值也可以是個渲染函數}
}

語法糖:

  • 可以直接寫在script標簽里,自動返回變量以上的寫法等價于下面的寫法

關鍵問題3:如果說需要自定義命名組件名需要單獨設置,但是默認是與文件名一致。
關鍵問題4:如果說要想基本數據類型是響應式的,需要導入ref,將響應式數據用ref()框起來,需要在改變的時候使用.value進行修改。因為在標簽里的變量返回值是一個RefImpl實例對象,也就是返回的數據用對象封裝起來了,里面的數據就需要.value來進行調用。

<!-- 需要單獨設置組件名的話可以在這里設置 就不使用插件了 -->
<script lang="ts">
export default {name:'Person123', // 組件名
}
</script><script lang="ts" setup>
import {ref} from 'vue'let name = ref('張三')let age = ref(18)let tel = '1388888888'function changeName () {name.value = 'zhang-san'}function changeAge () {age.value += 1}function showTel () {alert(tel)}
</script>

3.響應式數據

1.ref

  • ref是一個響應式的API,用于創建一個響應式的引用,通常用于響應式基本數據類型,也可以用于對象類型的響應
  • 使用的時候將需要響應式的數據導入ref,然后用ref()包裹起來,然后在需要進行修改的時候調用數據.value進行修改。以上示例已經展示了ref的基本數據類型響應。
  • 返回的是一個Proxy代理對象。
    ref對象類型響應:
<template><div class="car"><h2>品牌:{{ car.brand }}</h2><h2>價格:{{ car.price }}</h2><ul><li v-for="c in cars" :key="c.name">車名:{{ c.name }},價格:{{ c.price }}</li></ul><button @click="changePrice">修改價格</button></div>
</template><script lang="ts">
export default {name:'Car', 
}
</script><script lang="ts" setup>// 1.導入refimport {ref} from 'vue'// 2.用ref包裹起來let car = ref({brand:'保時捷',price:100,})// 對象數組let cars = ref([{name:'奔馳',price:100},{name:'法拉利',price:1000},])// 3.直接修改function changePrice() {car.value.price += 10 }console.log(car)
</script><style scoped>.car {background-color: skyblue;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;}.button {margin: 0 5px;}
</style>
  • 它的外層使用ref包裹起來的,內部是reactive處理的。需要先用value讀到對象后再進行操作才可以,包括ref里面包含了數組對象,需要用value去讀到數組對象后在進行索引等其他操作。
<template><div class="car"><h2>品牌:{{ car.brand }}</h2><h2>價格:{{ car.price }}</h2><ul><li v-for="c in cars" :key="c.name">車名:{{ c.name }},價格:{{ c.price }}</li></ul><button @click="changePrice">修改價格</button></div>
</template><script lang="ts">
export default {name:'Car', 
}
</script><script lang="ts" setup>// 1.導入reactiveimport {ref} from 'vue'// 2.用ref包裹起來let car = ref({brand:'保時捷',price:100,})// 對象數組let cars = ref([{name:'奔馳',price:100},{name:'法拉利',price:1000},])// 3.直接修改function changePrice() {car.value.price += 10 }console.log(car)
</script><style scoped>.car {background-color: skyblue;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;}.button {margin: 0 5px;}
</style>

2.reactive

  • reactive也是響應式API,只能用于創建一個響應式對象。
  • 使用的時候需要導入reactive,然后用reactive包裹起來,然后直接修改即可。
    返回的也是一個Proxy代理對象。
    注意不用.value。
    reactive響應對象類型:
<template><div class="car"><h2>品牌:{{ car.brand }}</h2><h2>價格:{{ car.price }}</h2><button @click="changePrice">修改價格</button></div>
</template><script lang="ts">
export default {name:'Car', 
}
</script><script lang="ts" setup>// 1.導入reactiveimport {reactive} from 'vue'// 2.用reactive包裹起來let car = reactive({brand:'保時捷',price:100,})// 3.直接修改function changePrice() {// 4.不用加.value了car.price += 10}
</script><style scoped>.car {background-color: skyblue;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;}.button {margin: 0 5px;}
</style>

數組代理對象:

  • v-for類似于我們寫的mybatis的xml方式的sql語句里面的forEach,這里表示遍歷cars,:keys表示能確定每一個數據的主鍵元素,同樣需要用reactive來括起來,訪問元素就要用c來訪問。
<template><div class="car"><ul><li v-for="c in cars" :key="c.name">車名:{{ c.name }},價格:{{ c.price }}</li></ul></div>
</template><script lang="ts">
export default {name:'Car', 
}
</script><script lang="ts" setup>// 1.導入reactiveimport {reactive} from 'vue'// 2.用reactive包裹起來// 對象數組let cars = reactive([{name:'奔馳',price:100},{name:'法拉利',price:1000},])
</script><style scoped>.car {background-color: skyblue;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;}.button {margin: 0 5px;}
</style>

3.ref與reactive的區別

區別1:ref用來生成響應式數據的時候,需要用.value來訪問。
區別2:ref能夠修飾基本類型、對象類型的響應式數據。
總結:基本類型用ref,層級不深的對象使用ref。
總結:層級深的使用reactive。

4.toRefs

作用:能夠將reactive包裹的對象響應式數據解構,能夠將它的每一個字段變成ref對象。
實質:將某個對象的字段結構,將該字段與對象里的字段變成一摸一樣的數據,意思是調用toRefs后我們可以修改對象的字段了。

<template><div class="person"><h2>{{ name }}</h2><h2>{{ age }}</h2><button @click="changeAge">修改年齡</button><button @click="changeName">修改名字</button></div>
</template><script lang="ts">
export default {name:'ToRefs',
}
</script><script lang=ts setup>import {ref,reactive,toRefs} from 'vue'let person = reactive({name:"kkk",age:999,})let {name, age} = toRefs(person)function changeName() {name.value = name.value + "k"}function changeAge() {age.value += 1}
</script><style scoped>.person {background-color: skyblue;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;}.button {margin: 0 5px;}
</style>

5.computed

定義:計算屬性,基于響應式數據計算響應值。
使用:需要get和set方法。像jv里的getter和setter。
v-model:數據雙向綁定。
const:明確聲明不可變數據。
const [str1,str2] = val.split(‘’-‘’) :數組也能解構定義。

<template><div class="person">姓:<input type="text" v-model="firstName"> <br>名:<input type="text" v-model="lastName"> <br><!-- v-model 是 Vue 提供的雙向數據綁定指令,主要用于 <input><select><textarea> 等表單元素,實現數據與視圖的自動同步。 -->全名:<span>{{ fullname }}</span> <br>修改:<button @click="changeFullName"></button></div>
</template><script lang="ts">
export default {name:"Compute",
}
</script><script setup lang="ts">import {ref,reactive, computed} from 'vue'let firstName = ref("jo")let lastName = ref("ny")// 變成一個可讀可寫的計算屬性let fullname = computed({get(){return firstName.value.slice(0,1).toUpperCase() + firstName.value.slice(1) + "-" + lastName.value},set(val){// 數組也能解構賦值const [str1,str2] = val.split("-")firstName.value = str1lastName.value = str2}})function changeFullName() {fullname.value = "gy-ro"}
</script><style scoped>.person {background-color: skyblue;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;}.button {margin: 0 5px;}
</style>

二、Watch

  • 它能夠監視數據.。

注意1:需要監視的值不需要加.value,因為自動解包。
注意2:調用watch返回值是一個監視停止器,再次調用就會停止監視。
注意3:它只監視4種數據。函數返回值,ref、reactive和它們的數組。

1.監視ref:基本數據

<template><div class="person"><h1>監視數據</h1><h1>當前數據求和為:{{ sum }}</h1><button @click="changeSum"></button></div>
</template><script lang="ts">
export default { // 實際上這里要縮進這個大括號一下才不會報錯name:"Watch",
}
</script>
<script lang="ts" setup>
import {ref, watch} from 'vue'
// 需要用ref或reactive包裹起來let sum = ref(0)function changeSum(){sum.value += 1}// 監視const stopWatch = watch(sum, (nv,ov)=>{console.log("sum變化了", nv, ov)if(nv >= 10) {stopWatch() // 如果newValue大于等于10就停止監視 stopWatch()表示停止監視}})
</script>

2.監視ref:對象數據

  • 監視用ref包裹的對象數據需要手動開啟深度監視。
  • 監視的是地址,整個對象,只有整個對象改變的時候才會觸發監視器。
  • 如果想要深度監視,需要手動添加深度監視。
  • {immediate:true}:添加在深度監視后面。表示不管你改沒改,先執行一次箭頭函數。它提醒的是舊的引用,如果沒改變,那就還是新的那個對象,已經改了。
  • 實際上開發不管舊值。

參數1:被監視的數據。
參數2:監視的回調函數。
參數3:配置對象。
實質:改的是它的引用。

<template><div class="person"><h1>情況二:監視【ref】定義的【對象類型】數據</h1><h2>姓名:{{ person.name }}</h2><h2>年齡:{{ person.age }}</h2><button @click="changeName">修改名字</button><button @click="changeAge">修改年齡</button><button @click="changePerson">修改整個人</button></div></template><script lang="ts">
export default {name:"Watch2",
}</script><script lang="ts" setup>import {ref,watch} from 'vue'// 數據let person = ref({name:'張三',age:18,})// 方法function changeName(){person.value.name += '~'}function changeAge(){person.value.age += 1}function changePerson(){person.value = {name:'李四', age:90}}/* 監視,情況一:監視【ref】定義的【對象類型】數據,監視的是對象的地址值,若想監視對象內部屬性的變化,需要手動開啟深度監視watch的第一個參數是:被監視的數據watch的第二個參數是:監視的回調watch的第三個參數是:配置對象(deep、immediate等等.....) */watch(person,(nv,ov)=>{console.log('person變化了',nv,ov)}, {deep:true})</script>

3.監視reactive:對象數據。

  • 默認開啟深度監視。且關不掉哦。

修改對象: Object.assign(person,{name:‘李四’,age:80})。
第一個參數是要改的對象,第二個參數是要改的內容。
實質:沒改變原引用,只覆蓋了值。

<template><div class="person"><h1>情況三:監視【reactive】定義的【對象類型】數據</h1><h2>姓名:{{ person.name }}</h2><h2>年齡:{{ person.age }}</h2><button @click="changeName">修改名字</button><button @click="changeAge">修改年齡</button><button @click="changePerson">修改整個人</button><hr><h2>測試:{{obj.a.b.c}}</h2><button @click="test">修改obj.a.b.c</button></div></template><script lang="ts" setup name="Person">import {reactive,watch} from 'vue'// 數據let person = reactive({name:'張三',age:18})let obj = reactive({a:{b:{c:666}}})// 方法function changeName(){person.name += '~'}function changeAge(){person.age += 1}function changePerson(){Object.assign(person,{name:'李四',age:80})}function test(){obj.a.b.c = 888}// 監視,情況三:監視【reactive】定義的【對象類型】數據,且默認是開啟深度監視的watch(person,(nv,ov)=>{console.log('person變化了',nv,ov)})watch(obj,(nv,ov)=>{console.log('Obj變化了',nv,ov)})</script>

4.監視ref或reactive中某個屬性

  • 當我們直接修改的時候直接把原對象的地址改了,在watch傳入的第一個參數傳遞的時候就要看地址到底是誰的,可能是原對象的可能是已經改了的。
  • 總之一句話,如果我們只想監聽對象的其中某個屬性,將他寫成箭頭函數形式,并開啟深度監聽,記住就行。
<template><div class="person"><h1>情況四:監視【ref】或【reactive】定義的【對象類型】數據中的某個屬性</h1><h2>姓名:{{ person.name }}</h2><h2>年齡:{{ person.age }}</h2><h2>汽車:{{ person.car.c1 }}{{ person.car.c2 }}</h2><button @click="changeName">修改名字</button><button @click="changeAge">修改年齡</button><button @click="changeC1">修改第一臺車</button><button @click="changeC2">修改第二臺車</button><button @click="changeCar">修改整個車</button></div>
</template><script lang="ts" setup name="Person">import {reactive,watch} from 'vue'// 數據let person = reactive({name:'張三',age:18,car:{c1:'奔馳',c2:'寶馬'}})// 方法function changeName(){person.name += '~'}function changeAge(){person.age += 1}function changeC1(){person.car.c1 = '奧迪'}function changeC2(){person.car.c2 = '大眾'}function changeCar(){person.car = {c1:'雅迪',c2:'愛瑪'}}// 監視,情況四:監視響應式對象中的某個屬性,且該屬性是基本類型的,要寫成函數式/* watch(()=> person.name,(newValue,oldValue)=>{console.log('person.name變化了',newValue,oldValue)}) */// 監視,情況四:監視響應式對象中的某個屬性,且該屬性是對象類型的,可以直接寫,也能寫函數,更推薦寫函數watch(()=>person.car,(newValue,oldValue)=>{console.log('person.car變化了',newValue,oldValue)},{deep:true})
</script>

5.監視多個屬性

  • 多個屬性放數組里,說白了如果是單純的監聽某一個屬性,寫成箭頭函數形式,如果監聽某一個對象,那就直接寫就行了。
<template><div class="person"><h1>情況五:監視上述的多個數據</h1><h2>姓名:{{ person.name }}</h2><h2>年齡:{{ person.age }}</h2><h2>汽車:{{ person.car.c1 }}{{ person.car.c2 }}</h2><button @click="changeName">修改名字</button><button @click="changeAge">修改年齡</button><button @click="changeC1">修改第一臺車</button><button @click="changeC2">修改第二臺車</button><button @click="changeCar">修改整個車</button></div>
</template><script lang="ts" setup name="Person">import {reactive,watch} from 'vue'// 數據let person = reactive({name:'張三',age:18,car:{c1:'奔馳',c2:'寶馬'}})// 方法function changeName(){person.name += '~'}function changeAge(){person.age += 1}function changeC1(){person.car.c1 = '奧迪'}function changeC2(){person.car.c2 = '大眾'}function changeCar(){person.car = {c1:'雅迪',c2:'愛瑪'}}// 監視,情況五:監視上述的多個數據watch([()=>person.name,person.car],(newValue,oldValue)=>{console.log('person.car變化了',newValue,oldValue)},{deep:true})</script>

總結

  • 今天學了ref、reactive、toRefs、watch監聽的五大情況。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90364.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90364.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90364.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于 JmsClient 的高效消息通信架構設計與實現

1. 引言 1.1 消息通信在分布式系統中的作用 隨著企業級應用的復雜性不斷提升,傳統的同步調用方式已難以滿足高并發、低延遲、高可用等需求。消息通信機制通過異步解耦的方式,提升了系統的可擴展性和容錯能力。Java Message Service(JMS)作為一種標準的消息中間件接口,廣…

2025.7.24

這題寫了好一會, 因為遇到一些問題分糖分的是原來的糖果還是拿到了別人給的糖果加起來一起的?如果是分原來的糖果之后那就要再另外那一個數組存, 數組初始為0, 那么分完之后自己的那一份應該存進另一個數組, 是加法如果是分拿到了別人給的糖果加起來一起的, 那么分完之后不是直…

學習設計模式《十九》——享元模式

一、基礎概念 享元模式的本質是【分離與共享】。 思考享元模式序號說明1 【分離】的是對象狀態中變與不變的部分&#xff0c;【共享】的是對象中不變的部分&#xff1b; 享元模式的關鍵就在于【分離變與不變】把不變的部分作為享元對象的內部狀態&#xff0c;而變化部分則作為外…

AI助力 三步實現電子發票發票號碼的提取

小伙伴們&#xff0c;大家好今天我們來利用ollama本地大模型&#xff0c;三步實現電子發票發票號碼的提取。 步驟1&#xff1a;安裝Ollama訪問官網https://ollama.com/ 下載相應的版本進行安裝&#xff0c;下載屬于自己平臺的ollama&#xff0c;根據安裝向導完成安裝。…

告別下載中斷:深入解析Tomcat JSP中的“遠程主機強迫關閉連接”與“軟件中止連接”

在Web開發中,提供文件下載功能是一項常見需求。然而,當用戶在Tomcat JSP項目中嘗試下載文件時,有時會遭遇令人頭疼的錯誤提示:“遠程主機強迫關閉了一個現有鏈接”(Remote host closed connection unexpectedly)或“您的主機中的軟件中止了一個已建立的連接”(Software …

實戰演練—基于Transformers的NLP解決方案總結

實戰演練—基于Transformers的NLP解決方案總結 截至目前講解的基礎組件 以文本分類為例 Transformers顯存優化 截至目前講解的基礎組件 Pipeline 流水線,用于模型推理,封裝了完整的推理邏輯,包括數據預處理、模型預測及后處理 Tokenizer 分詞器,用于數據預處理,將原始文本…

Java 解析前端上傳 ZIP 壓縮包內 Excel 文件的完整實現方案

使用zip壓縮包上傳excel文件的優點1、體積更小&#xff0c;節約帶寬2、比excel直接讀取更方便攜帶參數及修改3、可以一次性批量導入Java代碼 ControllerPostMapping("/importData")ApiOperationSupport(order 3)ApiOperation(value "上傳")public R impo…

【shell腳本編程】day1 備份指定文件類型

文章目錄1、腳本要求2、腳本編寫3、腳本解釋4、腳本改進1、腳本要求 編寫一個腳本&#xff0c;遍歷/data/目錄下的.txt文件將這些txt文件做一個備份備份的文件名增加一個年月日的后綴&#xff0c;比如將aming.txt備份為aming.txt_20231001 2、腳本編寫 [rootlocalhost shell…

Gata 攜手 Walrus 構建 AI 的開放執行基礎設施

致力于開發去中心化大模型推理、訓練和數據技術的 Gata&#xff0c;現已整合 Walrus&#xff0c;作為其 AI 開放執行基礎設施的核心組件。Walrus 將為 Gata 的首款產品 DataAgent 提供關鍵的數據層&#xff0c;助力其全套應用&#xff0c;將去中心化 AI 的優勢直接帶給用戶&…

DNS及DNS域名解析流程

文章目錄什么是DNS域名解析DNS服務器DNS域名解析流程什么是DNS域名解析 我們首先要了解域名和IP地址的區別。IP地址是互聯網上計算機唯一的邏輯地址&#xff0c;通過IP地址實現不同計算機之間的相互通信&#xff0c;每臺聯網計算機都需要通過IP地址來互相聯系和分別。 但由于I…

用 STM32 的 SYSTICK 定時器與端口復用重映射玩轉嵌入式開發

目錄 1. SYSTICK 定時器的基本功:時間管理大師 1.1 SYSTICK 的核心寄存器與工作原理 1.2 配置 SYSTICK 的正確姿勢 1.3 實戰:用 SYSTICK 實現精準延時 1.4 小技巧:SYSTICK 的低功耗優化 2. SYSTICK 中斷:讓你的程序“活”起來 2.1 配置 SYSTICK 中斷 2.2 實戰:用 S…

Sa-Token:輕量級Java權限認證框架使用指南

一、Sa-Token簡介 Sa-Token 是一個專注于權限認證的輕量級 Java 框架&#xff0c;旨在簡化登錄認證、權限控制等功能的實現。其核心功能包括&#xff1a; 登錄認證&#xff1a;通過 Token 機制管理用戶會話&#xff0c;支持單點登錄&#xff08;SSO&#xff09;。權限認證&am…

動態 vs 靜態住宅代理,哪種更適合廣告投手?

在廣告投放行業&#xff0c;無論你是跑Facebook、Google Ads&#xff0c;還是做TikTok、原生廣告&#xff0c;代理IP幾乎是繞不開的話題。而選擇動態住宅代理還是靜態住宅代理&#xff0c;對廣告賬戶的穩定性、投放質量甚至生命周期都有直接影響。本篇文章將結合IPFoxy代理&…

命題是一種清晰、確定的表達。通過學習命題,來幫助你更清晰地表達自己的思想。

文章目錄 引言 I 命題的特點 可以判斷真偽 同一性 II 有效溝通的小技巧 多用陳述句,少用感嘆句和疑問句。 在表述意思時,多用名詞,少用代詞;多用具體的名詞,少用抽象的名詞,避免造成不必要的歧義。 正確找托詞 引言 要進行有效的邏輯推理,第一步是把我們的想法,我們要…

IPV6地址與IPV4有什么區別?

作為互聯網協議的迭代版本&#xff0c;IPV6&#xff08;Internet Protocol Version 6&#xff09;與IPV4&#xff08;Internet Protocol Version 4&#xff09;在設計理念和功能特性上存在顯著差異。本文將簡要解析兩者的核心區別&#xff0c;幫助讀者理解IPV6的優勢與必要性。…

python 什么時候應該用函數式編程,什么時候應該用面向對象?

在 Python 這個多范式語言中&#xff0c;選擇使用函數式編程&#xff08;Functional Programming, FP&#xff09;還是面向對象編程&#xff08;OOP&#xff09;并非一個非黑即白的選擇&#xff0c;而更像是在一個工具箱中為特定的任務挑選最合適的工具。 我們可以用一個比喻來…

【設計模式】迭代器模式 (游標(Cursor)模式)

迭代器模式&#xff08;Iterator Pattern&#xff09;詳解一、迭代器模式簡介 迭代器模式&#xff08;Iterator Pattern&#xff09; 是一種 行為型設計模式&#xff08;對象行為型模式&#xff09;&#xff0c;它提供了一種方法來順序訪問一個聚合對象中的各個元素&#xff0c…

docker安裝 Elasticsearch、Kibana、IK 分詞器

Elasticsearch 1.拉去鏡像 docker pull elasticsearch:8.12.2 docker pull kibana&#xff1a;8.12.22.創建掛載目錄 mkdir /root/elasticsearch3.不掛載啟動 docker run -d \ --restartalways \ --name fusion_elasticsearch \ --network fusion_network \ -p 9200:9200 \ -p …

Java面試寶典:Spring專題二

一、介紹下Spring中的事務 1.Spring事務的本質與價值 Spring事務本質是基于AOP的聲明式事務封裝,通過代理機制在目標方法前后注入事務管理邏輯(開啟、提交/回滾)。其核心價值在于: 業務解耦:將事務控制從業務代碼剝離,通過配置或注解管理(如@Transactional)。 統一抽…

DGMR壓縮技術:讓大規模視覺Transformer模型體積減半而性能不減

Transformer架構展現出卓越的擴展特性&#xff0c;其性能隨模型容量增長而持續提升。大規模模型在獲得優異性能的同時&#xff0c;也帶來了顯著的計算和存儲開銷。深入分析主流Transformer架構發現&#xff0c;多層感知器&#xff08;MLP&#xff09;模塊占據了模型參數的主要部…