效能:measureUserAgentSpecificMemory() 方法
注意:此功能在 Web Workers 中可用。
measureUserAgentSpecificMemory() 方法用於估算 Web 應用程式的記憶體使用情況,包括其所有 iframe 和 worker。
語法
measureUserAgentSpecificMemory()
引數
無。
返回值
一個 Promise,它解析為一個包含以下屬性的物件
bytes-
表示總記憶體使用量的數字。
breakdown-
一個物件陣列,用於劃分總
bytes並提供歸屬和型別資訊。該物件包含以下屬性bytes-
此條目描述的記憶體大小。
attribution-
使用記憶體的 JavaScript realm 的容器元素的陣列。該物件具有以下屬性
url-
如果此歸屬對應於同源 JavaScript realm,則此屬性包含該 realm 的 URL。否則,它是一個字串 "cross-origin-url"。
container-
一個描述包含此 JavaScript realm 的 DOM 元素的 JavaScript 物件。該物件具有以下屬性
scope-
描述同源 JavaScript realm 型別的字串。對於跨域情況,可以是
"Window"、"DedicatedWorkerGlobalScope"、"SharedWorkerGlobalScope"、"ServiceWorkerGlobalScope"或"cross-origin-aggregated"。
types-
與記憶體關聯的實現定義的記憶體型別陣列。
示例返回值如下所示
{
"bytes": 1500000,
"breakdown": [
{
"bytes": 1000000,
"attribution": [
{
"url": "https://example.com",
"scope": "Window"
}
],
"types": ["DOM", "JS"]
},
{
"bytes": 0,
"attribution": [],
"types": []
},
{
"bytes": 500000,
"attribution": [
{
"url": "https://example.com/iframe.html",
"container": {
"id": "example-id",
"src": "redirect.html?target=iframe.html"
},
"scope": "Window"
}
],
"types": ["JS", "DOM"]
}
]
}
異常
SecurityErrorDOMException-
如果未滿足防止跨域資訊洩露的 安全要求,則丟擲此異常。
描述
瀏覽器在建立物件時自動分配記憶體,並在物件不再可達時(垃圾回收)釋放記憶體。此垃圾回收(GC)是一種近似,因為確定特定記憶體是否仍被需要的通用問題是不可能的(另請參閱 JavaScript 記憶體管理)。開發者需要確保物件被垃圾回收,記憶體不發生洩漏,並且記憶體使用量不會隨著時間的推移而無謂地增長,導致 Web 應用程式緩慢且無響應。記憶體洩漏通常是由忘記登出事件監聽器、未關閉 worker、在陣列中累積物件等引起的。
measureUserAgentSpecificMemory() API 聚合記憶體使用資料,以幫助您查詢記憶體洩漏。它可以用於檢測記憶體迴歸或對功能進行 A/B 測試以評估其記憶體影響。與其單次呼叫此方法,不如定期呼叫以跟蹤會話期間記憶體使用量的變化。
此 API 返回的 byte 值在不同瀏覽器之間或同一瀏覽器的不同版本之間不可比較,因為這些值高度依賴於實現。此外,breakdown 和 attribution 陣列的提供方式也取決於瀏覽器。最好不要硬編碼對此資料的任何假設。此 API 更適合定期呼叫(以隨機間隔)來聚合資料並分析樣本之間的差異。
安全要求
要使用此方法,您的文件必須處於 安全上下文 並且 跨域隔離。
您可以使用 Window.crossOriginIsolated 和 WorkerGlobalScope.crossOriginIsolated 屬性來檢查文件是否跨域隔離。
if (crossOriginIsolated) {
// Use measureUserAgentSpecificMemory
}
示例
監控記憶體使用情況
以下程式碼顯示瞭如何使用 指數分佈 每五分鐘以隨機間隔呼叫一次 measureUserAgentSpecificMemory() 方法。
function runMemoryMeasurements() {
const interval = -Math.log(Math.random()) * 5 * 60 * 1000;
console.log(`Next measurement in ${Math.round(interval / 1000)} seconds.`);
setTimeout(measureMemory, interval);
}
async function measureMemory() {
const memorySample = await performance.measureUserAgentSpecificMemory();
console.log(memorySample);
runMemoryMeasurements();
}
if (crossOriginIsolated) {
runMemoryMeasurements();
}
規範
| 規範 |
|---|
| 測量記憶體 API # ref-for-dom-performance-measureuseragentspecificmemory⑤ |
瀏覽器相容性
載入中…