使用THRE.JS对象的全局数组的Javascript内存管理
Javascript Memory Management Using Global Arrays of THREE.JS Objects
我有一个问题困扰了我一段时间。
我正在使用three.js webgl库来渲染一个具有许多纹理和网格的大型场景。
这个问题不一定与webgl绑定,而是更多的javascript数组和内存管理。
我基本上是这样做的:
var modelArray = [];
var model = function(geometry,db_data){
var tex = THREE.ImageUtils.loadTexture('texture.jpg');
var mat = new THREE.MeshPhongMaterial({map:tex})
this.mesh = new THREE.Mesh(geometry,mat);
this.db = db_data;
scene.add(this.mesh);
};
function loadModels(model_array){
for(i=0;i<geometry.length;i++){
modelArray.push(new model(model_array[i]['geometry'],model_array[i]['db_info']));
}
}
loadModels();
我在这里效率低吗?由于我已经将网格加载到场景和数组中,所以我实际上是在将使用的内存量增加一倍吗。或者数组中的模型(特别是model.mesh)对象只是指向一个单一的内存块?
我应该只创建一个网格id数组并引用场景对象,还是可以将网格添加到场景和数组中?
提前谢谢,我希望我已经足够清楚了。
我想到的主要问题是:
var tex = THREE.ImageUtils.loadTexture('texture.jpg');
var mat = new THREE.MeshPhongMaterial({map:tex})
如果每次创建新模型时都加载相同的纹理,这可能会产生大量开销(而且速度也可能相当慢)。我会在循环外加载一次你需要的纹理和相应的材料。
modelArray
是一个普通model
对象的列表,每个对象都有一个指向相应mesh
对象(和db
对象)的指针。scene
有一个指向相同mesh
对象的指针,因此不会通过克隆网格来分解内存使用。
您的内存使用可能只是因为网格几何体占用了大量内存。试着一个接一个地加载你的模型,同时观察内存使用情况;也许你有一个出乎意料的详细。
相关文章:
- 简单对象的Javascript内存泄漏
- Javascript内存分配
- 跟踪 JavaScript 内存泄漏的工具
- 页面刷新后javascript内存泄漏有问题吗?为什么?
- Javascript内存游戏-图像交换
- javascript内存问题
- 在 KnockoutJS 中更改模型数据时出现 Javascript 内存泄漏
- 有没有办法在测试中找到JavaScript内存泄漏
- for 循环中的 JavaScript 内存使用情况
- Javascript 内存泄漏时使用画布和 blob
- 在 express/node.js API 中进行高效的服务器端 JavaScript 内存管理
- Javascript内存管理:删除和拼接
- Javascript内存管理(requestAnimationFrame回调)
- JavaScript内存泄漏
- 捕获单页应用程序的JavaScript内存泄漏
- JavaScript内存化只能用于缓存返回的结果吗
- 使用THRE.JS对象的全局数组的Javascript内存管理
- JavaScript 内存泄漏解释
- 在大型集合和回调上使用map()的Javascript内存消耗
- Javascript:内存控制-关注它's特别使用