簡體   English   中英

ios App通過預先請求數據來提高網絡性能

[英]ios App improve network performance by requesting data up front

我正在編寫一個應用程序,該應用程序從一些網絡來源中提取數據:1)博客帖子列表(UITableViewController)2)視頻列表(具有嵌入式UIScrollView的UIViewController)3)圖像列表(具有嵌入式UIScrollView的UIViewController )

現在,有一個帶有菜單的主屏幕,當您按下其中一個按鈕時,destinationViewController(如上所述)是按需加載數據的工具。 我注意到這很慢,尤其是在使用蜂窩數據連接而不是wifi時。

我當時正在考慮創建一個類,該類預先請求所有數據,並在每次重新輸入應用程序時將其啟動。 有沒有人建議可以幫助我回答以下問題?

1)我可以使用任何類,框架或現有的i代碼在一個地方啟動這些請求嗎? 2)我的目標視圖控制器(如上所述)如何獲取數據? 3)如果我的目標視圖控制器碰巧在數據可用之前被調用,如何通知我數據已經准備好? 4)我應該采用更好的策略嗎?

感謝您的幫助。

謝謝,賈斯

1)RestKit通常被視為標准的Web交互框架之一http://restkit.org

2)RestKit提供了-[getObjectsAtPath: parameters: success: failure:]或post之類的方法,它們將提供成功的響應。 此外,它可以通過映射將響應直接轉換為各個對象。

3)通常,我會發布一個對該請求唯一的通知,任何感興趣的控制器都將收到通知,響應位於偵聽器內的notification.object 另外,大多數網絡請求都提供了一個回調處理程序,您可以在其中直接更新UI。

4)我建議不要先占式加載,因為您將資源用於可能不實際使用的東西。 我的建議是將您的呼叫分解到最小的級別,然后在發布通知時,將數據插入到UI中。

讓我煩惱的是,將創建您提到的請求類,並在AppDelegate的applicationDidFinishLaunching中啟動所有請求方法。 我可能還會為要獲取的每種對象類型創建自定義NSObject,並在每個請求類方法中,將獲取的數據轉換為所述對象,然后在下載每個對象時將其緩存到磁盤中。 然后在您的視圖控制器中,根據需要獲取緩存的對象。

緩存時,請確保使用每個100%唯一的密鑰緩存每個對象,因為在開始新的下載之前,您將要對當前本地緩存進行檢查。 我可能會將文件類型和文件名串在一起,然后將該字符串設置為緩存對象的鍵。

要在請求類方法中對當前緩存進行檢查,請顯示“如果當前緩存包含鍵對象:uniqueKey ...,則不執行任何操作。否則,請開始下載並在完成后緩存對象。”

另外,還要在視圖控制器中運行檢查,因為您還將要處理視圖控制器請求緩存對象但尚未下載的情況。 因此,類似“如果當前緩存中有key:key的對象,太好了!使用它。否則,請開始下載...緩存它...然后給我回電,以便我可以在使用時使用它向最終用戶顯示加載消息。”

我肯定還有其他情況需要處理,但這是我要遵循的理論方向。

編輯:

看看這個,它可能對您有很大幫助。 我認為它也使用Ego緩存(如果您不想編寫自己的緩存方法): https : //github.com/Infusion-apps/Download-Manager

編輯2:我也同意@RyanDignards點#4。 如果可能,請避免獲取不需要的數據。 但是,只有您真正了解您的UI / UX和應用程序功能,我的建議是假設您的最終用戶很有可能將使用您的應用程序僅僅是出於消費您提供的內容的目的。 因此,他們最有可能想要閱讀博客文章,觀看視頻等。來電取決於您,如果您認為用戶有更多機會查看所有內容,我會選擇預加載路線,因為沒有什么比煩惱更讓用戶生氣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM