Espero que estés teniendo un buen día.
Estoy creando una API node.js simple, y me preguntaba cuál de estas es la forma más eficiente de devolver una respuesta.
Uso esta clase para devolver respuestas:
class Response { constructor(statusCode, error, data){ this.status = statusCode; this.error = error; this.data = data; } } export default const handleResponse = (statusCode = 200, error = '', data = {}) => { return new HandlerResponse(statusCode, error, data); }
A veces lo uso de esta manera:
const response = handleResponse(); if(condition) { response.error = 'An error ocurred'; response.status = 400; return response; } else { response.error = 'Some other error'; response.status = 404; return response; }
Y a veces lo uso así:
if(condition) { return handleResponse(400, 'An error ocurred') } else return handleResponse(404, 'Some other error')
Habría una diferencia entre estos dos en el rendimiento? ¿Cuál debo usar?
Ambos hacen lo siguiente;
La única diferencia práctica entre las dos es que la primera opción también asigna un objeto vacío si deja ese parámetro sin especificar, mientras que la segunda deja ese campo sin definir.
Para determinar cuál de los dos es más rápido, tendría que probarlos a ambos. Por un lado, el objeto vacío (el parámetro "datos" opcional) teóricamente debería ralentizar ligeramente la primera implementación. Por otro lado, es posible que el motor javascript optimice mejor el primero porque no tiene una rama en el medio.
El hecho de que la primera implementación esté asignando memoria es la solución de menor rendimiento de las dos. Sin embargo, las ganancias de rendimiento no se realizarían entre ninguna de las implementaciones debido a lo insignificantes que serían. Javascript, como la mayoría de los lenguajes populares, es extremadamente eficaz y, por lo tanto, la mayoría de las veces es mejor centrarse en la legibilidad más que en el rendimiento cuando se trata de determinar la mejor implementación.