You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

渲染新bootstrap tooltips后是否需销毁旧数组以节省浏览器内存?

问题解答

需要清理旧的tooltip实例,但是你给出的清理代码写法不正确,无法达到释放内存的效果。

原因说明

  • 你写的delete tooltip逻辑无效:delete操作符仅用于删除对象的属性,无法直接销毁类实例,也不会解除实例持有的DOM引用、解绑事件监听,这部分占用的内存依然不会被垃圾回收机制回收。
  • 旧tooltip实例确实需要主动清理:Bootstrap的Tooltip实例会持有对应触发元素的DOM引用、还会绑定元素级事件监听,哪怕你已经清空了搜索容器的DOM,只要tooltips数组还持有旧实例的引用,这部分内存就无法被释放,多次重复搜索后会积累形成内存泄漏。

正确实现代码

调用Bootstrap Tooltip原生提供的dispose()方法销毁实例,再重置tooltips数组即可:

let searchAndDisplayResults = (function () {
    let tooltips;
    return (key) => {
        // 先销毁旧的tooltip实例
        if (tooltips?.length) {
            tooltips.forEach(tooltip => tooltip.dispose());
            tooltips = null;
        }
        // 搜索结果容器
        let searchContainer = $('.search-results-container');
        // 清空旧内容
        searchContainer.html('');
        // 获取搜索结果信息数组
        let searchedResultsArray = getSearchedResults(key);
        // 渲染搜索结果到页面
        searchedResultsArray.forEach((ele) => {
              searchContainer.append(`<div>${ele}</div><i class='bi-plus' data-bs-toggle="tooltip" title="该按钮的提示信息"></i>`);
        })
        // 初始化新的tooltip
        tooltips = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map(tooltipTriggerEl => { return new bootstrap.Tooltip(tooltipTriggerEl) });
    }
})();

dispose()方法会自动解绑所有事件监听、清除内部持有的DOM引用,执行之后旧实例就可以被浏览器垃圾回收机制正常回收,不会产生内存残留。

内容的提问来源于stack exchange,提问作者Paper_Folding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:39:02