簡體   English   中英

iOS UIWebView loadRequest花費太長時間

[英]iOS UIWebView loadRequest takes too long

我的應用程序中有一個UIWebView

-(void)viewDidLaod{
    NSURL *url = [NSURL URLWithString:@"some url string"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadRevalidatingCacheData timeoutInterval:30.0];        
    myWbView.delegate = self;
        [myWebView loadRequest:request];

        if ([timer isValid]) {
            [timer invalidate];
        }else{
            timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(addSec:) userInfo:nil repeats:YES];
             //counting seconds
}

-(void)webViewDidFinishLoad:(UIWebView *)webView{
    if (webView.isloading){
    NSLog(@"LOADING");//it takes 5-8 seconds in average keep logging this
    }else{
    NSLog(@"FINISH");//since the request started,8-15 seconds later this is logged out
    }
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
NSLog(@"LOAD FAIL: %@",error);
}

這是我要加載的網頁 ,我將webview控制器放在pageViewController ,每次我滑動到下一頁時,都會啟動新的加載請求。

(當滑出的視圖取消分配時,我會停止所有未完成的加載,因此不會阻塞Web界面)

有時我會收到一些錯誤消息,例如:

didFialLoadWithError中的錯誤

作為應用程序開發的新手,我完全不知道我的代碼有什么問題,是某個線程卡住了還是使用JavaScript / HTML5的網頁對速度至關重要?

我調查了Flipboard應用程序(iOS7版本),該應用程序使用webview加載內容頁面,在用戶點擊任何內容后立即響應。 即使UIWebView的加載速度通常很慢,也可以實現更快的性能。

我應該知道的任何建議的指南鏈接/背景知識將不勝感激。

PS:由於只有在iOS8及更高版本中才支持WKWebView, WKWebView是另一個更好的東西(在我的應用中, WKWebView加載速度與UIWebView相同,但在HTML5測試站點上得分更高),因此我仍然需要iOS7的UIWebView。

好吧,您打印的錯誤的NSLocalizedDescription指出了正在發生的事情:“ HTTP重定向太多。”

當您嘗試訪問網頁時,服務器可以給您重定向,而不是為您提供要訪問的頁面,而是重定向到另一個頁面,而您應該轉到該地址。 例如,訪問縮短的鏈接通常會將您重定向到真實頁面; 受密碼保護的網站可能會將您重定向到登錄頁面; 否則經過重新設計的網站可能會將舊地址重定向到其新位置。

但是,如果不仔細實施,此功能最終可能會通過無限重定向來鎖定瀏覽器:例如,假設www.example.com/a將您重定向到www.example.com/bwww.example.com/b將您重定向回www.example.com/a 因此,瀏覽器對其遵循的重定向數量施加了限制(通常為10或15個),以避免陷入此類循環。

您收到的錯誤表示,由於某種原因,訪問該頁面導致瀏覽器連續多次重定向-如此之多,以至於它只是假定一定有問題並放棄了。

坐在這里,沒有您的應用程序副本可供檢查,我無法告訴您這些重定向是什么,更不用說為什么要發布這些重定向了,但是您至少可以使用Safari Web Inspector回答第一個問題。 您可以在Safari的“開發”菜單中找到它,可以在Safari偏好設置中啟用該菜單; 該菜單中有一些選項可以檢查iOS設備或模擬器中的網頁。 您可能還必須在設備或模擬器的Safari設置中打開“ Web檢查器”選項。

Web檢查器的時間軸工具可以告訴您通過什么重定向發送。 一旦知道了這一點,您就可以弄清它為什么這樣做了,甚至可以調整您的應用程序來解決該問題。 (例如,您的UIWebView使用的用戶代理字符串可能會使所涉及的服務器感到困惑。不過,這是一個完整的猜測,因此,請不要以為這就是問題所在。)

使用performselector在后台移動請求,否則它會阻塞您的UI線程。 還有一點,UIWebView對象很重,

暫無
暫無

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

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