Apprenez à mesurer l'utilisation de la mémoire de votre page Web en production pour détecter les régressions.
Les navigateursConcepto de Navegadores¿Qué son los Navegadores?Los Navegadores son herramientas informáticas que utilizamos para, normalmente, navegar por Internet y visitar cualquier página web, al mismo tiempo de para hacer otras tareas como ver documentos, observar vídeos o reproducir contenido multimedia de cualquier tipo. Son un tipo de software sencillamente usual y bastante utilizado hoy en día.Insistimos en que es algo que se utiliza con mucha frecuencia, puesto que moverse por Internet Suite gestionan la memoria de las páginas web de forma automática. Siempre y cuando una página web crea un objeto, el le navigateurUn navegador (además: browser) es una herramienta informática que te permite ver documentos y datos y navegar por la red. Los navegadores pueden mostrar distintos tipos de recursos de información; principalmente documentos HTML, a pesar de todo, además son posibles otros tipos de archivos y contenido multimedia, como PDF, JPEG, MPEG, GIF o el lenguaje de meta marcado. A través el uso de complementos especiales y la configuración respectivo, los Suite asigna una parte de la memoria «debajo del capó» para guardar el objeto. Ya que la memoria es un recurso finito, el navegador realiza una recolección de basura para detectar cuando un objeto ya no hace falta y para liberar el bloque de memoria subyacente. A pesar de todo, la detección no es perfecta y
Il a été testé que la detección perfecta es una tarea imposible. Por ende, los navegadores aproximan la noción de «un objeto hace falta» con la noción de «un objeto es alcanzable». Si la página web no puede llegar a un objeto a través de sus variables y los campos de otros objetos accesibles, entonces el navegador puede recuperar el objeto de forma segura. La diferencia entre estas dos nociones conduce a pérdidas de memoria como se ilustra en el siguiente ejemplo.
const object = { à: new Array(1000), b: new Array(2000) };
setInterval(() => console.Journal(object.à), 1000);
Ici la plus grande matrice b ya no hace falta, pero el navegador no lo recupera debido a que aún es alcanzable a través de objet.b en la devolución de llamada. Por ende, se filtra la memoria de la matriz más grande.
Les fuites de mémoire sont répandu sur le Web. Es fácil introducir uno olvidándose de anular el registro de un detector de eventos, capturando accidentalmente objetos de un iframeConcepto de Iframe¿Qué es un Iframe?Un Iframe es un documento de una web que se inserta en otra página web. Consiste en un elemento que puede albergar cualquier tipo de contenido en su interior y que ayuda, entre otras cosas, a ampliar el mensaje que se ofrece con fuentes externas o con material complementario que pueda resultar de interés para el usuario que entra.Este elemento web se usa especialmente al Suite, no cerrando un empleado, acumulando objetos en matrices, etc. Si una página web tiene pérdidas de memoria, su uso de memoria aumenta con el tiempo y la página web parece lenta e hinchada para los usuarios.
El primer paso para solucionar este problema es medirlo. El nuevo
performanceEn el caso de las webs, el término Performance o rendimiento, se refiere a la velocidad de carga o a la potencia de cálculo de un servidor, es decir, a la velocidad a la que se transmiten los datos del servidor al cliente. Razones para una buena performance Una web que se carga lentamente, puede animar a los clientes potenciales a abandonar la página. Para asegurar una interacción fluida, se tiene Suite.measureMemory() API posibilita a los desarrolladores medir el uso de memoria de sus páginas web en producción y así detectar pérdidas de memoria que se escapan a través de pruebas locales.
Comment c'est performance.measureMemory () distinto al legado performance.memory APIConcepto de API¿Qué es una API?Una API, siglas de Application Programming Interface o Interfaz de Programación de Apps, es un recopilatorio de código que se puede emplear para que varias apps se comuniquen entre ellas. Es algo que realiza una tarea equivalente a la interfaz de usuario al momento de promover la interacción entre persona y programa, solo que aplicado única y exclusivamente dentro del entorno del software.Aún cuando suene Suite?
Si vous connaissez le non-standard existant performance.memory API, es factible que se pregunte en qué se diferencia la nueva API. La principal diferencia es que la API anterior devuelve el tamaño del montón de JavaScriptJavaScript es un lenguaje de programación que funciona en el lado del cliente y con el que las webs pueden ser más funcionales. Incorporación en código HTML El código JavaScript puede ser incrustado en las páginas HTML, para que adquieran funcionalidad. Existen varias opciones. Puede estar entre las etiquetas <SCRIPT> y </SCRIPT>, puede estar contenido en un archivo externo, puede ser un parámetro de las etiquetas HTML, y puede estar Suite, mientras que la nueva API estima el uso de memoria de toda la página web. Esta diferencia se torna importante cuando Chrome comparte el mismo montón con varias páginas web (o varias instancias de la misma página web). En tales casos, el resultado de la antigua API puede estar arbitrariamente apagado. Ya que la antigua API se establece en términos específicos de implementación como «montón», estandarizarla es inútil.
Otra diferencia es que la nueva API realiza mediciones de memoria durante la recolección de basura. Esto reduce el ruido en los resultados, pero puede llevar un tiempo hasta que se produzcan los resultados. Tenga en cuenta que otros navegadores pueden elegir poner en práctica la nueva API sin depender de la recolección de basura.
Cas d'utilisation suggérés
El uso de memoria de una página web depende del momento de los eventos, las acciones del usuario y las recolecciones de basura. Es es por esto que que la API de medición de memoria está diseñada para agregar datos de uso de memoria de producción. Los resultados de las llamadas individuales son menos útiles. Casos de uso de ejemplo:
- Detección de regresión durante el lanzamiento de una versión nueva de la página web para detectar nuevas fugas de memoria.
- Prueba A / B de una nueva función para examinar su impacto en la memoria y detectar pérdidas de memoria.
- Corrélez l'utilisation de la mémoire à la durée de la session pour vérifier la présence ou l'absence de fuites de mémoire.
- Correlacionar el uso de la memoria con las métricas del usuario para entender el impacto general del uso de la memoria.
Compatibilité du navigateur
En este momento, la API solo es compatible con Chrome 83 como prueba de origen. El resultado de la API depende en gran medida de la implementación debido a que los navegadores disponen diferentes formas de representar objetos en la memoria y diferentes formas de estimar el uso de la memoria. Los navegadores pueden excluir algunas regiones de memoria de la contabilidad si la contabilidad adecuada es demasiado cara o inviable. Por ende, los resultados no se pueden comparar entre navegadores. Solo tiene sentido comparar los resultados para el mismo navegador.
État actuel
| Il a passé | État |
|---|---|
| 1. Créez un explicatif | Compléter |
| 2. Créer une ébauche de spécification initiale | En progrès |
| 3. Recueillez les commentaires et répétez la conception | En progrès |
| 4. Preuve de l'origine | En progrès |
| 5. Lancez | Pas commencé |
Utilisant performance.measureMemory ()
Habilitar el apoyo durante la etapa de prueba de origen
Les performance.measureMemory () La API se encuentra disponible como prueba de origen a partir de Chrome 83. Se espera que la prueba de origen finalice en Chrome 86 a principios de noviembre de 2020.
Las pruebas de Origin le posibilitan probar nuevas funciones y otorgar comentarios sobre su usabilidad, practicidad y efectividad a la comunidad de estándares web. Para conseguir más información, consulte el Guide de test d'origine pour les développeurs Web. Pour vous inscrire à cette preuve d'origine ou à toute autre preuve d'origine, visitez le page d'inscription.
Inscrivez-vous pour obtenir une preuve d'origine
- Demander un jeton par votre origine.
- Ajoutez le jeton à vos pages. Il y a deux façons de le faire:
- Ajouter un
origine-procèsetiqueta al encabezado de cada página. A modo de ejemplo, esto puede verse así: - Si puede configurar su serveurLos servidores son ordenadores centrales y potentes dentro del campo de la tecnología de la información que procesan y proporcionan software y archivos en una red. Desde el punto de vista de un cliente, varios ordenadores en una red pueden ponerse en contacto con el servidor central para conseguir la información solicitada. En la arquitectura cliente-servidor, el servidor puede ser un software que proporciona un servicio y se ejecuta en Suite, además puede agregar el token utilizando un
Essai d'origineEncabezado HTTPEl HTTP (Hyper Text Transfer Protocol) es un protocolo que se usa para transmitir datos en redes. HTTP es un estándar técnico generalmente aceptado que establece cómo un cliente web se comunica con un servidor para que los datos solicitados por el cliente puedan ser cargados y mostrados. Información general Junto con el URL y el HTML, HTTP es uno de los conceptos más importantes de Internet (www). Fue desarrollado Suite. El encabezado de respuesta resultante debería verse así:Essai d'origine: TOKEN_GOES_HERE
- Ajouter un
Activation via chrome: // flags
Pour expérimenter avec performance.measureMemory () sans jeton de preuve d'origine, activez le #experimental-web-platform-features drapeau sur chrome://flags.
Détection des fonctionnalités
Les performance.measureMemory () la fonction peut échouer avec un
Erreur de sécurité si el entorno de ejecución no alcanza con los requerimientos de seguridad para prevenir fugas de información de origen cruzado. Durante la prueba de origen en Chrome, la API necesita que Isolation du site est autorisé. Lorsque l'API est soumise, cela dépendra de
isolement d'origine croisée. Una página web puede elegir por el aislamiento de origen cruzado configurando En-têtes COOP + COEP.
si (performance.measureMemory) {
laisser result;
try {
result = attendre performance.measureMemory();
} catch (Erreur) {
si (Erreur instanceof DOMException &Concepto de AMP¿Qué es el AMP o Accelerated Mobile Pages?El AMP, abreviatura de Accelerated Mobile Pages, es una propuesta que empezó a tomar forma en el año 2016 con la finalidad de mejorar la usabilidad, lectura y, en general, la experiencia de los usuarios de teléfono celular dentro de cualquier página web. Emprendida por Google con un aperturismo total (es de código abierto), lleva en activo desde entonces para facilitar Suite;&
Erreur.patate douce === "SecurityError") {
console.Journal("The context is not secure.");
} else {
throw Erreur;
}
}
console.Journal(result);
}
Tests locaux
Chrome realiza la medición de la memoria durante la recolección de basura. Esto significa que la API no resuelve la promesa de resultado de inmediato y, en cambio, espera la próxima recolección de basura. La API fuerza una recolección de basura luego de un tiempo de espera, que en este momento está establecido en 20 segundos. Iniciando Chrome con el
--enable-blink-features = 'ForceEagerMeasureMemory' L'invite de ligne de commande réduit le temps d'attente à zéro et est utile pour le débogage et les tests locaux.
Exemple
El uso recomendado de la API es establecer un monitor de memoria global que muestree el uso de memoria de toda la página web y envíe los resultados a un servidor para su agregación y análisis. La forma más sencilla es tomar muestras de forma periódica, a modo de ejemplo, cada M minutos. A pesar de todo, esto introduce un sesgo en los datos debido a que pueden producirse picos de memoria entre las muestras. El siguiente ejemplo muestra cómo realizar mediciones de memoria insesgadas usando un Procedimiento de Poisson, en veillant à ce que les échantillons soient également susceptibles de se produire à tout moment (manifestation, Fontaine).
Primero, defina una función que programe la próxima medición de memoria utilizando
setTimeout () con un intervalo aleatorio. La función debe llamarse luego de cargar la página en la ventana principal.
une fonction scheduleMeasurement() {
si (!performance.measureMemory) {
console.Journal("performance.measureMemory() is not available.");
revenir;
}
const interval = measurementInterval();
console.Journal("Scheduling memory measurement in " +
Math.rond(interval / 1000) + " seconds.");
setTimeout(performMeasurement, interval);
}
la fenêtre.en charge = une fonction () {
scheduleMeasurement();
}
Les mesureIntervalle () La fonction calcule un intervalle aléatoire en millisecondes afin qu'en moyenne, il y ait une mesure toutes les cinq minutes. Regarder Distribution exponentielle si vous êtes intéressé par les mathématiques derrière la fonction.
une fonction measurementInterval() {
const MEAN_INTERVAL_IN_MS = 5 * 60 * 1000;
revenir -Math.Journal(Math.random()) * MEAN_INTERVAL_IN_MS;
}
En resumen, el async performMeasurement () La función invoca la API, registra el resultado y programa la próxima medición.
async function performMeasurement() {
let result;
try {
result = await performance.measureMemory();
} catch (error) {
if (error instanceof DOMException &&
error.name === "SecurityError") {
console.log("The context is not secure.");
return;
}
throw error;
}
console.log("Memory usage:", result);
scheduleMeasurement();
}
Le résultat peut être vu comme suit:
{
octets: 60_000_000,
panne: [
{
octets: 40_000_000,
attribution: ["https://foo.com"],
userAgentSpecificTypes: ["Window", "JS"]
},
{
octets: 20_000_000,
attribution: ["https://foo.com/iframe"],
userAgentSpecificTypes: ["Window", "JS"]
}
]
}
L'estimation de l'utilisation totale de la mémoire est renvoyée dans le octets campo. El valor de bytes está utilizando syntaxe du séparateur de nombres. Este valor depende en gran medida de la implementación y no se puede comparar entre navegadores. Inclusive puede cambiar entre diferentes versiones del mismo navegador. Durante la prueba de origen, el valor incluye el uso de memoria JavaScript de la ventana principal y todos
même endroit iframes y ventanas asociadas. Cuando se envía la API, el valor tendrá en cuenta JavaScript y la memoria DOM de todos los iframes, ventanas asociadas y empleados web.
Les panne El listado proporciona más información sobre la memoria utilizada. Cada entrada describe una parte de la memoria y la atribuye a un recopilatorio de ventanas, iframes y empleados identificados por URLEl URL (Localizador Uniforme de Recursos), es una dirección definida que apunta a la posición de un archivo en un servidor y lo recupera. Las URL se introducen en un navegador web para ingresar a documentos en la web o se incrustan como hipervínculos dentro de un documento. Se puede usar un Permalink para que una URL esté disponible de forma permanente. Componentes de una URL • prefijo de protocolo Suite. Les userAgentSpecificTypes
Le champ répertorie les types de mémoire spécifiques à l'implémentation associés à la mémoire.
Es esencial tratar todas las listas de forma genérica y no codificar suposiciones sustentadas en un navegador en particular. A modo de ejemplo, algunos navegadores pueden devolver un panne ou un vide attribution. D'autres navigateurs peuvent renvoyer plusieurs URL dans attribution indiquant qu'ils ne pouvaient pas dire laquelle de ces URL possède la mémoire.
Retour
Les Groupe de performance Web de la communauté et l'équipe Chrome aimerait connaître vos impressions et vos expériences avec
performance.measureMemory ().
Parlez-nous de la conception de l'API
¿Puede haber algo en la API que no funcione como se esperaba? ¿O faltan propiedades que necesitas para poner en práctica tu idea? Presentar un obstáculo de especificaciones en el Référentiel GitHub performance.measureMemory o agregue sus pensamientos a un obstáculo existente.
Informar un obstáculo con la implementación
¿Encontraste un error con la implementación de Chrome? ¿O la implementación es distinto de la especificación? Presentar un error en new.crbug.com. Assurez-vous d'inclure autant de détails que possible, de fournir des instructions simples pour reproduire le bogue, et Composants (modifier) ajusté à Clignoter> PerformanceAPIs.
Échec fonctionne très bien pour un partage rapide et facile des répétitions.
Montrez votre soutien
¿Está planeando utilizar performance.measureMemory ()? Su apoyo público ayuda al equipo de Chrome a priorizar funciones y muestra a otros proveedores de navegadores lo importante que es brindarles soporte. Enviar un tweeterUn tweet es un mensaje corto que puede ser enviado por medio de del servicio de microblogging Twitter. ¿Qué es un tweet? Un tweet es un mensaje de estado en Twitter que puede tener hasta 280 caracteres. Los tweets solían limitarse a 140 caracteres, pero esta cantidad se incrementó a 280 en septiembre de 2017. Debido al espacio limitado para el texto, las URLs para uso en tweets son normalmente Suite à @Cromodev y háganos saber dónde y cómo lo está utilizando.
Links Útiles
Merci
Muchas gracias a Domenic Denicola, Yoav Weiss, Mathias Bynens por las revisiones de diseño de API y a Dominik Inführ, Hannes Payer, Kentaro Hara, Michael Lippautz por las revisiones de código en Chrome. Además agradezco a Per Parker, Philipp Weis, Olga Belomestnykh, Matthew Bolohan y Neil Mckay por otorgar valiosos comentarios de los usuarios que mejoraron enormemente la API.
Image de héros por Harrison Broadbent en Unsplash




