Prácticas estrategias de manejo de excepciones y tolerancia a fallas de front-end

Tabla de contenido

1. Introducción

2. Límite de error

2.1 ¿Qué es un límite de error?

2.2 Uso de límites de error

2.3 Usando límites de error en React

3. Supervisión de errores

3.1 ¿Qué es el control de errores?

3.2 Herramienta de control de errores

3.2.1 Instalar e inicializar Sentry

3.2.2 Detectar errores y enviarlos a Sentry

3.3 Supervisión de errores personalizada

4. Captura y manejo de excepciones

4.1 Usando la sentencia try...catch

4.2 Usando el método Promise.catch

4.3 Manejo de excepciones y experiencia del usuario

5. Registro de errores

5.1 La importancia de los registros de errores

5.2 Recopilación y almacenamiento de registros de errores

5.3 Visualización y análisis de logs de errores

6. Resumen


1. Introducción

En el desarrollo front-end, el entorno y el comportamiento del usuario no se pueden controlar por completo, por lo que a menudo nos encontramos con varias situaciones inesperadas y excepciones. Para mejorar la experiencia del usuario y la solidez del código, debemos implementar estrategias efectivas de tolerancia a fallas y manejo de excepciones. Este blog presentará algunas estrategias prácticas de manejo de excepciones y tolerancia a fallas de front-end, que incluyen límites de error, monitoreo de errores, captura y procesamiento de excepciones, registros de errores y otras tecnologías, para ayudarnos a lidiar mejor con diversas situaciones anormales.

2. Límite de error

2.1 ¿Qué es un límite de error?

Los límites de error son un mecanismo introducido en el marco de React para manejar los errores de JavaScript que ocurren en el árbol de componentes, evitando que toda la aplicación se bloquee. Con los límites de error, podemos mostrar mensajes de error con elegancia y alertar al usuario sobre los problemas.

2.2 Uso de límites de error

Podemos detectar errores en sus componentes secundarios creando un componente de límite de error y manejar estos errores.

// ErrorBoundary.js
import React, { Component } from 'react';

class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(error) {
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    // 可以在这里处理错误信息,比如上报到服务端或输出到控制台
    console.error(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      return <h1>Oops! Something went wrong.</h1>;
    }

    return this.props.children;
  }
}

export default ErrorBoundary;

En el código anterior, definimos un ErrorBoundarycomponente que envuelve sus componentes secundarios. Con getDerivedStateFromErrory componentDidCatchdos métodos de ciclo de vida, detectamos y manejamos errores en componentes secundarios. En renderel método, decidimos si mostrar un mensaje de error o representar el componente secundario normalmente de acuerdo con si hay un error.

2.3 Usando límites de error en React

Ahora podemos usar los límites de error en los componentes de React para manejar los errores.

import React, { Component } from 'react';
import ErrorBoundary from './ErrorBoundary';

class MyComponent extends Component {
  render() {
    return (
      <ErrorBoundary>
        {/* 其他子组件 */}
      </ErrorBoundary>
    );
  }
}

export default MyComponent;

En el código anterior, MyComponentusamos ErrorBoundarycomponentes en componentes para envolver otros subcomponentes. Si se produce un error en el componente secundario, el límite de error mostrará el mensaje de error.

3. Supervisión de errores

3.1 ¿Qué es el control de errores?

El monitoreo de errores se refiere al monitoreo en tiempo real y la recopilación de errores que ocurren en las aplicaciones front-end, y la toma de las medidas correspondientes de manera oportuna, como informar al servidor y enviar notificaciones de alarma. A través de la supervisión de errores, podemos descubrir y resolver errores front-end a tiempo para mejorar la experiencia del usuario.

3.2 Herramienta de control de errores

Hay muchas herramientas excelentes de monitoreo de errores disponibles en el mercado hoy en día, como Sentry, Bugsnag, TrackJS, etc. Estas herramientas brindan una gran cantidad de funciones que pueden ayudarnos a monitorear los errores de front-end en tiempo real y brindan información detallada sobre errores y seguimientos de pila para facilitar la ubicación y resolución rápida de problemas.

Tomando Sentry como ejemplo, podemos integrarlo en el proyecto de las siguientes maneras:

3.2.1 Instalar e inicializar Sentry

 
 
npm install @sentry/browser
 
 
// 在项目入口文件中引入并初始化Sentry
import * as Sentry from '@sentry/browser';

Sentry.init({
  dsn: 'YOUR_SENTRY_DSN',
});

3.2.2 Detectar errores y enviarlos a Sentry

Cuando es necesario detectar errores, podemos usar try...catchdeclaraciones para detectar errores y utilizar captureExceptionlos métodos de Sentry para enviar mensajes de error a Sentry.

 
 
try {
  // 可能会出错的代码
} catch (error) {
  Sentry.captureException(error);
}

3.3 Supervisión de errores personalizada

Además de usar herramientas de monitoreo de errores de terceros, también podemos personalizar el monitoreo de errores para implementar una lógica de monitoreo de errores específica de acuerdo con los requisitos del proyecto.

Por ejemplo, podemos windowescuchar eventos en objetos error, capturar errores globales de JavaScript y reportar información de errores al servidor.

 
 
window.addEventListener('error', (event) => {
  const error = event.error || new Error('Unknown error');
  console.error(error);

  // 可以将错误信息发送到服务端或其他处理
});

Al personalizar el monitoreo de errores, podemos manejar los errores de manera más flexible y tomar las medidas apropiadas de acuerdo con la situación específica.

4. Captura y manejo de excepciones

4.1 Uso try...catchde declaraciones

En el desarrollo front-end, a menudo nos encontramos con algún código que puede generar excepciones, como operaciones asincrónicas, análisis JSON, etc. Para evitar que estas excepciones provoquen el bloqueo de toda la aplicación, podemos usar try...catchdeclaraciones para detectar excepciones y manejarlas en consecuencia.

 
 
try {
  // 可能会抛出异常的代码
} catch (error) {
  // 异常处理逻辑
}

En el código anterior, usamos try...catchdeclaraciones para colocar el código que puede generar una excepción en tryun bloque y catchmanejar la condición de excepción dentro del bloque.

4.2 Promise.catchCómo usar

Para las operaciones asincrónicas que devuelven Promesas, podemos usar catchmétodos para capturar excepciones en operaciones asincrónicas.

 
 
async function fetchData() {
  try {
    const data = await fetch('api/data');
    // 处理数据
  } catch (error) {
    // 异常处理逻辑
  }
}

En el código anterior, usamos awaitla palabra clave para esperar el resultado de la operación asincrónica y luego usamos catchel método para capturar la excepción.

4.3 Manejo de excepciones y experiencia del usuario

Al manejar excepciones, debemos tener en cuenta la experiencia del usuario, tratar de evitar mostrar información técnica redundante a los usuarios, pero proporcionar mensajes de error claros y concisos.

Por ejemplo, cuando falla una solicitud de red, podemos mostrar un mensaje de error de manera amigable en lugar de mostrar la pila de errores directamente.

 
 
try {
  const data = await fetch('api/data');
  // 处理数据
} catch (error) {
  console.error(error);

  // 友好提示用户
  showErrorMessage('Oops! Something went wrong. Please try again later.');
}

5. Registro de errores

5.1 La importancia de los registros de errores

El registro de errores se refiere al registro y almacenamiento de errores que ocurren en la aplicación front-end. A través del registro de errores, podemos descubrir y resolver problemas potenciales a tiempo, lo que nos ayuda a optimizar continuamente la aplicación y mejorar la experiencia del usuario.

5.2 Recopilación y almacenamiento de registros de errores

En el desarrollo front-end, podemos usar window.onerroreventos para capturar globalmente errores de JavaScript no controlados y registrar la información del error en el registro.

 
 
window.onerror = (message, source, lineno, colno, error) => {
  const errorMessage = `${message} at ${source}:${lineno}:${colno}`;
  console.error(errorMessage);

  // 将错误信息发送到服务端或其他处理
  logErrorToServer(errorMessage);
};

En el código anterior, usamos window.onerroreventos para monitorear los errores globales de JavaScript, luego registramos la información del error en el registro y logErrorToServerenviamos la información del error al servidor a través del método.

5.3 Visualización y análisis de logs de errores

Después de recopilar registros de errores, generalmente usamos herramientas de visualización y análisis para ver y analizar la información de errores. Estas herramientas pueden ayudarnos a localizar errores rápidamente y recopilar información como la frecuencia de los errores y el entorno, para que podamos tomar decisiones de optimización.

Algunas herramientas de análisis y visualización de registros de errores de uso común son Elasticsearch + Kibana, Grafana, LogRocket, etc.

6. Resumen

La tolerancia a fallas de front-end y el manejo de excepciones son una parte importante para garantizar la estabilidad de la aplicación y la experiencia del usuario. A través de la introducción de este blog, hemos aprendido sobre algunas estrategias prácticas de manejo de excepciones y tolerancia a fallas de front-end, incluidas tecnologías como límites de errores, monitoreo de errores, captura y procesamiento de excepciones y registros de errores.

En proyectos reales, de acuerdo con las necesidades y los escenarios específicos, podemos seleccionar y combinar estas estrategias de manera flexible para lograr el objetivo de optimizar las aplicaciones y mejorar la experiencia del usuario.

おすすめ

転載: blog.csdn.net/m0_68036862/article/details/132040032