Javascript AFrame/Three.js:为什么在加载复杂的.obj文件时,内存中有这么多(js)字符串?

Javascript AFrame/Three.js:为什么在加载复杂的.obj文件时,内存中有这么多(js)字符串?,javascript,web,memory,three.js,aframe,Javascript,Web,Memory,Three.js,Aframe,我们有一个非常复杂的webscene,动态加载非常复杂的.obj和.mtl文件。 将没有任何这些对象的场景与内部有多个对象的场景进行比较后,我们注意到一种奇怪的行为: firefox内存堆显示大部分内存(对于5个对象大于100MB)用于JSString。当我们有复杂的对象文件时,内存的其余部分将用于自解释的对象。 但是为什么会有大量的字符串,我们能够减少它呢?AFrame是否将.obj文件的内容转换为字符串 我们考虑最小化.obj文件本身并减少顶点。也许你们中有人有过类似的经历和/或可以给我们建

我们有一个非常复杂的webscene,动态加载非常复杂的.obj和.mtl文件。 将没有任何这些对象的场景与内部有多个对象的场景进行比较后,我们注意到一种奇怪的行为:

firefox内存堆显示大部分内存(对于5个对象大于100MB)用于JSString。当我们有复杂的对象文件时,内存的其余部分将用于自解释的对象。
但是为什么会有大量的字符串,我们能够减少它呢?AFrame是否将.obj文件的内容转换为字符串

我们考虑最小化.obj文件本身并减少顶点。也许你们中有人有过类似的经历和/或可以给我们建议如何解决这个问题


提前感谢:-)

OBJ文件是基于文本的,不幸的是,它不是传输3D数据的特别有效的方法。A-Frame必须解析该文本才能将数据上传到GPU


如果您需要避免这种情况,我建议您尝试将OBJ文件转换为glTF之类的二进制格式(
.glb
)。您可以使用(CLI)或(web)进行转换。glTF文件加载速度更快。

OBJ文件是基于文本的,不幸的是,这不是传输3D数据的特别有效的方法。A-Frame必须解析该文本才能将数据上传到GPU



如果您需要避免这种情况,我建议您尝试将OBJ文件转换为glTF之类的二进制格式(
.glb
)。您可以使用(CLI)或(web)进行转换。glTF文件加载速度更快。

它必须获取并加载原始OBJ文件(文本),该文件是一个字符串。然后它解析,到对象。OBJ/MLT文件有多大?我们的文件大小在1到50MB之间是的,这是Don的答案。您看到的内存是获取并缓存(然后解析)的模型文件的文本。您可以尝试从three.js网络缓存中释放内存。(
删除三个.Cache.files['someurl']
)是的,我认为转换是唯一真正的选择。但是你的删除方法看起来也很有趣,我会尝试一下,谢谢!它必须获取并加载原始OBJ文件(作为文本),这是一个字符串。然后它解析,到对象。OBJ/MLT文件有多大?我们的文件大小在1到50MB之间是的,这是Don的答案。您看到的内存是获取并缓存(然后解析)的模型文件的文本。您可以尝试从three.js网络缓存中释放内存。(
删除三个.Cache.files['someurl']
)是的,我认为转换是唯一真正的选择。但是你的删除方法看起来也很有趣,我会尝试一下,谢谢!谢谢你的解释和建议。gltf文件的问题是,我们的设计器使用“Rhino”,并且只能以OBJ格式导出模型。但是转换是一个很好的观点。也许我们应该测试将OBJ文件转换为glTF并加载它们是否比只加载OBJ更快。你知道我们还能做些什么来减少字符串的使用吗?减少OBJ中的行数,减少顶点数,甚至操纵一些a帧函数?嗯,OBJ是一种糟糕的格式。它的材料处理非常有限。。打包资产需要多个文件。。它以文本为基础。。它不支持压缩。它不能真正处理分层/嵌套对象,而且由于不同的公司试图解决它的缺点,格式有无数种变化。GLTF OTH是一种非常现代的格式,专门为互联网内容交付而设计。它支持完整的场景描述和PBR等现代材质格式。它支持网格压缩,二进制风格允许您将所有相关模型组件打包到单个文件中。它还支持元数据,因此您可以在文件中存储自己的应用程序数据,从而允许单文件资产交换。我们越早采用它,所有建模软件就越早能够实现无缝的互操作。它还有两种风格,文本和二进制。。。因此,如果你真的需要文本数据来调试你的管道,它就在那里,并且是人类可读的。“也许我们应该测试一下是否将OBJ文件转换为glTF”-好吧,用JavaScript转换它们不会更快。但是,您可以提前脱机转换它们,然后在应用程序中使用glTF文件。也许Rhino将来会得到glTF的支持:谢谢你的解释和建议。gltf文件的问题是,我们的设计器使用“Rhino”,并且只能以OBJ格式导出模型。但是转换是一个很好的观点。也许我们应该测试将OBJ文件转换为glTF并加载它们是否比只加载OBJ更快。你知道我们还能做些什么来减少字符串的使用吗?减少OBJ中的行数,减少顶点数,甚至操纵一些a帧函数?嗯,OBJ是一种糟糕的格式。它的材料处理非常有限。。打包资产需要多个文件。。它以文本为基础。。它不支持压缩。它不能真正处理分层/嵌套对象,而且由于不同的公司试图解决它的缺点,格式有无数种变化。GLTF OTH是一种非常现代的格式,专门为互联网内容交付而设计。它支持完整的场景描述和PBR等现代材质格式。它支持网格压缩,二进制风格允许您将所有相关模型组件打包到单个文件中。它还支持元数据,因此您可以在文件中存储自己的应用程序数据,从而允许单文件资产交换。我们越早采用它,所有建模软件就越早能够实现无缝的互操作。它还有两种风格,文本和二进制。。。所以如果你真的需要