【问题标题】:Is there a performance penalty to using a pipeline operator ponyfill instead of .pipe in RxJS在 RxJS 中使用管道运算符 ponyfill 而不是 .pipe 是否会降低性能?
【发布时间】:2021-02-04 22:50:18
【问题描述】:

我使用管道操作符 ponyfill,它只是一个实用函数applyPipe,因此applyPipe(x, a, b) 等价于b(a(x))x |> a |> b(在此示例中,有两个函数,但实际上它可以是任意数字的功能)。在fp-ts 中,此函数称为pipe

在我的例子中,该函数被实现为

export const applyPipe = (
  source,
  ...project
) => {
  for (const el of project) {
    source = el(source);
  }
  return source;
};

(您也可以使用.reduce 来实现它)。

这个函数可以用来组合可观察的操作符,所以applyPipe(timer(500), delay(500))等价于timer(500).pipe(delay(500))。问题是,使用此类函数代替 .pipe 方法是否会降低性能?

【问题讨论】:

    标签: rxjs


    【解决方案1】:

    理论上,我认为这样做不会出现重大问题或性能下降(除了通过使用您的函数添加额外的步骤并复制可观察/对象引用以在函数中处理它)。您将只复制可观察的参考(而不是可观察的排放),因此出于性能原因它应该不是什么大问题。 此外,就性能而言,通常预计 ponyfill/polyfill 与实际实现相同或最差。请记住,扩展运算符只会复制对象的属性(而不是任何嵌套属性)。

    我会在该 ponyfill 函数中留下一些评论,以便其他使用您的代码库的开发人员更容易理解。

    【讨论】:

      猜你喜欢
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 2022-10-07
      • 2016-03-08
      • 1970-01-01
      • 2013-05-22
      • 2020-09-04
      相关资源
      最近更新 更多