2010-09-26 2 views
1

В настоящее время у меня есть UITableViewController, который анализирует ответ JSON (используя TouchJSON), запущенный асинхронно с использованием ASIHTTPRequest.iPhone: самый быстрый способ запуска API-вызовов и разбора JSON?

Я очень обеспокоен выполнением моего приложения. 6 из 10 вызовов API в среднем приведут к таймаутам запроса и комбинированному времени для вызова вызова API и разбора вызова API для 20 объектов (каждый с около 10 атрибутов). занимает около 8-9 секунд.

Что я могу сделать, чтобы ускорить/упростить этот процесс? Любые методы/библиотеки, которые я должен искать, чтобы сократить время до 2 секунд или меньше?

+0

Помог ли вам какой-нибудь ответ? Просто нажмите галочку, чтобы отметить ее как принятое решение или проголосовать за нее. И, пожалуйста, проверьте свои другие вопросы и на возможные решения. Благодаря! :) (И да, это скопировано, так что новые пользователи знают о системе голосования.) –

+0

Кажется довольно тревожным, что вы получаете 40% ваших вызовов API, заканчивающихся таймаутом - я предполагаю, что вы имеете в виду HTTP-тайм-аут от ASIHTTPRequest? Вы знаете, почему это происходит? Кажется немного преждевременным говорить о ускорении/оптимизации, если запросы не работают в 40% случаев! – JosephH

+0

Вы оценили, где потрачено время? Если он в основном тратится на ожидание ответа, вам нужно оптимизировать серверную сторону. Могут ли запросы запускаться параллельно или они должны отправляться последовательно, потому что они зависят от результата предыдущего? Проводится ли он в разборе JSON? Затем вы должны постепенно анализировать ответ с каждым куском данных, которые вы получаете (я создал такой JSON-парсер). Вы получите более качественные ответы, если вы предоставите дополнительную информацию. – Codo

ответ

0

Вы запускаете запросы параллельно или последовательно? Вы можете упростить отправку множества запросов с помощью ASINetworkQueue, и вы можете сообщить о достигнутом прогрессе в целом (что может привести к тому, что 8-9 секунд почувствует себя лучше).

Но очередь, вероятно, займет больше времени, чем запуск всех запросов параллельно. Вам нужно будет использовать словарь request.userInfo, чтобы предоставить некоторый контекст для каждого запроса, чтобы ваш обратный вызов мог различать ответы.

Я большой поклонник ASIHTTPRequest, хотя, я не думаю, что вы найдете что-нибудь намного лучше.

+0

Я использую его для одного запроса API. Поэтому у меня есть один ASIHTTPRequest .. следовательно: request.delegate = self/[request startAsyncronous] ... – unicornherder