繁体   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