Каковы оптимальные методы для быстрого ввода-вывода на медленных соединениях? - PullRequest
1 голос
/ 12 августа 2010

У меня есть мобильное приложение, которое работает с данными, но только через текст и изображения. В текущей версии каждый щелчок или прикосновение требует извлечения новых данных с сервера (appache / php). С задержкой в ​​сети это может занять 1-2 секунды для появления первого контента, что слишком долго.

Я слышал и рассматривал следующие варианты, но не уверен, что некоторые из них могут быть контрпродуктивными, или я что-то упустил?

  • Загрузить все данные с самого начала, в большую кучу с загрузочным экраном?
  • Запустить поток предварительной выборки, прогнозировать и загружать данные, которые могут потребоваться пользователю, в фоновом режиме?
  • Постоянно ли соединение с сервером открыто?
  • Загружать разные части данных в разных соединениях параллельно? (Аналог Facebook)
  • Использовать сильное сжатие данных?

Подробная статья по этому вопросу также будет хорошим ответом.

1 Ответ

4 голосов
/ 12 августа 2010

Я бы сказал, что большинство из этих предложений ... довольно средние.За исключением использования сжатия.Обязательно включите сжатие на веб-сервере, который вы используете.Вы определенно не хотите сохранить соединение открытым или иметь несколько соединений.Самой большой проблемой для мобильных устройств является задержка, а не пропускная способность, поэтому использование нескольких соединений не поможет, но быстро разряжает батарею.Что касается сохранения соединения, даже не думайте об этом.Это один из важнейших постулатов мобильной разработки - оставляйте соединение открытым только тогда, когда вам это нужно.

Практическое правило для мобильных тонких клиентов - загружать как можно меньше данных, когда это абсолютно необходимо.Вот несколько советов:

  • Не отправляйте много метаданных со своими данными.В случае JSON подумайте об изменении структуры, чтобы не отправлять имена полей для каждой записи.Для примера рассмотрим приведенный ниже JSON:
{
 success: true,
 data:[
   {ProductName: "Coca-Cola can", Weight: 380, imageUrl: "http://path.to/image.png"},
   {ProductName: "Gillete deodarant", Weight: 500, imageUrl: "http://path.to/image.png"}
 ]
}

Как вы видите, существует множество дублированных имен полей, вы можете избавиться от них, чтобы уменьшить полезную нагрузку, например:*

  • Уменьшите объем данных, которые отправляются каждый раз.Не отправляйте достаточно данных для 10 экранов одновременно.Предоставьте, может быть, два или три экрана и используйте бесконечную прокрутку или какую-то подкачку.

  • Изучите HTTP-кэширование.Убедитесь, что заголовки кэширования установлены, и убедитесь, что используемый веб-клиент уважает эти заголовки.

  • Кэширование агрессивно.Взгляните на любой твиттер-клиент для iPhone / Android.Они не загружают все видимые твиты каждый раз при запуске, они хранятся локально.

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