在 Vue 中,created 和 mounted 是兩個生命周期鉤子,它們之間的調用時差主要受以下幾個因素影響:
🟢 1. 模板復雜度與渲染耗時(最主要因素)
mounted 的觸發時間是在組件的 DOM 被掛載之后(也就是插入到真實 DOM 中之后),而 created 是在組件實例創建完成、數據已設置好但 DOM 還未生成前執行。
因此,如果組件模板(template)結構復雜,或者包含大量的動態綁定、指令、v-for、組件嵌套等操作,DOM 渲染和掛載過程就會變慢,從而延長 created → mounted 之間的時間間隔。
🟢 2. 異步依賴資源加載(圖片、子組件等)
雖然 Vue 是異步渲染 DOM 的,但如果組件中引用了大量需要異步加載的內容,如圖片、異步組件、懶加載模塊等,也可能造成渲染阻塞,影響 mounted 的觸發時間。
🟢 3. 瀏覽器性能和主線程阻塞
如果頁面同時進行大量 JavaScript 運算或 DOM 操作(比如同時渲染多個大型組件),也會影響 Vue 的渲染調度,從而推遲 mounted 的觸發。
🟢 4. 父組件是否控制了顯示節奏(如 v-if)
如果父組件通過 v-if 控制子組件是否掛載,那么即使子組件已經走過 created,只有在 v-if 為 true 后才會走 mounted。這種場景下,created 和 mounted 間的時間差可能非常大,甚至是“人為控制”的。
🟢 5. 使用 keep-alive 或緩存機制
當組件被緩存(keep-alive)時,再次激活并不會重新走 mounted,而是走 activated 鉤子,這可能影響你觀察 mounted 的時間差。
🟡 補充:如何測量 created 和 mounted 時間差?
可以使用如下方式:
export default {
created() {
this._start = performance.now();
},
mounted() {
const duration = performance.now() - this._start;
console.log(created → mounted 耗時:${duration.toFixed(2)}ms);
}
}
🧠 總結:
影響 created 和 mounted 之間調用時差的關鍵是:DOM 渲染與掛載所需時間。而這個時間主要取決于模板復雜度、異步資源加載、瀏覽器性能和父組件控制邏輯等。