Это вопрос передового опыта, и если то, что я сделал, так или иначе очень глупо.
Моя цель
- Сделать клиента HTML side musi c проигрыватель, который воспроизводит аудио с клиентского компьютера.
- Пользователь должен иметь возможность «загружать» песни и затем воспроизводить их на веб-странице, не отправляя их на сервер.
- Когда пользователь закрывает страницу и открывает ее снова «загруженные» песни все еще должны быть там, без отправки с сервера (чтобы пользователю не приходилось загружать их снова)
У меня вопрос НЕ как это сделать, я Я уже создал 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.
Мои мысли о том, почему это плохо:
- Выбранный звук теперь дважды сохраняется на компьютере.
- Кэш-память может быть заполнена (подробнее об этом ниже)
- Хранилище кэша может быть очищено вне контроля веб-страниц.
Относительно номера 2. Мне удалось загрузить и сохранить в моем кэше 12 песен общей продолжительностью более 10 часов при использовании обоих Chrome и Fire Fox на Манджаро Linux. Таким образом, кеш, похоже, заполняется не так легко.
Еще одна вещь, которую я заметил, когда я смотрел в консоли разработчика, на вкладке «Приложение» и в разделе «Хранилище кеша», я мог видеть песни, перечисленные в кеше, Content- тип "application / json", а "Content-Length" равен 0 для всех кэшированных элементов! Может быть, поэтому кеш кажется бесконечным?
Так что вы думаете? Есть ли причина, почему это было бы очень плохо? И если так; Почему? Есть ли другой лучший способ?
(Кроме того, почему, по-видимому, возможно сохранить бесконечное количество JSON -данных в Cache Storage? Это ошибка или особенность?)
Многое спасибо за ваш отзыв!