Optimización del rendimiento front-end: indicadores y herramientas de rendimiento

antecedentes

El rendimiento es la columna vertebral de los sitios web y las aplicaciones. Con un alto rendimiento del sitio web, la experiencia del usuario será mejor. Al mismo tiempo, la velocidad del sitio web también es un factor en la clasificación de los motores de búsqueda. Por lo tanto, el buen desempeño del sitio web afecta directamente a nuestros indicadores de ingresos, por lo que es necesario mejorar el desempeño del sitio web para obtener beneficios comerciales desde el punto de vista técnico.

Métricas de optimización del rendimiento

El modelo RAIL es un conjunto de modelos de rendimiento centrados en el usuario proporcionados por Google, que proporciona una estructura que considera el rendimiento. El modelo divide la experiencia del usuario en acciones clave (p. ej., hacer clic, desplazarse, cargar) y lo ayuda a definir objetivos de rendimiento para cada acción. FERROCARRIL significa:

  • Respuesta: Respuesta
  • Animación: animación
  • inactivo: inactivo
  • carga: carga

Como se muestra abajo:imagen.png

respuesta

Las transiciones iniciadas por la entrada del usuario se completan en 100 milisegundos, lo que hace que la interacción se sienta instantánea para el usuario.

  • Para garantizar una respuesta visible dentro de los 100 ms, los eventos de entrada del usuario deben procesarse dentro de los 50 ms. Esto funciona para la mayoría de las entradas, como hacer clic en un botón, alternar un control de formulario o iniciar una animación. Sin embargo, esto no funciona con el arrastre o el desplazamiento táctil.
  • Por paradójico que pueda parecer, responder a la entrada del usuario al instante no siempre es lo correcto. Puede usar esta ventana de 100 milisegundos para realizar otro trabajo que requiera muchos recursos, pero tenga cuidado de no entorpecer al usuario. Debería funcionar en segundo plano si es posible.
  • Siéntase libre de proporcionar comentarios sobre las operaciones que tardan más de 50 ms en completarse.

50 ms o 100 ms?

El objetivo es responder a la entrada dentro de los 100 ms, entonces, ¿por qué solo tenemos un presupuesto de 50 ms? Esto se debe a que, a menudo, hay trabajo que debe realizarse además del procesamiento de entrada, y ese trabajo ocupa parte del tiempo disponible para una respuesta de entrada aceptable. Si una aplicación ejecuta trabajo en los fragmentos de 50 ms recomendados durante el tiempo de inactividad, esto significa que si se produce una entrada en uno de estos fragmentos de trabajo, puede ponerse en cola hasta 50 ms. Con esto en mente, es seguro asumir que solo los 50 milisegundos restantes están disponibles para el procesamiento de entrada real. Este efecto se ilustra en el siguiente diagrama, que muestra cómo se pone en cola la entrada recibida durante las tareas inactivas, lo que reduce el tiempo de procesamiento disponible:

imagen.png

animación

Generar un marco en 10ms

  • 在 10 毫秒或更短的时间内生成动画的每一帧。从技术上来讲,每帧的最大预算为 16 毫秒(1000 毫秒/每秒 60 帧≈16 毫秒),但是,浏览器需要大约 6 毫秒来渲染一帧,因此,准则为每帧 10 毫秒。
  • 目标为流畅的视觉效果。用户会注意到帧速率的变化。

空闲

最大限度增加空闲时间以提高页面在 50 毫秒内响应用户输入的几率。

加载

  • 根据用户的设备和网络能力优化相关的快速加载性能。目前,对于首次加载,在使用速度较慢 3G 连接的中端移动设备上,理想的目标是在 5 秒或更短的时间实现可交互
  • 对于后续加载,理想的目标是在 2 秒内加载页面。

通过APIs动态获取指标

如何通过api来获取网页的一些实时的指标数据,对我们做优化非常重要。一般情况,我们通过performance对象来获取常规的性能指标数据。 imagen.png 下面我们只介绍我们最常用的值

  • navigationStart: 浏览器处理当前网页的启动时间
  • fetchStart:浏览器发起HTTP读取文档的毫秒时间戳
  • domainLookupStart: 域名查询开始的时间戳
  • domainLookupEnd: 域名查询结束的时间戳
  • connectStart: HTTP请求开始向服务器发送的时间戳
  • connectEnd: 浏览器与服务器链接建立
  • requestStart: 浏览器向服务器发出HTTP请求的时间戳
  • responseStart: 浏览器从服务器收到第一个字节的时间戳
  • responseEnd: 浏览器从服务器收到最后一个字节的时间戳
  • domLoading: 浏览器开始解析网页DOM结构的时间
  • domInteractive: 网页DOM树创建完成,开始加载内嵌资源时间
  • domContentLoadEventStart: 网页domContentLoadd时间发生时的时间错
  • domContentLoadedEventEnd: 网页所有需要执行的脚本执行完成的时间, domReady的时间
  • loadEventStart: 当前网页load事件回调函数开始执行的时间戳
  • loadEventEnd: 当前网页load事件回调函数执行结束的时间戳
性能数据名称 描述 计算方法
DNS查询时间耗时 DNS解析耗时 domainLookupEnd - domainLookupStart
请求响应耗时 网络请求耗时 responseStart - requestStart
DOM解析耗时 DOM解析耗时 domInteractive - responseEnd
资源加载耗时 资源加载耗时 loadEventStart - domContentLoadedEventEend
DOM_READY耗时 DOM阶段渲染耗时 domContentLoadedEventEend - fetchStart
首次渲染耗时 首次渲染时间/白屏时间 responseEnd - fetchStart
首次可交互耗时 首次可交互耗时 domInteractive - fetchStart
首包时间耗时 首包时间 responseStart - domainLookupStart
页面完全加载耗时 页面完全加载时间 loadEventStart - fetchStart
TCP链接时间 TCP链接耗时 connectEnd - connectStart

自定义指标采集 我们可以通过自定义一些指标来采集我们想要的数据

const observer = new PerformanceObserver((list) => {
    for(const entry of list.getEntries) {
        console.log(entry)
    }
})
observer.observe({ entryTypes: ['longtask'] })
复制代码

可以通过PerformanceObserver.supportedEntryTypes属性来查看支持哪些属性

性能优化的工具

有一些工具可以帮助您自动执行 RAIL 测量。具体使用哪一种取决于您需要什么类型的信息,以及您喜欢什么类型的工作流程。

Chrome DevTools #

Chrome DevTools 对加载或运行页面时发生的一切活动进行深入分析。请参阅分析运行时性能入门,熟悉性能面板 UI。

以下 DevTools 功能密切相关:

Lighthouse #

web.dev/measure 下的 Chrome DevTools 中以 Chrome 扩展和 Node.js 模块的形式提供了 Lighthouse,WebPageTest 中也提供了此工具。只要您提供一个 URL,它就会模拟使用速度较慢的 3G 连接的中端设备在页面上运行一系列审核,然后提供关于加载性能的报告以及如何改进的建议。

以下审核密切相关:

响应

加载

WebPageTest herramienta de prueba de rendimiento de la página web  #

WebPageTest es una herramienta de prueba de rendimiento de páginas web que utiliza navegadores reales para visitar páginas web y recopilar métricas de tiempo. Ingrese una URL en  webpagetest.org/easy  y podrá obtener un informe sobre el rendimiento de carga de esa página en un dispositivo Moto G4 real usando una conexión 3G más lenta. También puede configurarlo para incluir la auditoría de Lighthouse.

Referencias

Mida el rendimiento utilizando el modelo RAIL ( web.dev/rail/ )

Supongo que te gusta

Origin juejin.im/post/7084983567780069407
Recomendado
Clasificación