释放ThreeJS应用程序的内存

时间:2017-06-01 10:32:07

标签: javascript memory three.js

我目前在使用ThreeJS应用程序时遇到内存问题。

我知道有关此问题的几个问题:

使用我制作的以下打字稿功能处理我的对象:

__directGeometry

但是,当我使用Chrome Dev Tools堆积快照时,我仍然有大量的数据:

  • 阵列
  • Vector2(uvs in geometry,...)
  • Vector3(faces中的顶点,faces中的法线,geometry中的vertexColors,...)
  • Face3(面向__directGeometry
  • 颜色(attributes中的颜色,...)
  • JSArrayBufferData(颜色,正常,位于geometry的{​​{1}},...)

由于内存中的所有数据,我的应用程序被iOS上的Jetsam杀死,请参阅:Jetsam kills WebGL application on iOS

我怀疑当我要求时,库中的某些数据没有被释放。

1 个答案:

答案 0 :(得分:0)

尝试处理所有事情。我正在使用这个片段一段时间。它处理材料,纹理,3d对象。它遍历数组和普通对象。

let dispose = function(o) {
    try {
        if (o && typeof o === 'object') {
            if (Array.isArray(o)) {
                o.forEach(dispose);
            } else
            if (o instanceof THREE.Object3D) {
                dispose(o.geometry);
                dispose(o.material);
                if (o.parent) {
                    o.parent.remove(o);
                }
                dispose(o.children);
            } else
            if (o instanceof THREE.Geometry) {
                o.dispose();
            } else
            if (o instanceof THREE.Material) {
                o.dispose();
                dispose(o.materials);
                dispose(o.map);
                dispose(o.lightMap);
                dispose(o.bumpMap);
                dispose(o.normalMap);
                dispose(o.specularMap);
                dispose(o.envMap);
            } else
            if (typeof o.dispose === 'function') {
                o.dispose();
            } else {
                Object.values(o).forEach(dispose);
            }
        }
    } catch (error) {
        console.log(error);
    }
};