2015-03-02 3 views
0

Когда пользователи запускают мое приложение, я запрашиваю из websocket список сеансов чат-системы. Когда WebSocket отвечает на запрос, я анализирую результаты, чтобы построить сессию, а затем я разобрать сообщение и добавить их к messageList каждой сессии, как это:Запуск загрузки на iOS

for (NSDictionary *session in sessions) { 
     for (NSDictionary *message in messages) { 

     ChatMessage *message = [[ChatMessage alloc] init]; 
     [listOfMessages addObject:message]; 

     } 
    } 

Это вызывает одну секунду отставания в запускать. Как я могу уменьшить его?

EDIT: В течение нескольких секунд процессор занимает 100%, это проблема, а не сетевая, потому что у меня все готово к JSON в рекламном массиве.

+0

ли вы с помощью асинхронных запросов? –

+0

Скорость будет зависеть от количества элементов, содержащихся в сеансах. Если это вызывает отставание в производительности, подумайте о перемещении петель в фоновый поток – humblePilgrim

ответ

0

Как его уменьшить?

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

  • Сохраните предыдущие данные. Возможно, данные, которые приложение загрузило в предыдущем сеансе, достаточно хороши, чтобы позволить пользователю действовать в течение нескольких секунд. Используя эти данные, даже если вы должны сообщить пользователю, что он обновляется, вы можете купить достаточно времени для обновления приложения.

  • Дайте пользователю что-то делать. Если вы абсолютно не можете двигаться вперед до тех пор, пока полный запрос не будет обработан, возможно, вы сможете предоставить полезное или интересное взаимодействие во время запроса. Даже показ прогресса во время загрузки данных может быть достаточно - все, чтобы приложение не выглядело так, будто в этот начальный период ничего не делается.

+0

Да, но это не слишком много данных. Это около 10 чатов с 10 сообщениями каждый. И проблема не связана с веб-запросом. Задержка возникает, когда у меня есть JSONS, и я должен сериализовать это как локальные пользовательские объекты. Как я могу переместить его в фоновое задание? – fustalol

+0

Пользователь может просматривать только один чат за раз, не так ли? Таким образом, имеет смысл загрузить тот, на котором они находятся в первую очередь, и загружать другие потом или даже только тогда, когда они нужны. Вы можете, конечно, десериализовать deta в фоновом задании - вы также должны загружать данные в фоновом режиме. Как это сделать, выходит за рамки этого вопроса, но есть много документации по фоновой обработке. – Caleb

0

вызовов это в фоновом очереди:
1. Используйте НОД и вызовите dispatch_async
2. Создайте свой собственный NSOperationQueue и добавить к нему NSBlockOperation

Смежные вопросы