¿El uso de la función de depuración console.log
reducirá el rendimiento de ejecución de JavaScript? ¿Afectará la velocidad de ejecución del script en entornos de producción?
¿Existe algún enfoque para deshabilitar los registros de la consola en entornos de producción desde una única ubicación de configuración?
javascript
performance
Sudantha
fuente
fuente
console.log
toma ~Respuestas:
Si va a tener esto en un sitio público o algo así, cualquier persona con poco conocimiento sobre el uso de las herramientas de desarrollo puede leer sus mensajes de depuración. Dependiendo de lo que esté registrando, esto puede no ser un comportamiento deseable.
Uno de los mejores enfoques es incluir el
console.log
en uno de sus métodos, y donde puede verificar las condiciones y ejecutarlo. En una compilación de producción, puede evitar tener estas funciones. Esta pregunta de Stack Overflow habla en detalle sobre cómo hacer lo mismo usando el compilador Closure .Entonces, para responder a sus preguntas:
aunque solo de forma insignificante.fuente
conosle.log
función anulada, ¿no es así?console.log
para registrar objetos causa pérdida de memoria ya que el navegador retiene la estructura del objeto para permitir a los desarrolladores expandir el registro.En realidad,
console.log
es mucho más lento que una función vacía. Ejecutar esta prueba jsPerf en mi Chrome 38 da resultados asombrosos:console.log
es aproximadamente 10000 veces más lento que llamar a una función vacía,No es que note el retraso en el rendimiento si tiene una cantidad razonable de
console.…
llamadas que se disparan una vez (cien tomarán 2 ms en mi instalación de Chrome, o 20 ms cuando la consola está abierta). Pero si registra cosas en la consola repetidamente, por ejemplo, conectándolo,requestAnimationFrame
puede hacer que las cosas se vuelvan loca.Actualizar:
En esta prueba también he comprobado la idea de un "registro oculto" personalizado para la producción, que tiene una variable que contiene mensajes de registro, disponible a pedido. Resulta ser
console.log
,fuente
console.log
si. Ambos son funciones que producen efectos secundarios.console.log
por sí solo no afecta el rendimiento de una manera que notará a menos que lo vincule a un controlador de desplazamiento / cambio de tamaño. Estos se llaman mucho y si su navegador tiene que enviar texto a la consola como 30 / 60x por segundo, puede ponerse feo. Y luego está ese error de IE que no le permitió tenerconsole.log
nada con la consola cerrada :(logging-on x 3,179 ops/sec ±2.07% (56 runs sampled)
logging-off x 56,058,330 ops/sec ±2.87% (56 runs sampled)
logging-off-stringify x 1,812,379 ops/sec ±3.50% (58 runs sampled)
log-nothing x 59,509,998 ops/sec ±2.63% (59 runs sampled)
fuente
Si crea un acceso directo a la consola en un script central común, por ejemplo:
y luego use con.log ("mensaje") o con.error ("mensaje de error") en todo su código, en producción puede simplemente volver a cablear con en la ubicación principal para:
fuente
console.log = function(){}
Por supuesto,
console.log()
reducirá el rendimiento de su programa ya que requiere tiempo computacional.Coloque este código al comienzo de su secuencia de comandos para anular la función estándar console.log por una función vacía.
fuente
Cualquier llamada a función reducirá ligeramente el rendimiento. Pero algunos
console.log
no deberían tener ningún efecto notable.Sin embargo, arrojará errores indefinidos en navegadores antiguos que no admiten
console
fuente
El impacto en el rendimiento será mínimo, sin embargo, en los navegadores más antiguos, provocará errores de JavaScript si la consola de los navegadores de los usuarios no está abierta
log is not a function of undefined
. Esto significa que no se ejecutará todo el código JavaScript después de la llamada a console.log.Puede crear un contenedor para verificar si
window.console
es un objeto válido y luego llamar a console.log en el contenedor. Algo simple como esto funcionaría:Aquí hay un violín: http://jsfiddle.net/enDDV/
fuente
Hice esta prueba jsPerf: http://jsperf.com/console-log1337
No parece tardar más que otras llamadas a funciones.
¿Qué pasa con los navegadores que no tienen una API de consola? Si necesita usar console.log para depurar, puede incluir un script en su implementación de producción para anular la API de la consola, como sugiere Paul en su respuesta.
fuente
Lo hago de esta manera para mantener la firma original de los métodos de la consola. En una ubicación común, cargada antes que cualquier otro JS:
Luego a lo largo del código
fuente