代码之家  ›  专栏  ›  技术社区  ›  papercowboy

条带签出是否泄漏内存?

  •  8
  • papercowboy  · 技术社区  · 7 年前

    我看到的问题是 Stripe Checkout 使用他们规范的“自定义”指南进入一个页面,对其进行配置,然后打开和关闭几次,浏览器内存使用会不断跳跃。它有时会释放一点,但残余物总是在增长。在一个长期存在的页面/SPA上,最终会出现爬行现象。

    1. 使用启动Google Chrome --enable-precise-memory-info 标志(使用或不使用此标志时发生问题)
    2. 在其网站上复制“自定义”示例: https://stripe.com/docs/checkout#integration-custom (或使用您自己的设置,结果相同)。
    3. 单击“购买”按钮(或触发 stripeInstance.open(cfg) ),摆弄弹出窗口,关闭。
    4. 重复步骤3,逐渐观察记忆

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

    performance.memory.usedJSHeapSize
    

    我确信这一定是“我”,而不是条纹。他们不可能泄漏得这么厉害 open close 事件对吗?


    编辑:这里有一个JS FIDLE,可以复制他们的演示代码: https://jsfiddle.net/p1Lfuewt/

    以及5秒间隔的内存屏幕截图,基本上只需单击“购买”即可打开和关闭其小部件(不知道承诺错误是什么,就是他们):

    Memory leak

    2 回复  |  直到 7 年前
        1
  •  0
  •   LeDYoM    7 年前

    不可能确定,但他们可能会保留一些永远不会释放的数据,也可能是chrome的java脚本引擎试图为将来缓存所有内容。您应该试着将页面单独放置一段时间,看看缓存内存是否下降。

        2
  •  0
  •   papercowboy    7 年前

    简单回答,是的。

    答案越长越好 似乎 喜欢。附件 JSFiddle example 复制 Stripe canonical docs ,并且在打开和关闭Stripe的小部件的简单操作上复制内存耗尽的问题是微不足道的。

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

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