Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

checkOpen 函数实现可能存在内存泄漏问题 #152

Open
Woods686868 opened this issue Mar 13, 2024 · 0 comments
Open

checkOpen 函数实现可能存在内存泄漏问题 #152

Woods686868 opened this issue Mar 13, 2024 · 0 comments

Comments

@Woods686868
Copy link

  • npm 版本号:

  • 配置 Option:

const option = {
  scheme: {},
  outChain: {},
  intent: {},
  universal: {},
  appstore: '',
  yingyongbao: '',
  fallback: '',
};
  • 机型、系统、APP:

  • 遇到的问题及复现步骤:

/**
 * 检测是否唤端成功
 * @param cb - 唤端失败回调函数
 * @param timeout
 */
export function checkOpen(failure: () => void, timeout: number): void {
  const timer = setTimeout(() => {
    const pageHidden = isPageHidden();
    if (!pageHidden) {
      failure();
    }
  }, timeout);


  if (typeof visibilityChange !== 'undefined') {
    // 
    document.addEventListener(visibilityChange, () => {
      clearTimeout(timer);
    });
  } else {
    window.addEventListener('pagehide', () => {
      clearTimeout(timer);
    });
  }
}
  • 期望的效果:

根据你提供的代码,没有明显的内存泄漏问题。然而,代码中的事件监听器可能会导致潜在的内存泄漏问题,具体取决于代码的上下文和如何使用这段代码。

在这段代码中,checkOpen 函数会在指定的超时时间后执行回调函数 failure,除非页面被隐藏(isPageHidden 函数的实现未提供)。在添加了事件监听器的情况下,当页面被隐藏或不可见时,会清除定时器,避免执行回调函数。

然而,如果你多次调用 checkOpen 函数,并且每次调用都会添加新的事件监听器,而没有在不再需要时清除监听器,那么就可能会导致内存泄漏。这是因为事件监听器仍然保留对回调函数和相关作用域的引用,导致这些对象无法被垃圾回收。

为避免潜在的内存泄漏问题,建议在不再需要时手动移除事件监听器。可以在适当的时候调用 removeEventListener 方法,以确保事件监听器被正确清除。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant