【问题标题】:Is there a JavaScript console limit in WebKit?WebKit 中是否有 JavaScript 控制台限制?
【发布时间】:2015-08-26 14:18:20
【问题描述】:

我想限制 JavaScript / Web Inspector 控制台中的内存或条目数。

它是否已经以某种方式受到限制(除了可用和可访问的内存)?

如果没有,是否可以只清除控制台日志中最旧的条目,同时保留较新的条目,例如 console.clear(10000)

在任何 JavaScript 引擎中是否存在限制或选择性clear() 之类的东西?

问题是我想在嵌入式 Web 视图中的单页应用程序中记录调试信息,但不想以这种方式不断泄漏内存。

【问题讨论】:

  • 您认为开发控制台的内存使用量有多大?
  • 只是一个提示:运行var i=0;setInterval(function(){console.log({ x : i++ });},5) 10000 次迭代会导致(对我而言)大约 80MB 的内存使用。对于相对微不足道的内存量来说,这是相当 大量 的日志。
  • 取决于你记录了多少,你记录了多少对象和其他大的东西,多久......如果一个应用程序运行了几天,几周或更长时间(你可以将计算机切换到待机和恢复工作),无需重新启动,或者如果我们记录更多数据,它可能就足够重要了。 10,000 并不多……想想 100,000 或 1,000,000。
  • 制作自己的记录器,根据要求转储到控制台
  • @arch 你不必克隆任何东西,因为 chrome 也不需要。如果您确实想保留对象内容,JSON.stringify 是您最好的选择。

标签: javascript qt webkit qtwebkit console.log


【解决方案1】:

虽然一些 JavaScript 开发工具可能会实现内部限制,但 WebKit 的 Web Inspector 显然没有,至少它没有向它公开任何文档化的接口。

所以基本上有两种可行的解决方案(除了修补WebKit或使用支持限制的工具),正如CerbrusJan Dvorak也提到的那样。

  • 为各种console 方法创建一个代理,以缓冲任何日志输出并仅在请求时转储,并限制内部缓冲区。 一个简单的环形缓冲区不是很快,因此另一种方法是使用两个缓冲区,当当前缓冲区已满时,旧的缓冲区将被丢弃并覆盖。 使用缓冲区的缺点是您不能立即展开对象,而只能在第一次访问时展开,如果它们被覆盖,可能会丢失重要的调试数据(Qt 5 的控制台在在日志记录期间扩展简单的对象和数组)。

  • 定期清除控制台以限制内存使用。 但是,控制台可能会在错误的时间被清除。

【讨论】:

    猜你喜欢
    • 2015-03-05
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    相关资源
    最近更新 更多