Как правильно кэшировать / обновлять управляемые данными приложения iPhone, которые используют удаленные базы данных? - PullRequest
0 голосов
/ 21 декабря 2009

Мое приложение ориентировано на данные и нуждается в частом обновлении. В настоящее время база данных MySQL выгружается в XML-файл через PHP, и при загрузке приложения оно загружает этот файл. Затем он загружает все значения в NSMutableArray внутри класса менеджера данных, к которому можно получить доступ в любом месте приложения.

В этом и заключается проблема, размер создаваемого XML-файла составляет около 400 КБ, и загрузка его в сети EDGE, по-видимому, занимает несколько минут, и даже для некоторых людей в 3G. Поэтому в основном я ищу варианты правильного кэширования или оптимизации процесса загрузки моего приложения.

Моя текущая мысль заключается в том, чтобы кэшировать весь XML-файл на жесткий диск iPhone, а затем просто передавать эти данные, пока пользователь просматривает приложение, и загружать новый XML-файл в фоновом режиме. Проблема заключается в том, что пользователь теперь всегда будет видеть данные предыдущего запуска, а также каждый раз загружать весь файл XML, если было изменено только одно поле, расточительно.

TLDR: загрузка данных из моего iPhone-приложения происходит медленно, как правильно минимизировать этот эффект?

Ответы [ 2 ]

2 голосов
/ 21 декабря 2009

Мне приходилось иметь дело с чем-то вроде этого в приложении, которое я разработал летом.

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

Затем каждый раз, когда пользователь снова подключается, он отправляет номер редакции на сервер, если номер редакции меньше номера редакции сервера, который он отправляет через новые данные (и только новые данные) с сервера, если то же самое тогда ничего не делает.

Это довольно просто, и, похоже, для меня это очень хорошо работает.

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

1 голос
/ 21 декабря 2009

Мое предложение было бы кэшировать данные в базу данных SQLite на iPhone. Когда приложение запускается, вы синхронизируете базу данных SQLite с вашей удаленной базой данных ... одновременно давая пользователю знать, что вы загружаете инкрементные данные в фоновом режиме.

Делая это, вы получаете следующее:

  1. Пользователи могут использовать приложение сразу с устаревшими данными.
  2. Вы даете пользователю знать, что поступают новые данные.
  3. Вы храните данные в более подходящем формате.

И как только самые последние данные загружены ... пользователь увидит их.

...