gpt4 book ai didi

javascript - MobileSafari 因内存消耗过多而崩溃

转载 作者:行者123 更新时间:2023-11-29 10:52:12 26 4
gpt4 key购买 nike

我目前正在开发一个使用 SoundJS 的应用程序。在发现代码库无法在 iPad 上正常工作后,我继承了代码库 - 问题是它创建了大约 16 个 MP3 文件的 list ,总计约 35.7mb。这显然会导致 iPad 出现问题,并在 16mb 时崩溃。

根据诊断和使用日志,崩溃日志显示这是由于每个进程限制造成的。

我已经深入研究了 SoundJS 的底层结构,可以看到它的默认行为是通过 XHR 使用 WebAudio。然后将其解析为 ArrayBuffer(或 ArrayBuffer 数组)。

目前这意味着,在预加载之后,我们在 ArrayBuffers 中有 35.7mb 的数据 - 不好。这是缩小文件大小之后!任何时候都只会播放一个音频文件——应用程序的每个部分都有一个文件; 除了在过渡期间,两个人可能会淡入彼此

有没有一种简单的方法可以从底层结构中释放资源?即 ArrayBuffers? 据我所知,之前的开发人员确实尝试使用对 SoundJS .removeSound() 方法的调用来释放一些内存,但结果并非如此好。

目前我正在考虑创建一个对象作为所有文件名的注册表,而不是通过 list 加载它们 - 单独加载它们并在使用后立即删除它们。但是,我预计这会导致在播放过程中将一个文件缓和到另一个文件中而令人头疼。此外,我预计这实际上可能会导致类似于图像的问题,其中 MobileSafari 没有释放分配给图像的内存 - 即使在删除后也是如此。 (正确的解决方法是在删除之前重置图像元素的“src”属性)

有谁知道在针对 iPad 的网络应用程序中加载如此大量数据的可靠解决方法?

最佳答案

测试 SoundJS 显示了 iPad 未正确释放内存的一些问题。不幸的是,从图书馆的 Angular 来看,我们对此无能为力。

如果您一次只播放 1 个声音,我建议您只在需要时加载它们,并在使用后删除它们。您会发现最大的问题是等待声音加载,因此您可能希望对您希望使用的下一个声音进行智能预加载(这意味着您始终加载当前和下一个声音)。理论上,这可以让您保持在 iPad 16 mb 内存限制以下。但是,如果 iPad 拒绝释放内存,您可能需要引入某种形式的缓存清除。

另一种解决方案是通过有损压缩来减小文件大小,这听起来已经有人尝试过了。

第三种选择可能是实现某种形式的流式音频,但这不是 SoundJS 可以提供的帮助。

希望对您有所帮助。

关于javascript - MobileSafari 因内存消耗过多而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19983146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com