JS рекомендация: следует ли использовать Cache Storage для хранения аудио на стороне клиента? - PullRequest
0 голосов
/ 24 марта 2020

Это вопрос передового опыта, и если то, что я сделал, так или иначе очень глупо.

Моя цель

  1. Сделать клиента HTML side musi c проигрыватель, который воспроизводит аудио с клиентского компьютера.
  2. Пользователь должен иметь возможность «загружать» песни и затем воспроизводить их на веб-странице, не отправляя их на сервер.
  3. Когда пользователь закрывает страницу и открывает ее снова «загруженные» песни все еще должны быть там, без отправки с сервера (чтобы пользователю не приходилось загружать их снова)

У меня вопрос НЕ как это сделать, я Я уже создал Proof Of Concept Musi c Player (PO C MP), который делает именно это (объяснено ниже).

Мой вопрос заключается в том, является ли что-то, что я сделал, плохо или нет глупо в любом случае!


Пример на jsfiddle:

https://jsfiddle.net/n5c8bo1q/


Объяснение:

Итак, PO C MP позволяет пользователю выбирать аудиофайлы с помощью

<input type="file" id="files" name="files[]" multiple />

Затем PO C MP читает аудио с FileReader, и в reader.onload-event он создает большой двоичный объект из event.target.result (называемый songData)

var blob = new Blob([ JSON.stringify( songData ) ], { type : 'application/json' });

и сохраняет большой двоичный объект в пользовательское Cache Storage в объекте Response:

return caches.open( nameOfCache ).then(  cache => {
    return cache.put( songKey, new Response( blob ) );
} );

Когда страница перезагружается, PO C MP просто отображает все ключи в кеше в виде кнопок, а когда нажата клавиша-клавиша, songData извлекается из кеша, например

songData = await caches.match( songKey ).then( cachedResponse => cachedResponse.json() );

, а затем для атрибута аудио-тега sr c устанавливается значение songData.


Мои мысли о том, почему это плохо:

  1. Выбранный звук теперь дважды сохраняется на компьютере.
  2. Кэш-память может быть заполнена (подробнее об этом ниже)
  3. Хранилище кэша может быть очищено вне контроля веб-страниц.

Относительно номера 2. Мне удалось загрузить и сохранить в моем кэше 12 песен общей продолжительностью более 10 часов при использовании обоих Chrome и Fire Fox на Манджаро Linux. Таким образом, кеш, похоже, заполняется не так легко.

Еще одна вещь, которую я заметил, когда я смотрел в консоли разработчика, на вкладке «Приложение» и в разделе «Хранилище кеша», я мог видеть песни, перечисленные в кеше, Content- тип "application / json", а "Content-Length" равен 0 для всех кэшированных элементов! Может быть, поэтому кеш кажется бесконечным?


Так что вы думаете? Есть ли причина, почему это было бы очень плохо? И если так; Почему? Есть ли другой лучший способ?

(Кроме того, почему, по-видимому, возможно сохранить бесконечное количество JSON -данных в Cache Storage? Это ошибка или особенность?)

Многое спасибо за ваш отзыв!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...