Производительность: метод measureUserAgentSpecificMemory()
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает во всех распространённых браузерах.
Примечание: Эта функция доступна в Web Workers.
Экспериментальная функция: Это экспериментальная технология
Перед использованием в продакшене внимательно изучите таблицу совместимости с браузерами.
Метод measureUserAgentSpecificMemory() используется для оценки использования памяти веб-приложением, включая все его iframe и рабочие потоки.
Синтаксис
measureUserAgentSpecificMemory()
Параметры
Нет.
Возвращаемое значение
A Promise, который разрешается объектом, содержащим следующие свойства:
bytes-
Число, представляющее общее использование памяти.
breakdown-
Массив
Arrayобъектов, разбивающих общееbytesи предоставляющих информацию об источнике и типе. Объект содержит следующие свойства:bytes-
Размер памяти, описываемой этим элементом.
attribution-
Массив
Arrayконтейнеров областей JavaScript, использующих память. Этот объект имеет следующие свойства:url-
Если эта ссылка соответствует области JavaScript одного источника, то это свойство содержит URL области. В противном случае это строка "cross-origin-url".
container-
Объект, описывающий элемент DOM, содержащий эту область JavaScript. Этот объект имеет следующие свойства:
scope-
Строка, описывающая тип области JavaScript одного источника. Либо
"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). Разработчики должны убедиться, что объекты подлежат мусорному собиранию, память не утечка, и объём памяти не растёт необоснованно со временем, что может привести к медленным и нереагирующим веб-приложениям. Утечки памяти обычно возникают из-за забытия отмены регистрации обработчика событий, не закрытия рабочих потоков, накопления объектов в массивах и т. п.
API measureUserAgentSpecificMemory() агрегирует данные об использовании памяти, чтобы помочь вам обнаружить утечки памяти. Его можно использовать для выявления регрессии памяти или для A/B-тестирования функций для оценки их влияния на использование памяти. Вместо выполнения отдельных вызовов этого метода лучше выполнять периодические вызовы для отслеживания изменений использования памяти в течение сеанса.
Значения byte возвращаемого данным API не сравнимы между браузерами или версиями браузера, так как они зависят от реализации. Также способ, которым предоставляются массивы 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();
}
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
measureUserAgentSpecificMemory |
89 | 89 | Нет | 75 | Нет | 89 | Нет | 63 | Нет | 15.0 | 89 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Performance/measureUserAgentSpecificMemory