threejs 创建了10w条THREE.Line,销毁数据,等待了10秒

three + 高德地图,绘制路线,数据量比较大,路由切换时,需要把threejs创建的对象销毁。 简单粗暴的方法,直接卡顿几秒才可以切换,体验极差。

默认销毁代码

ini 复制代码
this.roadGroup.children.forEach(item => {
    this.roadGroup.remove(item);
    item.geometry && item.geometry.dispose();
});

此时卡顿的时候,打印了下children的长度接近10w个,销毁占用时间,阻塞了。

想到不耽误销毁数据,又不影响其他进程,那就异步分批销毁,比如每次销毁300个。这样不一直占用主线程,静默销毁数据,解决。

修改后的代码

ini 复制代码
const destroyRoadGroup = function (callback) {
    if (this.roadGroup) {
        let group = this.roadGroup;

        let index = 0;
        const batchSize = 300; // 每批处理多少个对象
        const delay = 1; // 每批之间延迟时间(ms)

        let children = group.children;
        const disposeBatch = () => {
            const end = Math.min(index + batchSize, children.length);
            for (let i = index; i < end; i++) {
                const obj = children[i];
                if (obj.geometry) {
                    obj.geometry.dispose();
                }
                if (obj.material) {
                    if (Array.isArray(obj.material)) {
                        obj.material.forEach((mat) => mat.dispose());
                    } else {
                        obj.material.dispose();
                    }
                }
            }

            index = end;

            if (index < children.length) {
                setTimeout(disposeBatch, delay); // 下一批
            } else {
                // 所有资源释放完毕
                group.clear(); // 清空 group 内容
                group = null;
                if (callback) callback();
            }
        };

        disposeBatch();
    }
};
相关推荐
0思必得022 分钟前
[Web自动化] Selenium处理动态网页
前端·爬虫·python·selenium·自动化
东东5161 小时前
智能社区管理系统的设计与实现ssm+vue
前端·javascript·vue.js·毕业设计·毕设
catino1 小时前
图片、文件的预览
前端·javascript
layman05283 小时前
webpack5 css-loader:从基础到原理
前端·css·webpack
半桔3 小时前
【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典
前端·css·html
AI老李3 小时前
PostCSS完全指南:功能/配置/插件/SourceMap/AST/插件开发/自定义语法
前端·javascript·postcss
_OP_CHEN3 小时前
【前端开发之CSS】(一)初识 CSS:网页化妆术的终极指南,新手也能轻松拿捏页面美化!
前端·css·html·网页开发·样式表·界面美化
啊哈一半醒3 小时前
CSS 主流布局
前端·css·css布局·标准流 浮动 定位·flex grid 响应式布局
PHP武器库3 小时前
ULUI:不止于按钮和菜单,一个专注于“业务组件”的纯 CSS 框架
前端·css
电商API_180079052473 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫