【问题标题】:How do I run a Performance Trace multiple times in Parallel?如何并行运行多次性能跟踪?
【发布时间】:2019-10-13 09:12:55
【问题描述】:

我有一个名为 my_trace 的 Firebase 性能监控跟踪。

现在,我在加载图像时开始跟踪:

void loadImage() {
  final Trace trace = performance.newTrace("my_trace");
  trace.start();
  // ... (loading that happens asynchronously)
  trace.stop();
}

当我尝试加载单个图像时,这可以正常工作,但是,在我的应用程序中,我需要并行加载许多图像。
这意味着当我加载我的图像时会报告以下错误:

Trace 'my_trace' has already started, should not start again!

当我想记录每个加载过程的性能时,如何正确启动多次并行跟踪?

注意:我不能使用HTTPMetric,因为加载跟踪还包含图像转换,而不仅仅是下载。

【问题讨论】:

    标签: android firebase flutter firebase-performance


    【解决方案1】:

    您可以手动记录它,方法是自己存储开始时间,然后只记录持续时间。这应该可以。

    参考:https://firebase.google.com/docs/reference/js/firebase.performance.Trace#record

    【讨论】:

    • 很遗憾,安卓平台不支持:(
    【解决方案2】:

    正如错误消息所述,任何时候都只能有一个具有唯一名称的跟踪处于活动状态。因此,您要么必须等待第一个 my_trace 完成,然后再开始第二个(按顺序而不是并行运行),要么必须为每个跟踪生成一个唯一名称。

    鉴于 API 的结构,应该可以允许多个同名跟踪并行运行。如果您认为 Firebase 应该考虑允许这样做,我建议您 file a feature request

    【讨论】:

      【解决方案3】:

      已经允许跟踪并行运行。跟踪不按跟踪名称索引。只要跟踪对象是唯一的,您就应该能够并行运行跟踪。不能重复使用相同的跟踪对象。

      例如:(使用跟踪对象的方式不正确)

      final Trace trace = performance.newTrace("my_trace");
      trace.start();
      trace.start(); // This would not work. Fails with the error message that the trace is already started.
      // ... (loading that happens asynchronously)
      trace.stop();
      

      例如:并行多次使用相同的跟踪名称的正确方法。

      final Trace trace1 = performance.newTrace("my_trace");
      final Trace trace2 = performance.newTrace("my_trace");
      trace1.start();
      trace2.start();
      // ... (loading that happens asynchronously)
      trace1.stop();
      trace2.stop();
      

      【讨论】:

      • 这对我来说根本不是真的。
      猜你喜欢
      • 2019-02-09
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多