Stripe Checkout 是否存在内存泄漏问题?

8
我看到的问题是,当您使用Stripe的规范“Custom”指南将Stripe Checkout加载到页面中,进行配置,然后打开和关闭几次时,浏览器内存使用量不断增加。它有时会释放一点,但残留物始终增长。在长时间运行的页面/SPA上,最终会变得缓慢。

  1. 使用--enable-precise-memory-info标志启动Google Chrome(无论是否使用此标志,问题都会发生)
  2. 复制其网站上的“Custom”示例:https://stripe.com/docs/checkout#integration-custom (或使用自己的设置,结果相同)。
  3. 单击“购买”按钮(或触发stripeInstance.open(cfg)),调整弹出窗口,然后关闭。
  4. 重复第3步,逐渐观察内存

您可以使用memory-stats.js观察内存,或者只需在(Chrome)控制台中运行:

performance.memory.usedJSHeapSize

我相信这一定是关于“我”而不是Stripe。他们不可能在openclose事件上泄露得如此严重,对吧?

编辑:这是一个 JS Fiddle,它直接复制了他们的演示代码:https://jsfiddle.net/p1Lfuewt/

还有一个 5 秒间隔的内存截图,基本上只是通过点击“购买”打开和关闭他们的小部件(不知道那个 Promise 错误是怎么回事,那是他们的问题):

Memory leak


你能否附上一个 jsfiddle 来解释这个问题?这样调试会更容易。 - kichik
@kichik 这是 JSFiddle 的链接 https://jsfiddle.net/p1Lfuewt/ - papercowboy
2个回答

0

简短的回答,是的。

更长的答案是,看起来确实是这样。附上的 JSFiddle example 复制了 Stripe canonical docs,通过简单地打开和关闭 Stripe 的小部件就能轻松复制内存崩溃的问题。

handler.open({
  name: 'Stripe.com',
  description: '2 widgets',
  zipCode: true,
  amount: 2000
})
// Repeat for 

我们实施的一个(可怕的)解决方法是跟踪打开+关闭事件的数量,并在达到这些级别的边缘情况下强制执行X个事件后进行硬重载。

你已经将它报告为一个 bug 了吗?如果是,请提供问题链接;如果没有,请立即报告。 - Bergi
@Bergi 有任何想法在哪里做到这一点吗?https://github.com/stripe 对于 Checkout 没有任何内容(它没有列在他们的开源网站上),而 Checkout 网站也没有我能找到的反馈机制。 - papercowboy
好的,那个支持很差。我只能找到 https://support.stripe.com/,它提到了一个 IRC 频道供开发人员使用。 - Bergi
https://stripe.com/docs/checkout#what-browsers-does-checkout-support提到了通用的电子邮件联系方式。 - Bergi

0

无法确定,但他们可能会保留一些永远不会释放的数据,或者可能是Chrome的JavaScript引擎试图将所有内容缓存以备将来使用。您应该尝试让页面保持原样一段时间,看看缓存内存是否会减少。


是的,这有点像内存泄漏的定义。感谢您的建议(我们的测试显示即使过了一段时间,内存也没有下降太多)。请随意进行测试 https://jsfiddle.net/p1Lfuewt/。 - papercowboy
我想说的是,也许不仅仅是条纹的错。 - LeDYoM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接