javascript - 不推荐使用 indexedDB 缓存音频文件?

标签 javascript caching local-storage browser-cache indexeddb

我想使用 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/

相关文章:

Android:在 Activity 之间共享图像缓存

javascript - Firefox 中本地存储 key 验证失败

javascript - 使用 JavaScript 的 `window.cookie` 持久化 CSS 状态

jquery - 从 localStorage 中删除项目

javascript - 声音淡出,但不淡入——为什么?

javascript - 如何将 Dart 编译为 JavaScript v 1.3?

javascript - 在一定比例的窗口大小上不断更改 div 大小

laravel - 如何在 Laravel 中使用原子锁?

c# - 使用 OWIN 静态文件时配置客户端缓存

javascript - 使多个 iframe 像普通窗口一样拖动、调整大小和最小化