2012-11-13 37 views
1

在我的應用程序中,我正在執行多個不同的方法,所有這些方法都在不同的線程上,從請求中下載數據,解析它並將其添加到數組中。大多數這些方法從一個請求下載數據,但在方法上使用for循環並下載超過30個翻譯。如何使-sendSynchronousRequest更快?

但是,這提供了一個糟糕的用戶體驗,用戶不得不看一個旋轉的輪子,並閱讀一些愚蠢的隨機生成的拖延文本。

所以我想知道的是如何使同步請求(NSURLConnection)更快,這是最好的技術?因爲我提出了這麼多的請求,我應該立即切換到異步嗎?異步甚至意味着/做什麼,它會在這種情況下有所幫助嗎?

要完成的一切,應用程序最多可能需要在WiFi爲7秒,最慢30秒的3G(在新加坡,其最壞的帶寬但是!)

那麼,如何改善?任何方法,技術,API的,請幫助!

謝謝!

回答

3

速度不會受到任何方式的影響,通過使用同步與異步。互聯網的速度是一樣的。

問題是,您絕不能在主線程上進行同步網絡調用。這樣做會鎖定用戶界面。最好的情況是你的應用出現鎖定到用戶(壞)。更糟糕的是,操作系統殺死你的應用程序無響應(壞)。

所有網絡應該在後臺完成。

如果在所有網絡訪問完成之前,您的應用程序無法真正進行,至少您可以放置​​一個「忙碌」屏幕,讓用戶知道發生了什麼。也許使用進度條讓用戶知道進程有多遠,或者顯示文件數量的「x of y」計數。什麼是適合你的應用程序。

但是,網絡訪問的速度不會改變。您將提供更好的用戶體驗。

這裏有很多關於如何進行異步文件下載的問題。許多人使用NSURLConnection和其他人使用第三方庫,這可能會使你更容易取決於你在做什麼。搜索一下。其中有幾個被列爲相關問題。

+0

好的,謝謝你,我在我的問題中說過,我不會在主線上同步所有不同的線程。生病了吧,這將是我最好的選擇 – MCKapur

3

解決這個問題的最佳方法是對我們進行異步調用。除了速度之外,您應儘可能避免使用同步請求。基本上,如果您正在使用同步,但在單獨的線程上,您正在執行已使用異步完成的工作。設置它的工作量會更多,但您可以同時發送所有同步請求,並且可以在不同的時間完成。可以同時發送多少個http請求是有限制的,但是iOS會限制這一點,您仍然應該看到大幅度的性能提升。

+0

因此,通過在單獨的線程上設置同步,它將基本上與主線程上的異步速度相同。 – MCKapur

+1

據我所知是的,但我不知道蘋果如何處理。我會想象它會工作,但不會被推薦。我想你正在嘗試這樣做,以避免用asych調用重新編寫代碼,但我強烈建議現在就花時間去做。這並不困難,你可以更好地處理這個問題,並可能有更好的錯誤處理。 – rooster117