Rutas de Código Eficientes
Comience con una operación real. ¿Qué muestra o sobre qué actúa el usuario? Siga esa necesidad a través de la API, el servicio, el middleware, el ORM y el SQL ejecutado. Elimine el trabajo innecesario en el punto más temprano posible del camino afectado. Utilice código directo y de bajo costo en el desarrollo rutinario. Localice el cuello de botella antes de introducir una optimización más compleja.
Reglas de implementación
- Reutilice los datos ya disponibles para la solicitud. Agrupe consultas, escrituras y llamadas remotas siempre que la operación lo admita. Divida los lotes en los límites reales. Verifique lo que una API de lote hace internamente. Las llamadas paralelas por elemento siguen incurriendo en un viaje de ida y vuelta por elemento.
- Elija estructuras de datos según el patrón de acceso. Recorra una colección existente para una sola búsqueda. Construya un mapa indexado una vez para coincidencias repetidas. Saque el análisis y cómputo invariante de los bucles. En rutas críticas, elimine las ordenaciones repetidas, las copias grandes y las colecciones intermedias no utilizadas. Pase valores existentes dentro de un proceso en lugar de hacer un viaje de ida y vuelta a través de JSON para convertir entre formas idénticas.
- Analice y valide la entrada externa donde entra. Las funciones internas pueden usar valores que el punto de entrada ya ha verificado en cuanto a presencia, tipo o rango. Antes de agregar una rama defensiva, identifique una entrada alcanzable y el fallo que la rama evita. Capture un error donde el código pueda recuperarse, agregue contexto útil o tradúzcalo a un contrato de error diferente.
- Incluya la pertenencia en el predicado de lectura o escritura cuando sea posible. Pase la identidad de la tarea verificada, la pertenencia y los argumentos a través de módulos de confianza, planificadores y ejecutores. Una transferencia, devolución de llamada o delegación dentro de la misma tarea no requiere por sí sola otra verificación o búsqueda. Cuando esté involucrada una nueva entrada o un límite de confianza independiente, verifique las garantías que el receptor no puede heredar. Haga cumplir condiciones mutables como saldo, estado previo e idempotencia atómicamente en la escritura que depende de ellas.
- Use un valor predeterminado adecuado del framework o defina una regla fija una vez donde corresponda. Agregue un ajuste de configuración solo para una diferencia de implementación real, una necesidad de ajuste independiente o una solicitud explícita del usuario. Use primero la configuración o el almacén de secretos existente. Cree un archivo solo cuando el mecanismo existente no pueda satisfacer el requisito. Agregue conmutadores de funcionalidad solo cuando se soliciten.
- Prefiera restricciones únicas, escrituras condicionales, incrementos atómicos y transacciones cortas. Antes de agregar un bloqueo de aplicación, identifique las operaciones en competencia, el resultado incorrecto y por qué los mecanismos existentes no pueden evitarlo. Bloquee el recurso más pequeño durante el intervalo más corto. Verifique cada escritor y cualquier resultado tardío antes de eliminar un bloqueo existente.
- Preserve las reglas de acceso, el orden, la paginación, la semántica de éxito parcial, la calidad de salida y la recuperación. Discuta los cambios materiales en el comportamiento o el costo con el usuario. Reutilice el middleware del proyecto, los puntos de entrada de prueba y los criterios de aceptación.
Lea la referencia relevante
- Para SQL, comportamiento del ORM, índices, operaciones por lotes, transacciones y bloqueos, lea Acceso a bases de datos y transacciones.
- Para selección de campos de API, middleware, caché, colas, archivos grandes o carga frontal, lea la sección correspondiente de Runtime y middleware.
Verificación
- Ejecute las API modificadas a través del punto de entrada real de la aplicación en un entorno de pruebas autorizado. Verifique la respuesta, los llamadores afectados y el estado comercial final. Al recortar campos, inspeccione la carga útil real y, para rutas respaldadas por base de datos, el SQL ejecutado. Para el procesamiento por lotes, compare el número de consultas para un lote pequeño y uno completo. Pruebe la ruta relevante de condición de carrera, solicitud duplicada o recuperación cuando haya efectos secundarios. Verifique los trabajos en segundo plano y el cómputo local a través de sus puntos de entrada normales e inspeccione sus salidas. Siga las comprobaciones requeridas del proyecto y la CI.
- El usuario es responsable de la aceptación visual y manual web. Entregue la página, las acciones y los resultados esperados, y marque esa aceptación como pendiente. Ejecute las comprobaciones de compilación, tipo o interacción relevantes para los cambios en el frontend. Si el usuario delega las pruebas del navegador, cubra el alcance solicitado.
- Respalde las afirmaciones de aceleración con mediciones de antes y después en el mismo entorno bajo datos y concurrencia equivalentes. Registre el tamaño de la muestra y el estado de la caché. Elija métricas que expongan el costo bajo investigación, como latencia de cola, rendimiento, número de consultas, filas escaneadas, bytes transferidos o memoria máxima. Para trabajo asíncrono, distinga la aceptación, el retardo de cola y la finalización. Informe una sola ejecución como una sola ejecución. Sin una línea base comparable, informe solo lo que se midió. Mantenga la verificación proporcional al cambio.