Лучший подход к обслуживанию изображений для мобильных устройств - PullRequest
0 голосов
/ 30 апреля 2019

В настоящее время я работаю над серверной системой, которая поддерживает профиль для пользователей приложения.Система интегрирована с приложениями Android и iOS.В мобильном приложении есть страница профиля для отображения изображения профиля пользователя, кнопки для изменения изображения и другие подробности.

Изображения должны быть в формате JPEG или PNG и иметь максимальный предел размера 2MB.

В настоящее время мой сервер загружает и обслуживает изображение в следующемпуть:

  1. Когда изображение отправляется как multipart/form-data, мета изображения извлекается, вставляется или обновляется (если он уже существует) в SQL database, и изображение сохраняется в каталоге ресурсов..
  2. Когда изображение запрашивается в HTTP GET, оно отправляется обратно в кодировке Base64 data-uri;в браузере я могу отобразить его как часть атрибута src HTML img.

Теперь разработчик мобильного приложения попросил меня изменить процесс обслуживания (загрузки), как описано в (2).В частности, они попросили ответить ссылкой на статическое изображение на сервере вместо закодированного Uri.

Теперь я прочитал несколько хороших советов по использованию data-uri и как это делает доставку изображений более переносимой (я могу поддерживать как JPEG, так и PNG без каких-либо изменений для поддержки различных форматов набраузер);с другой стороны, я также читал, как кодированные изображения Base64 могут увеличиваться в размере по сравнению с исходным двоичным изображением, как увеличивается полезная нагрузка отклика, что означает больше при обработке полета и может оказаться медленным в мобильной сети.

Теперь я не уверен, какой подход наиболее подходит.Мобильные приложения должны отображать изображение только при нажатии на профиль.Они могут либо сохранить изображение как данные приложения в мобильной файловой системе, либо извлекать изображение каждый раз и отображать его.

Будет замечательно, что если кто-то может помочь, ответьте на следующие вопросы:

  1. Должен ли я продолжать обслуживать изображения как data-uri или я должен изменить бэкэнд для предоставления ссылки настатический файл?
  2. Есть ли какие-либо различия в производительности, основанные на моем случае использования, между любым из подходов?
  3. Для мобильного приложения оно более благоприятно (под этим я подразумеваю проще?реализовать в коде и поддерживать), использовать ссылки на статические файлы по сравнению с data-uri?

1 Ответ

1 голос
/ 30 апреля 2019

Должен ли я продолжать обслуживать изображения в качестве data-uri или я изменяю серверную часть для обслуживания ссылки на статический файл?

Я бы продолжал обслуживать изображения в качестве data-uri,Это означает, что вы, вероятно, извлекаете данные из большого двоичного объекта в базе данных и просто отправляете их вместе.Это позволяет обновлять данные в базе данных, не беспокоясь об обновлении статических изображений на стороне сервера.

Существуют ли различия в производительности, основанные на моем случае использования, между любым из подходов??

Статическое изображение может быть быстрее, поскольку, как вы сказали, изображения base64 могут быть больше.Но это может быть .Вы, вероятно, должны ограничить изображения до максимального размера и / или изменить его размер так, чтобы они загружали его.Я не был бы слишком обеспокоен, я написал несколько приложений, которые считывают сотни изображений base64 в считанные секунды без заметной задержки.

Для мобильного приложения это более выгодно (под этим я подразумеваюпроще реализовать в коде и поддерживать), использовать ссылки на статические файлы по сравнению с data-uri?

Вероятно, проще использовать data-uri, поскольку мобильному приложению потребуется преобразоватьв формате файла, который работает с ImageView или в любом другом виде, в котором они должны отображаться.

Если изображение используется только пользователем на его устройстве, вам действительно нужно, чтобы они загрузили его?(Вы могли бы, если бы вы хотели, чтобы одно и то же изображение профиля появлялось на каждом устройстве, которым они владеют) Или, может, оно просто хранится локально в хранилище данных приложений или в локальной базе данных SQLite?

...