Límites de recursos y optimización de rendimiento para los complementos de Office
Los complementos de calidad deben realizarse dentro de requisitos específicos para el uso del núcleo de CPU, el uso de memoria, la confiabilidad y, para los complementos de Outlook, el tiempo de respuesta de evaluación de expresiones regulares. Estos límites ayudan a garantizar el rendimiento para sus usuarios y mitigar los ataques por denegación de servicio. Asegúrese de probar el complemento de Office en la aplicación de Office de destino mediante una variedad de datos posibles y mida su rendimiento con los siguientes límites de uso en tiempo de ejecución.
Límites de uso de recursos para complementos
Los siguientes límites de recursos en tiempo de ejecución se aplican a todos los complementos que se ejecutan en clientes de Office en Windows y Mac, pero no en aplicaciones móviles o en un explorador.
Uso de núcleos de CPU : un umbral de uso de núcleo de CPU único del 90 %, observado 3 veces en intervalos de 5 segundos de forma predeterminada.
Si el cliente de Office detecta que el uso del núcleo de CPU de un complemento está por encima del valor de umbral, muestra un mensaje que pregunta si el usuario quiere seguir ejecutando el complemento. Si el usuario decide continuar, el cliente de Office no vuelve a preguntar al usuario durante esa sesión de edición. El intervalo predeterminado para que un cliente de Office compruebe el uso del núcleo de CPU es cada 5 segundos. Los administradores pueden usar la clave del Registro AlertInterval para aumentar el umbral y reducir la visualización de este mensaje de advertencia si los usuarios ejecutan complementos que consumen mucha CPU.
Uso de memoria: umbral predeterminado de uso de memoria que se determina de forma dinámica según la memoria física disponible del dispositivo.
De forma predeterminada, cuando un cliente de Office detecta que el uso de memoria física en un dispositivo supera el 80 % de la memoria disponible, el cliente comienza a supervisar el uso de memoria del complemento. Esto se hace en el nivel de documento para complementos de contenido y panel de tareas y en el nivel de buzón para complementos de Outlook. En un intervalo predeterminado de 5 segundos, el cliente advierte al usuario si el uso de memoria física para un conjunto de complementos en el nivel de documento o buzón supera el 50 %. Este límite del uso de la memoria usa memoria física más que virtual para asegurar el buen rendimiento de los dispositivos con RAM limitada, como las tabletas. Los administradores pueden invalidar esta configuración dinámica con un límite explícito mediante la clave del Registro de Windows MemoryAlertThreshold como una configuración global. También pueden ajustar el intervalo de alertas con la clave AlertInterval .
Tolerancia a bloqueos : un límite predeterminado de 4 bloqueos durante la sesión del documento.
Los administradores pueden ajustar el umbral de bloqueos mediante el uso de la clave de registro RestartManagerRetryLimit.
Bloqueo de aplicaciones: un umbral de falta de respuesta prolongado de 5 segundos.
Esto afecta a las experiencias del usuario del complemento y la aplicación de Office. Cuando esto ocurre, la aplicación de Office reinicia automáticamente todos los complementos activos de un documento o buzón (si procede) y advierte al usuario de que el complemento no responde. Los complementos alcanzan este umbral cuando no producen procesamiento periódicamente mientras realizan tareas de larga duración. Hay técnicas enumeradas más adelante en este artículo para ayudar a garantizar que el complemento no bloquea la aplicación de Office. Los administradores no pueden reemplazar este umbral.
Complementos de contenido y panel de tareas
Si algún complemento de contenido o panel de tareas supera los umbrales anteriores en el uso de memoria o núcleo de CPU, o límite de tolerancia para bloqueos, la aplicación de Office correspondiente muestra una advertencia para el usuario. En este momento, el usuario puede hacer lo siguiente:
- Reiniciar el complemento.
- No aceptar más alertas de superación de ese umbral. Lo ideal es que el usuario elimine el complemento del documento. El uso continuado del complemento corre el riesgo de más problemas de rendimiento y estabilidad.
Complementos de Outlook
Si algún complemento de Outlook supera los umbrales anteriores para el uso de memoria o núcleo de CPU, o el límite de tolerancia para bloqueos, el complemento deja de estar disponible. El Centro de Administración exchange muestra el estado del complemento.
Nota:
Aunque solo Outlook en Windows (clásico) y en Mac supervisan el uso de recursos, si alguno de estos clientes hace que un complemento de Outlook no esté disponible, ese complemento también deja de estar disponible en Outlook en la Web, en dispositivos móviles y en el nuevo Outlook en Windows.
Además del núcleo de CPU, la memoria y las reglas de confiabilidad, los complementos de Outlook deben observar las siguientes reglas sobre la activación.
Tiempo de respuesta para las expresiones regulares: Outlook tiene un umbral predeterminado de 1000 milisegundos para evaluar todas las expresiones regulares en el manifiesto de un complemento de Outlook. Si se sobrepasa ese umbral, Outlook volverá a intentar realizar la evaluación más adelante.
Los administradores pueden ajustar este valor de umbral predeterminado de 1000 milisegundos mediante una directiva de grupo o una configuración específica de la aplicación para la clave OutlookActivationAlertThreshold en el Registro de Windows.
Reevaluación de expresiones regulares : un límite predeterminado de 3 veces para que Outlook vuelva a evaluar todas las expresiones regulares de un manifiesto. Si la evaluación no se puede evaluar dentro del límite de tiempo 3 veces, Outlook hace que el complemento no esté disponible.
Los administradores pueden ajustar este número de veces para volver a intentar la evaluación mediante una directiva de grupo o una configuración específica de la aplicación para la clave OutlookActivationManagerRetryLimit en el Registro de Windows.
Complementos de Excel
Los complementos de Excel tienen límites de transferencia de datos importantes al interactuar con el libro.
- Excel en la web tiene un límite de tamaño de carga para las solicitudes y respuestas de 5 MB. Se producirá
RichAPI.Error
si se supera ese límite. - Un rango está limitado a 5000 000 celdas para operaciones de lectura.
Si espera que la entrada del usuario supere estos límites, compruebe los datos antes de llamar a context.sync()
. Divida la operación en piezas más pequeñas según sea necesario. Llame a context.sync()
para cada sub operación para evitar que esas operaciones se vuelvan a agrupar por lotes.
Estos límites suelen superarse en intervalos grandes. Es posible que el complemento pueda usar RangeAreas para actualizar estratégicamente las celdas dentro de un intervalo mayor. Para obtener más información sobre cómo trabajar con RangeAreas
, vea Trabajar con varios rangos simultáneamente en complementos de Excel. Para obtener información adicional sobre cómo optimizar el tamaño de carga en Excel, vea Procedimientos recomendados de límite de tamaño de carga.
Comprobación de problemas de uso de recursos en el registro de telemetría
Office proporciona un registro de telemetría que mantiene un registro de determinados eventos (carga, apertura, cierre y errores) para las soluciones de Office que se ejecutan en el equipo local. Esto incluye problemas de uso de recursos en un complemento de Office. Si tiene configurado el registro de telemetría, puede usar Excel para abrir el registro de telemetría en la siguiente ubicación predeterminada en la unidad local.
%Users%\<Current user>\AppData\Local\Microsoft\Office\16.0\Telemetry
Para cada evento de un complemento que sigue el Registro de telemetría, está la fecha y hora en la que ocurrió, el identificador del evento, la gravedad y un breve título descriptivo del evento, el nombre descriptivo y el identificador único del complemento y la aplicación que registró el evento. Actualice el registro de telemetría para ver los eventos de seguimiento actuales. La siguiente tabla contiene un par de ejemplos de complementos de Outlook que se siguieron en el Registro de telemetría.
Fecha y hora | Identificador del evento | Severity | Cargo | Archivo | Id. | Aplicación |
---|---|---|---|---|---|---|
10/8/2022 5:57:10 p.m. | 7 | No aplicable | El manifiesto del complemento se descargó correctamente | Who's Who | 69cc567c-6737-4c49-88dd-123334943a22 | Outlook |
10/8/2022 5:57:01 PM | 7 | No aplicable | El manifiesto del complemento se descargó correctamente | 333bf46d-7dad-4f2b-8cf4-c19ddc78b723 | Outlook |
En la tabla siguiente se enumeran los eventos que realiza el registro de telemetría para los complementos de Office.
Id. de evento | Cargo | Severity | Descripción |
---|---|---|---|
7 | El manifiesto del complemento se descargó correctamente | No aplicable | La aplicación de Office cargó y leyó correctamente el manifiesto del complemento de Office. |
8 | No se pudo descargar el manifiesto del complemento | Crítico | La aplicación de Office no pudo cargar el archivo de manifiesto para el complemento de Office desde el catálogo de SharePoint, el catálogo corporativo o AppSource. |
9 | No se pudo analizar el marcado del complemento | Crítico | La aplicación de Office cargó el manifiesto del complemento de Office, pero no pudo leer el marcado HTML de la aplicación. |
10 | El complemento usó demasiada CPU | Crítico | La Complemento de Office usó más del 90 % de los recursos de la CPU durante un período de tiempo limitado. |
15 | El complemento se deshabilitó porque se superó el tiempo de espera de búsqueda de cadenas | No aplicable | Los complementos de Outlook buscan en el mensaje y la línea de asunto de los correos electrónicos para averiguar si deben mostrarse con una expresión regular. Outlook deshabilitó el complemento de Outlook que aparece en la columna Archivo porque agotó varias veces el tiempo de espera al intentar encontrar una expresión regular. |
18 | El complemento se cerró correctamente | No aplicable | La aplicación de Office pudo cerrar el complemento de Office correctamente. |
19 | Error de tiempo de ejecución del complemento. | Crítico | Se produjo un problema en la Complemento de Office que provocó un error. Para obtener información detallada, vea el registro de Alertas de Microsoft Office con el Visor de eventos de Windows en el equipo donde se produjo el error. |
20 | No se pudieron comprobar las licencias del complemento. | Crítico | La información de licencias de la Complemento de Office no se pudo comprobar y puede haber expirado. Para obtener información detallada, vea el registro de Alertas de Microsoft Office con el Visor de eventos de Windows en el equipo donde se produjo el error. |
Para obtener más información, consulte Implementación del Panel de telemetría y Solución de problemas de los archivos de Office y soluciones personalizadas con el registro de telemetría.
Técnicas de diseño e implementación
Aunque los límites de recursos en el uso de CPU y memoria, la tolerancia a bloqueos y la capacidad de respuesta de la interfaz de usuario se aplican a los complementos de Office que se ejecutan solo en clientes de escritorio de Office, la optimización debe ser una prioridad si desea que el complemento funcione satisfactoriamente en todos los clientes y dispositivos auxiliares. La optimización es particularmente importante si el complemento realiza operaciones de ejecución prolongada o administra grandes conjuntos de datos. En la lista siguiente se sugieren algunas técnicas para dividir las operaciones intensivas de CPU o de datos en fragmentos más pequeños para que el complemento evite un consumo excesivo de recursos y mantenga la capacidad de respuesta de la aplicación de Office.
Si el complemento necesita leer un gran volumen de datos de un conjunto de datos sin enlazar, puede aplicar la paginación al leer los datos de una tabla o reducir el tamaño de los datos en cada operación de lectura más corta, en lugar de intentar completar la lectura en una sola operación. Puede hacerlo a través del método setTimeout del objeto global para limitar la duración de la entrada y la salida. It also handles the data in defined chunks instead of randomly unbounded data. Otra opción es usar async para controlar las promesas.
Si el complemento usa un algoritmo que consume mucha CPU para procesar un gran volumen de datos, puede usar trabajos web para realizar la tarea de ejecución prolongada en segundo plano mientras ejecuta un script independiente en primer plano, como mostrar el progreso en la interfaz de usuario. Los Web Workers no bloquean las actividades del usuario y permiten que la página HTML siga respondiendo con normalidad. Para ver un ejemplo de Web Workers, vea Introducción a los Web Workers.
Si el complemento usa un algoritmo que consume mucha CPU, pero puede dividir la entrada o salida de datos en conjuntos más pequeños, considere la posibilidad de crear un servicio web, pasar los datos al servicio web para desactivar la carga de la CPU y esperar una devolución de llamada asincrónica.
Pruebe el complemento con el mayor volumen de datos esperado y restrinja el procesamiento que puede realizar el complemento hasta ese límite.
Mejoras de rendimiento con las API específicas de la aplicación
Las sugerencias de rendimiento de Uso del modelo de API específico de la aplicación proporcionan instrucciones al usar las API específicas de la aplicación para Excel, OneNote, Visio y Word. En resumen, debe:
- Cargue solo las propiedades necesarias.
-
Minimice el número de llamadas sync(). Lea Evitar el uso del método context.sync en bucles para obtener más información sobre cómo administrar
sync
llamadas en el código. - Minimice el número de objetos proxy creados. También puede anular el seguimiento de los objetos proxy, como se describe en la sección siguiente.
Objetos proxy innecesarios sin seguimiento
Los objetos proxy permanecen en la memoria hasta que RequestContext.sync()
se llama a . Las operaciones por lotes de gran tamaño pueden generar una gran cantidad de objetos proxy que el complemento solo necesitan una vez y se pueden liberar de la memoria antes de ejecutar el lote.
El untrack()
método libera el objeto de la memoria. Este método se implementa en muchos objetos de proxy de API específicos de la aplicación. Llamar a untrack()
después de que el complemento se haya realizado con el objeto debería producir una ventaja de rendimiento notable al usar un gran número de objetos proxy.
Nota:
Range.untrack()
es un método abreviado para ClientRequestContext.trackedObjects.remove(thisRange). Si desea dejar de seguir un objeto proxy, quítelo de la lista de objetos seguidos en el contexto.
El siguiente ejemplo de código de Excel rellena un rango seleccionado con datos, una celda a la vez. Después de agregar el valor a la celda, el rango que representa esa celda se deja de seguir. Ejecute este código con un rango seleccionado de 10 000 a 20 000 celdas, primero con la línea cell.untrack()
y, a continuación, sin ella. Notará que el código se ejecuta más rápido con la línea cell.untrack()
que sin ella. También es posible que observe un tiempo de respuesta más rápido posteriormente, ya que el paso de limpieza requiere menos tiempo.
Excel.run(async (context) => {
const largeRange = context.workbook.getSelectedRange();
largeRange.load(["rowCount", "columnCount"]);
await context.sync();
for (let i = 0; i < largeRange.rowCount; i++) {
for (let j = 0; j < largeRange.columnCount; j++) {
let cell = largeRange.getCell(i, j);
cell.values = [[i *j]];
// Call untrack() to release the range from memory.
cell.untrack();
}
}
await context.sync();
});
Tenga en cuenta que la necesidad de anular el seguimiento de objetos solo es importante cuando se trabaja con miles de ellos. La mayoría de los complementos no necesitan administrar el seguimiento de objetos proxy.