提问人:willstocks_ 提问时间:2/6/2019 更新时间:2/6/2019 访问量:200
console.log/warn/error - 原生的、普通的 JavaScript 性能更高的替代方案?
console.log/warn/error - native, vanilla JavaScript more performant alternative?
问:
我做了一些研究,我发现的大部分都是几年前的。我是JS的新手,我正在逐渐积累我的知识。
Console.log() 是一个非常有用的工具,但我非常警惕它通常很差的性能(https://jsperf.com/console-log1337/16 或 https://jsperf.com/console-log1337/33 作为基本示例),以及糟糕的声誉。
如果我需要在生产应用程序/网站中留下 console.log() 样式的错误消息,是否有原版JS原生的性能更高的替代方案(没有框架/库)?
我最初的想法是将所有日志项推送到一个数组中,稍后可以收集该数组(如果需要),但是似乎不能很好地与 Promise.all() 结合使用 - 而不是说,数组中有 10 个项目,而是返回一个带有最后一个值的数组,或者 10 个单独的数组。
是否有原生的或最推荐的替代方案(欣赏这是对“意见”开放的 - 我不确定还能如何措辞!
Ps - 为缺乏格式而道歉......移动!
答:
...性能不佳
其中一个测试用例将调用空函数与调用 进行了比较。JIT 编译器可能会内联一个空函数,因此您实际上根本没有将任何代码与 进行比较。可以肯定的是,根本没有代码会更快。console.log
console.log
由于日志记录,我从未遇到过任何(明显的)延迟,除非您在渲染循环中记录或非常非常频繁地执行的任何内容。
...名声不好
认真地?在我看来,与其他语言相比,JS 有很好的调试方式(可能是因为 JS :)有最好的错误),因为你可以“实时”查看嵌套结构,你可以在断点处停止执行,你可以准备代码进行调试与语句,你可以转储整个内存,可视化 GC 行为、热函数等等。是的,所有这些功能的性能都较低,但是控制台的性能相当不错。debugger;
有没有 vanilla JS 原生的性能更高的替代方案(没有框架/库)?
The logging is directly written into the engine executing JavaScript, that means it can access a lot of things that you cannot access through JS, also native code will always be faster than compiled JavaScript (or equally fast, but no one can guarantee that).
In the event I need to leave console.log() style error messages in a production application/website ...
And who should read this logs? Do you want to ask your client to look into the console in the case of an error?
Logging in Production should not log everything you use through debugging, but just enough that you can track down errors, so some breadcrumbs to find out where the error occured (e.g. "menu open"), and the errors themselves.
If you don't want to write production logging by yourself, have a look at sentry for JS
评论
The logging is directly written into the engine executing JavaScript, that means it can access a lot of things that you cannot access through JS, also native code will always be faster than compiled JavaScript.
+1 for this line
评论