Stripe Checkout泄漏内存吗?

时间:2018-01-16 18:29:56

标签: javascript google-chrome memory-leaks 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,逐渐观察记忆
  5. 您可以使用memory-stats.js或仅使用(Chrome)控制台观看内存:

    performance.memory.usedJSHeapSize
    

    我确信这必须是"我"而不是条纹。他们绝不会在openclose事件中泄露这么糟糕吗?

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

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

    Memory leak

2 个答案:

答案 0 :(得分:0)

不可能确切地知道,但是他们可能会保留一些从未被释放的数据,或者可能是chrome的java脚本引擎,试图将所有内容缓存到未来。您应该尝试单独离开页面一段时间,看看缓存是否出现故障。

答案 1 :(得分:0)

简短的回答,是的。

答案越长,确定似乎就像它一样。附件JSFiddle example复制了Stripe canonical docs,并且可以轻松复制打开和关闭Stripe小部件的简单行为中的内存问题。

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

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