O uso do recurso de depuração console.log
reduzirá o desempenho de execução do JavaScript? Isso afetará a velocidade de execução do script em ambientes de produção?
Existe uma abordagem para desabilitar logs de console em ambientes de produção a partir de um único local de configuração?
javascript
performance
Sudantha
fonte
fonte
console.log
leva aproximadamente 50msRespostas:
Se você tiver isso em um site público ou algo assim, qualquer pessoa com pouco conhecimento sobre como usar as ferramentas de desenvolvedor pode ler suas mensagens de depuração. Dependendo do que você está registrando, esse pode não ser um comportamento desejável.
Uma das melhores abordagens é envolver o
console.log
em um de seus métodos e onde você pode verificar as condições e executá-lo. Em uma construção de produção, você pode evitar ter essas funções. Esta questão do Stack Overflow fala em detalhes sobre como fazer o mesmo usando o compilador Closure .Então, para responder às suas perguntas:
embora de forma insignificante.fonte
conosle.log
ainda fará um hit na função substituída, não é?console.log
para registrar objetos causa vazamento de memória, pois o navegador retém a estrutura do objeto para permitir que os desenvolvedores expandam o registro.Na verdade,
console.log
é muito mais lento do que uma função vazia. Executar este teste jsPerf no meu Chrome 38 oferece resultados impressionantes:console.log
é cerca de 10.000 vezes mais lento do que chamar uma função vazia,Não que você notará o atraso de desempenho se tiver um número razoável de
console.…
chamadas disparando uma vez (cem levará 2 ms na minha instalação do Chrome - ou 20 ms quando o console estiver aberto). Mas se você logar coisas no console repetidamente - por exemplo, conectando-orequestAnimationFrame
- pode tornar as coisas bagunçadas.Atualizar:
Neste teste também verifiquei a ideia de um “log oculto” personalizado para produção - tendo uma variável que contém mensagens de log, disponíveis sob demanda. Acontece que é
console.log
,fonte
console.log
. Ambos são funções que produzem efeitos colaterais.console.log
por si só não afeta o desempenho de uma maneira que você notará, a menos que você o vincule a um manipulador de rolagem / redimensionamento. Eles são chamados de muitos e se seu navegador tem que enviar texto para o console como 30 / 60x por segundo, pode ficar feio. E há aquele bug do IE que não permitia que você o tivesseconsole.log
com o console fechado :(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)
fonte
Se você criar um atalho para o console em um script central comum, por exemplo:
e, em seguida, use con.log ("mensagem") ou con.error ("mensagem de erro") em todo o código. Na produção, você pode simplesmente reconectar con no local central para:
fonte
console.log = function(){}
Claro,
console.log()
irá reduzir o desempenho do seu programa, pois leva tempo computacional.Coloque este código no início do seu script para substituir a função console.log padrão por uma função vazia.
fonte
Qualquer chamada de função reduzirá ligeiramente o desempenho. Mas alguns
console.log
não devem ter nenhum efeito perceptível.No entanto, ele lançará erros indefinidos em navegadores mais antigos que não suportam
console
fonte
O impacto no desempenho será mínimo; no entanto, em navegadores mais antigos, ele causará erros de JavaScript se o console do navegador do usuário não estiver aberto
log is not a function of undefined
. Isso significa que todo o código JavaScript após a chamada console.log não será executado.Você pode criar um wrapper para verificar se
window.console
é um objeto válido e, em seguida, chamar console.log no wrapper. Algo simples como isso funcionaria:Aqui está um violino: http://jsfiddle.net/enDDV/
fonte
Fiz este teste jsPerf: http://jsperf.com/console-log1337
Parece não demorar mais do que outras chamadas de função.
E os navegadores que não possuem uma API de console? Se você precisar usar console.log para depuração, pode incluir um script em sua implantação de produção para substituir a API do console, como Paul sugere em sua resposta.
fonte
Eu faço isso dessa maneira para manter a assinatura original dos métodos do console. Em um local comum, carregado antes de qualquer outro JS:
Em seguida, em todo o código
fonte