我想使用 indexedDB 来存储我从 CDN 获得的音频文件 - 以改善用户体验,并且不要给我的 CDN 带来如此沉重的负载。这通常推荐用于 mp3 之类的文件吗?有什么问题吗?
我找到了一些关于在 indexedDb 中存储音频和图像的教程,但我之前也在此处寻找答案,and here somebody says that indexedDB is not generally recommended to store audio files . - 这是真的?遗憾的是,该人士没有给出任何进一步的解释。所以如果这是真的,我想知道为什么。
非常感谢。
最佳答案
您可以在 IndexedDB 中存储二进制数据,但需要注意平台限制。
我所知道的主要平台限制在此 Best Practices 中进行了描述Google 工程师的文章 - 存储 Blob
类型的简单方法在 iOS 上不起作用 - 您需要使用一对函数转换为 ArrayBuffer
:
function blobToArrayBuffer(blob) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.addEventListener('loadend', (e) => {
resolve(reader.result);
});
reader.addEventListener('error', reject);
reader.readAsArrayBuffer(blob);
});
}
function arrayBufferToBlob(buffer, type) {
return new Blob([buffer], {type: type});
}
许多针对存储的警告来自(不正确的)假设,您必须将数据转换为 base-64 编码的 ASCII,这很慢并且会增加所需的空间量。
关于javascript - 不推荐使用 indexedDB 缓存音频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64424256/