Stripe Checkout泄漏内存吗?

pap*_*boy 9 javascript memory-leaks google-chrome stripe-payments

我看到的问题是,当您使用规范的"自定义"指南将Stripe Checkout加载到页面中,对其进行配置,然后打开和关闭它几次,浏览器内存使用量会不断跳跃.有时,sorta会稍微释放,但残留总是会增长.在一个长期存在的页面/ SPA上,最终会有东西爬行.

  1. 使用--enable-precise-memory-info标记启动Google Chrome (无论是否带有此标记,都会出现问题)
  2. 复制其网站上的"自定义"示例:https://stripe.com/docs/checkout#integration-custom(或使用您自己的设置,结果相同).
  3. 点击"购买"按钮(或触发你的按钮stripeInstance.open(cfg)),摆弄弹出窗口,关闭.
  4. 重复步骤3,逐渐观察记忆

您可以使用memory-stats.js或仅在(Chrome)控制台中运行来观看内存:

performance.memory.usedJSHeapSize
Run Code Online (Sandbox Code Playgroud)

我确信这必须是"我"而不是条纹.他们不会泄漏如此糟糕的事件openclose事件吗?


编辑:这是一个JS小提琴,它可以复制他们的演示代码:https://jsfiddle.net/p1Lfuewt/

还有一个5秒间隔的内存屏幕截图,基本上只需点击"购买"即可打开和关闭它们的小部件(不知道那个承诺错误是什么,就是这些):

内存泄漏

pap*_*boy 0

简短的回答是,是的。

更长的答案是,看起来确实如此。附加的JSFiddle 示例复制了Stripe 规范文档,并且在打开和关闭 Stripe 小部件的简单操作中复制内存耗尽问题是微不足道的。

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

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