如何使用performance.measureMemoryAPI进行前端可观察性?

如何解决如何使用performance.measureMemoryAPI进行前端可观察性?

我希望在固定的间隔内跟踪不同客户端上应用程序/网页的内存消耗。我的团队希望在了解是否有任何新功能推出会对应用程序占用的内存产生重大影响并回滚该功能(如果有)时遵守该指标。

我已经阅读了以下来源:

  1. https://web.dev/monitor-total-page-memory-usage/
  2. https://trackjs.com/blog/monitoring-javascript-memory/
  3. https://developer.mozilla.org/en-US/docs/Web/API/Performance/memory
  4. https://wicg.github.io/performance-measure-memory/
  5. https://github.com/WICG/performance-measure-memory

首先,如果我们看一下旧的API:window.performance 用户必须通过使用“ --enable-precise-memory-info”标志启动Chrome来启用精确的内存监视。对我来说,期望我们的用户使用此标志运行Chrome似乎不合理。

我还了解到,此API可能会过多或低估内存消耗,因为它会测量JavaScript堆的大小,如果有iframe或服务工作者启动不同的堆,或者有任何大的网页,这可能是不正确的在同一堆上。

由于这两个原因,对于在生产中的真实客户端上进行前端可观察性的目标,此选项不是有效的选项(imo)。

第二,如果我们查看新的API:performance.measureMemory()

只能通过原产地试用直到2021年1月(根据我签署令牌时表格告诉我的内容)。

除了在开发机上进行本地配置外,这似乎是目前实现以上目标的唯一选择(或者我误会了?)。

关于API的使用,我有两个问题:

  1. 2021年1月之后,我们还有其他选择吗(1月之后将不可用)吗?
  2. 我可以通过启用标志#enable-experimental-web-platform-features在本地进行测试,而不会出现任何问题。我有一个原始试用令牌,并且如果将其作为元标记添加到我的index.html中,我的用户是否需要在浏览器中启用任何标记才能让我们观察到此标记

解决方法

我联系了measure memory API w3c specification的编辑,他很友好,可以迅速答复我。

我现在将我在电子邮件中获得的答案发布在这里,以防其他人寻找它:

  1. 2021年1月之后,我们还有其他选择吗(1月之后将不可用)吗?

我们计划将其安装在Chrome 89中。出于安全原因,它将由self.crossOriginIsolated保护。起源试用版中当前提供的版本不需要跨域隔离。

  1. 我可以通过启用以下标志来在本地进行测试:#enable-experimental-web-platform-features没有任何问题。我有一个原始试用令牌,并且如果将其作为meta标签添加到index.html中,我的用户是否需要在浏览器中启用任何标志才能使我们观察到此标记?

如果添加元标记,则用户不需要任何标志。请注意,如果没有--enable-blink-features ='ForceEagerMeasureMemory',则可能需要一段时间(最多20秒),直到结果的承诺得以解决。这是因为API会等到下一个垃圾回收执行测量。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?