主頁 >  其他 > Vue 3 生命周期完整指南

Vue 3 生命周期完整指南

2021-04-02 07:50:18 其他


highlight: a11y-dark
theme: condensed-night-purple

作者:Michael Thiessen
譯者:前端小智
來源:news

點贊再看,微信搜索**【大遷世界】,B站關注【前端小智】**這個沒有大廠背景,但有著一股向上積極心態人,本文 GitHub https://github.com/qq449245884/xiaozhi 上已經收錄,文章的已分類,也整理了很多我的檔案,和教程資料,

最近開源了一個 Vue 組件,還不夠完善,歡迎大家來一起完善它,也希望大家能給個 star 支持一下,謝謝各位了,

github 地址:https://github.com/qq449245884/vue-okr-tree

Vue2 和 Vue3 中的生命周期鉤子的作業方式非常相似,我們仍然可以訪問相同的鉤子,也希望將它們能用于相同的場景,

如果專案使用 選項 API,就不必更改任何代碼了,因為 Vue3 兼容以前的版本,

當然,我們用 Vue3 就是要用它的 組合 API組合 API中訪問這些鉤子的方式略有不同,組合API在較大的Vue專案中特別有用,

本文主要內容:

  1. Vue生命周期鉤子有哪些
  2. 選項API中使用 Vue 生命周期鉤子
  3. 組合API中使用Vue 3生命周期鉤子
  4. 將 Vue2 的生命周期鉤子代碼更新到 Vue3
  5. 看看Vue 2和Vue 3中的每個生命周期鉤子
  6. 創建
  7. 掛載
  8. 更新
  9. 卸載
  10. 激活
  11. Vue 3中的新除錯鉤子

Vue生命周期鉤子有哪些

首先,來看一下 選項API 和 組合 API中 Vue 3生命周期鉤子的圖表,在深入細節之前,這能加深我們的理解,

image.png

本質上,每個主要Vue生命周期事件被分成兩個鉤子,分別在事件之前和之后呼叫,Vue應用程式中有4個主要事件(8個主要鉤子),

  • 創建 — 在組件創建時執行
  • 掛載 — DOM 被掛載時執行
  • 更新 — 當回應資料被修改時執行
  • 銷毀 — 在元素被銷毀之前立即運行

選項API中使用 Vue 生命周期鉤子

使用 選項API,生命周期鉤子是被暴露 Vue實體上的選項,我們不需要匯入任何東西,只需要呼叫這個方法并為這個生命周期鉤子撰寫代碼,

例如,假設我們想訪問mounted()updated()生命周期鉤子,可以這么寫:

// 選項 API
<script>     
   export default {         
      mounted() {             
         console.log('mounted!')         
      },         
      updated() {             
         console.log('updated!')         
      }     
   }
</script> 

組合API中使用Vue 3生命周期鉤子

在組合API中,我們需要將生命周期鉤子匯入到專案中,才能使用,這有助于保持專案的輕量性,

// 組合 API
import { onMounted } from 'vue'

除了beforecatecreated(它們被setup方法本身所取代),我們可以在setup方法中訪問的API生命周期鉤子有9個選項:

  • onBeforeMount – 在掛載開始之前被呼叫:相關的 render 函式首次被呼叫,

  • onMounted – 組件掛載時呼叫

  • onBeforeUpdate – 資料更新時呼叫,發生在虛擬 DOM 打補丁之前,這里適合在更新之前訪問現有的 DOM,比如手動移除已添加的事件監聽器,

  • onUpdated – 由于資料更改導致的虛擬 DOM 重新渲染和打補丁,在這之后會呼叫該鉤子,

  • onBeforeUnmount – 在卸載組件實體之前呼叫,在這個階段,實體仍然是完全正常的,

  • onUnmounted – 卸載組件實體后呼叫,呼叫此鉤子時,組件實體的所有指令都被解除系結,所有事件偵聽器都被移除,所有子組件實體被卸載,

  • onActivated – 被 keep-alive 快取的組件激活時呼叫,

  • onDeactivated – 被 keep-alive 快取的組件停用時呼叫,

  • onErrorCaptured – 當捕獲一個來自子孫組件的錯誤時被呼叫,此鉤子會收到三個引數:錯誤物件、發生錯誤的組件實體以及一個包含錯誤來源資訊的字串,此鉤子可以回傳 false 以阻止該錯誤繼續向上傳播,

使用事例:

// 組合 API
<script>
import { onMounted } from 'vue'

export default {
   setup () {
     onMounted(() => {
       console.log('mounted in the composition api!')
     })
   }
}
</script>

將 Vue2 的生命周期鉤子代碼更新到 Vue3

這個從Vue2 到Vue3的生命周期映射是直接從Vue 3 Composition API檔案中獲得的:

  • beforeCreate -> 使用 setup()

  • created -> 使用 setup()

  • beforeMount -> onBeforeMount

  • mounted -> onMounted

  • beforeUpdate -> onBeforeUpdate

  • updated -> onUpdated

  • beforeDestroy -> onBeforeUnmount

  • destroyed -> onUnmounted

  • errorCaptured -> onErrorCaptured

深入了解每個生命周期鉤子

我們現在了解了兩件重要的事情:

  • 我們可以使用的不同的生命周期鉤子
  • 如何在選項API和組合API中使用它們

我們深入一下每個生命周期鉤子,看看它們是如何被使用的,我們可以在每個鉤子中撰寫特定代碼,來測驗在Options API和Composition API中的各自的區別,

beforeCreate() – 選項 API

由于創建的掛鉤是用于初始化所有回應資料和事件的事物,因此beforeCreate無法訪問組件的任何回應資料和事件,

以下面的代碼塊為例:

// 選項 API
export default {
   data() { 
     return { 
       val: 'hello'    
     }
   },
   beforeCreate() {     
     console.log('Value of val is: ' + this.val)   
   }
}

val的輸出值是 undefined,因為尚未初始化資料,我們也不能在這呼叫組件方法,

如果你想查看可用內容的完整串列,建議只運行console.log(this)來查看已初始化的內容,當使用選項API時,這做法在其他鉤子中也很有用,

created() – 選項 API

如果我們要在組件創建時訪問組件的資料和事件,可以把上面的 beforeCreatecreated代替,

// 選項API
export default {
   data() { 
     return { 
       val: 'hello'    
     }
   },
   created() {     
     console.log('Value of val is: ' + this.val)   
   }
}

其輸出為Value of val is: hello,因為我們已經初始化了資料,

在處理讀/寫反應資料時,使用created 的方法很有用, 例如,要進行API呼叫然后存盤該值,則可以在此處進行此操作,

最好在這里執行此操作,而不是在mounted 中執行此操作,因為它發生在Vue的同步初始化程序中,并且我們需要執行所有資料讀取/寫入操作,

那么組合API的創建鉤子呢?

對于使用 組合API 的 Vue3 生命周期鉤子,使用setup()方法替換beforecatecreated,這意味著,在這些方法中放入的任何代碼現在都只在setup方法中,

// 組合AP
import { ref } from 'vue'

export default {
   setup() {    
     const val = ref('hello') 
     console.log('Value of val is: ' + val.value)       
     return {         
       val
     }
   }
}

beforeMount() and onBeforeMount()

在組件DOM實際渲染安裝之前呼叫,在這一步中,根元素還不存在,在選項API中,可以使用this.$els來訪問,在組合API中,為了做到這一點,必須在根元素上使用ref

// 選項 API
export default {
   beforeMount() {
     console.log(this.$el)
   }
 }

組合API中使用 ref:

// 組合 API
<template>
   <div ref='root'>
     Hello World
   </div>
</template> 

import { ref, onBeforeMount } from 'vue'

export default {
   setup() {
      const root = ref(null) 
      onBeforeMount(() => {   
         console.log(root.value) 
      }) 
      return { 
         root
      }
    },
    beforeMount() {
      console.log(this.$el)
    }
 }

因為app.$el還沒有創建,所以輸出將是undefined

mounted() and onMounted()

在組件的第一次渲染后呼叫,該元素現在可用,允許直接DOM訪問

同樣,在 選項API中,我們可以使用this.$el來訪問我們的DOM,在組合API中,我們需要使用refs來訪問Vue生命周期鉤子中的DOM,

import { ref, onMounted } from 'vue'
 

 export default {
   setup() {    /* 組合 API */
 
     const root = ref(null)
 
     onMounted(() => {
       console.log(root.value)
     })
 

     return {
       root
     }
   },
   mounted() { /* 選項 API */
     console.log(this.$el)
   }
 } 

beforeUpdate() and onBeforeUpdate()

資料更新時呼叫,發生在虛擬 DOM 打補丁之前,這里適合在更新之前訪問現有的 DOM,比如手動移除已添加的事件監聽器,

beforeUpdate對于跟蹤對組件的編輯次數,甚至跟蹤創建“撤消”功能的操作很有用,

updated() and onUpdated()

DOM更新后,updated的方法即會呼叫,

<template>
    <div>
      <p>{{val}} | edited {{ count }} times</p>
      <button @click='val = Math.random(0, 100)'>Click to Change</button>
    </div>
 </template> 

選項 API 方式:

 export default {
   data() {
      return {
        val: 0
      }
   },
   beforeUpdate() {
      console.log("beforeUpdate() val: " + this.val)
   },
   updated() {
      console.log("updated() val: " + this.val
   }
 } 

組合API的方式:

import { ref, onBeforeUpdate, onUpdated } from 'vue'
 
 export default {
   setup () {
     const count = ref(0)
     const val = ref(0)
 
     onBeforeUpdate(() => {
       count.value++;
       console.log("beforeUpdate");
     })
 
     onUpdated(() => {
       console.log("updated() val: " + val.value)
     })
 
     return {
       count, val
     }
   }
 }

這些方法很有用,但是對于更多場景,我們需要使用的watch方法檢測這些資料更改, watch 之所以好用,是因為它給出了更改后的資料的舊值和新值,

另一種選擇是使用計算屬性來基于元素更改狀態,

beforeUnmount() 和 onBeforeUnmounted()

在卸載組件實體之前呼叫,在這個階段,實體仍然是完全正常的,

在 選項 API中,洗掉事件偵聽器的示例如下所示,

// 選項 API
export default {
   mounted() {
     console.log('mount')
     window.addEventListener('resize', this.someMethod);
   },
   beforeUnmount() {
     console.log('unmount')
     window.removeEventListener('resize', this.someMethod);
   },
   methods: {
      someMethod() {
         // do smth
      }
   }
} 
// 組合API
import { onMounted, onBeforeUnmount } from 'vue' 

 export default {
   setup () {
 
     const someMethod = () => {
       // do smth
     }
 
     onMounted(() => {
       console.log('mount')
       window.addEventListener('resize', someMethod);
     })
 
     onBeforeUnmount(() => {
       console.log('unmount')
       window.removeEventListener('resize', someMethod);
     })
 
   }
 }

實際操作的一種方法是在Vite,vue-cli或任何支持熱多載的開發環境中,更新代碼時,某些組件將自行卸載并安裝,

unmounted() 和 onUnmounted()

卸載組件實體后呼叫,呼叫此鉤子時,組件實體的所有指令都被解除系結,所有事件偵聽器都被移除,所有子組件實體被卸載,

import { onUnmounted } from 'vue'

export default {
  setup () { /* 組合 API */

    onUnmounted(() => {
      console.log('unmounted')
    })

  },
  unmounted() { /* 選項 API */
    console.log('unmounted')
  }
}

activated() and onActivated()

keep-alive 快取的組件激活時呼叫,

例如,如果我們使用keep-alive組件來管理不同的選項卡視圖,每次在選項卡之間切換時,當前選項卡將運行這個 activated 鉤子,

假設我們使用keep-alive包裝器進行以下動態組件,

<template>
   <div>
     <span @click='tabName = "Tab1"'>Tab 1 </span>
     <span @click='tabName = "Tab2"'>Tab 2</span>
     <keep-alive>
       <component :is='tabName' class='tab-area'/>
     </keep-alive>
   </div>
</template>

<script>
import Tab1 from './Tab1.vue'
import Tab2 from './Tab2.vue'

import { ref } from 'vue'

export default {
  components: {
    Tab1,
    Tab2
  },
  setup () { /* 組合 API */
    const tabName = ref('Tab1')

    return {
      tabName
    }
  }
}
</script>

Tab1.vue組件內部,我們可以像這樣訪問activated鉤子,

<template>
 <div>
 <h2>Tab 1</h2>
 <input type='text' placeholder='this content will persist!'/>
 </div>
</template>

<script>
import { onActivated } from 'vue'

export default {
 setup() {
    onActivated(() => {
       console.log('Tab 1 Activated')
    })
 }
} 
</script>

deactivated() 和 onDeactivated()

keep-alive 快取的組件停用時呼叫,

這個鉤子在一些用例中很有用,比如當一個特定視圖失去焦點時保存用戶資料和觸發影片,

import { onActivated, onDeactivated } from 'vue'

export default {
  setup() {
    onActivated(() => {
       console.log('Tab 1 Activated')
    })

    onDeactivated(() => {
       console.log('Tab 1 Deactivated')
    })
  }
}

現在,當我們在選項卡之間切換時,每個動態組件的狀態都將被快取和保存,

4216299740-605e8878b7355_fix732.gif

Vue3 除錯鉤子

Vue3 為我們提供了兩個可用于除錯目的的鉤子,

  1. onRenderTracked
  2. onRenderTriggered

這兩個事件都帶有一個debugger event,此事件告訴你哪個操作跟蹤了組件以及該操作的目標物件和鍵,

onRenderTracked

跟蹤虛擬 DOM 重新渲染時呼叫,鉤子接收 debugger event 作為引數,此事件告訴你哪個操作跟蹤了組件以及該操作的目標物件和鍵,

<div id="app">
  <button v-on:click="addToCart">Add to cart</button>
  <p>Cart({{ cart }})</p>
</div>
const app = Vue.createApp({
  data() {
    return {
      cart: 0
    }
  },
  renderTracked({ key, target, type }) {
    console.log({ key, target, type })
    /* 當組件第一次渲染時,這將被記錄下來:
    {
      key: "cart",
      target: {
        cart: 0
      },
      type: "get"
    }
    */
  },
  methods: {
    addToCart() {
      this.cart += 1
    }
  }
})

app.mount('#app')

renderTracked

當虛擬 DOM 重新渲染為 triggered.Similarly 為renderTracked,接收 debugger event 作為引數,此事件告訴你是什么操作觸發了重新渲染,以及該操作的目標物件和鍵,

用法:

<div id="app">
  <button v-on:click="addToCart">Add to cart</button>
  <p>Cart({{ cart }})</p>
</div>
const app = Vue.createApp({
  data() {
    return {
      cart: 0
    }
  },
  renderTriggered({ key, target, type }) {
    console.log({ key, target, type })
  },
  methods: {
    addToCart() {
      this.cart += 1
      /* 這將導致renderTriggered呼叫
        {
          key: "cart",
          target: {
            cart: 1
          },
          type: "set"
        }
      */
    }
  }
})

app.mount('#app')

總結

無論你選擇使用選項API還是 組合API,不僅要知道要使用哪個生命周期掛鉤,而且要知道為什么要使用它,這一點很重要,

對于許多問題,可以使用多個生命周期鉤子,但是最好知道哪個是最適合你用例的,無論如何,你都應該好好考慮一下,并有充分的理由去選擇一個特定的生命周期鉤子,

我希望這能幫助大家更多地理解生命周期鉤子以及如何在大家的專案中實作它們,

~完,我是刷碗智,我要去刷碗了,骨的白,


代碼部署后可能存在的BUG沒法實時知道,事后為了解決這些BUG,花了大量的時間進行log 除錯,這邊順便給大家推薦一個好用的BUG監控工具 Fundebug,

原文:https://learnvue.co/2020/12/how-to-use-lifecycle-hooks-in-vue3/

交流

文章每周持續更新,可以微信搜索「 大遷世界 」第一時間閱讀和催更(比博客早一到兩篇喲),本文 GitHub https://github.com/qq449245884/xiaozhi 已經收錄,整理了很多我的檔案,歡迎Star和完善,大家面試可以參照考點復習,另外關注公眾號,后臺回復福利,即可看到福利,你懂的,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271237.html

標籤:AI

上一篇:圖靈獎今日出爐,“龍書” 作者、編程語言大佬 Alfred Aho 和 Jeffrey Ullman 獲獎

下一篇:2020 年前端技術發展盤點

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more