效能:measureUserAgentSpecificMemory() 方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

注意:此功能在 Web Workers 中可用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

measureUserAgentSpecificMemory() 方法用於估算 Web 應用程式的記憶體使用情況,包括其所有 iframe 和 worker。

語法

js
measureUserAgentSpecificMemory()

引數

無。

返回值

一個 Promise,它解析為一個包含以下屬性的物件

bytes

表示總記憶體使用量的數字。

breakdown

一個物件陣列,用於劃分總 bytes 並提供歸屬和型別資訊。該物件包含以下屬性

bytes

此條目描述的記憶體大小。

attribution

使用記憶體的 JavaScript realm 的容器元素的陣列。該物件具有以下屬性

url

如果此歸屬對應於同源 JavaScript realm,則此屬性包含該 realm 的 URL。否則,它是一個字串 "cross-origin-url"。

container

一個描述包含此 JavaScript realm 的 DOM 元素的 JavaScript 物件。該物件具有以下屬性

id

容器元素的 id 屬性。

src

容器元素的 src 屬性。如果容器元素是 <object> 元素,則此欄位包含 data 屬性的值。

scope

描述同源 JavaScript realm 型別的字串。對於跨域情況,可以是 "Window""DedicatedWorkerGlobalScope""SharedWorkerGlobalScope""ServiceWorkerGlobalScope""cross-origin-aggregated"

types

與記憶體關聯的實現定義的記憶體型別陣列。

示例返回值如下所示

json
{
  "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"]
    }
  ]
}

異常

SecurityError DOMException

如果未滿足防止跨域資訊洩露的 安全要求,則丟擲此異常。

描述

瀏覽器在建立物件時自動分配記憶體,並在物件不再可達時(垃圾回收)釋放記憶體。此垃圾回收(GC)是一種近似,因為確定特定記憶體是否仍被需要的通用問題是不可能的(另請參閱 JavaScript 記憶體管理)。開發者需要確保物件被垃圾回收,記憶體不發生洩漏,並且記憶體使用量不會隨著時間的推移而無謂地增長,導致 Web 應用程式緩慢且無響應。記憶體洩漏通常是由忘記登出事件監聽器、未關閉 worker、在陣列中累積物件等引起的。

measureUserAgentSpecificMemory() API 聚合記憶體使用資料,以幫助您查詢記憶體洩漏。它可以用於檢測記憶體迴歸或對功能進行 A/B 測試以評估其記憶體影響。與其單次呼叫此方法,不如定期呼叫以跟蹤會話期間記憶體使用量的變化。

此 API 返回的 byte 值在不同瀏覽器之間或同一瀏覽器的不同版本之間不可比較,因為這些值高度依賴於實現。此外,breakdownattribution 陣列的提供方式也取決於瀏覽器。最好不要硬編碼對此資料的任何假設。此 API 更適合定期呼叫(以隨機間隔)來聚合資料並分析樣本之間的差異。

安全要求

要使用此方法,您的文件必須處於 安全上下文 並且 跨域隔離

您可以使用 Window.crossOriginIsolatedWorkerGlobalScope.crossOriginIsolated 屬性來檢查文件是否跨域隔離。

js
if (crossOriginIsolated) {
  // Use measureUserAgentSpecificMemory
}

示例

監控記憶體使用情況

以下程式碼顯示瞭如何使用 指數分佈 每五分鐘以隨機間隔呼叫一次 measureUserAgentSpecificMemory() 方法。

js
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⑤

瀏覽器相容性

另見