iOS UIWebView loadRequest花费的时间太长
我的应用程序中有一个iOS UIWebView loadRequest花费的时间太长,ios,objective-c,uiwebview,wkwebview,request-timed-out,Ios,Objective C,Uiwebview,Wkwebview,Request Timed Out,我的应用程序中有一个UIWebView -(void)viewDidLaod{ NSURL *url = [NSURL URLWithString:@"some url string"]; NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadRevalidatingCacheData timeoutInterval:30.0]; myW
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踏板)
有时我会收到一些错误消息,如:
作为应用程序开发的新手,我完全不知道我的代码出了什么问题,是某个线程卡住了还是使用JavaScript/HTML5的网页影响了速度
我研究过Flipboard应用程序(iOS7版本),它使用webview加载内容页面,用户点击任何帖子后,它会立即响应。即使UIWebView
的加载速度通常很慢,也可以获得更快的性能
任何我应该知道的建议指南链接/背景知识将不胜感激
PS:因为另一个更好的东西WKWebView
仅在iOS8及更高版本中受支持
(在我的应用程序WKWebView
中,加载速度与UIWebView
相同,但在,
我仍然需要iOS7的UIWebView。使用performselector inbackground移动请求,否则它会阻止您的UI线程。另一点,UIWebView对象很重,那么,您打印的错误的
NSLocalizedDescription
说明了发生的情况:“HTTP重定向太多了。”
当您尝试访问某个网页时,服务器可以用重定向来回复,而不是提供您试图访问的网页,并为您应该转到的另一个网页指定一个地址。例如,访问缩短的链接通常会将您重定向到真实页面;受密码保护的网站可能会将您重定向到登录页面;或者重新设计的站点可能会将旧地址重定向到新位置
但是,如果不小心实现,此功能可能会无限重定向浏览器,从而锁定浏览器:例如,想象一下如果www.example.com/a
将您重定向到www.example.com/b
,并且www.example.com/b
将您重定向回www.example.com/a
。因此,浏览器对重定向的数量施加限制,通常为10或15个左右,以避免陷入此类循环中
您遇到的错误意味着,出于某种原因,访问该页面会导致浏览器连续多次重定向,以至于它认为一定是出了问题,于是放弃了
坐在这里,没有你的应用程序副本进行检查,我无法告诉你这些重定向是什么,更不用说为什么会发出这些重定向,但你至少可以使用Safari Web Inspector回答第一个问题。您可以在Safari的“开发”菜单中找到它,该菜单可以在Safari首选项中启用;该菜单中有一些选项可用于检查iOS设备或模拟器中的网页。您可能还需要在设备或模拟器的Safari设置中打开Web Inspector选项
Web Inspector的时间线工具可以告诉您发送的重定向。一旦你知道了这一点,你就可以弄清楚它为什么这么做,甚至可以调整你的应用程序来解决这个问题。(例如,您的UIWebView使用的用户代理字符串可能会混淆所涉及的服务器。不过,这是一个完全的猜测,所以不要假设这就是这里发生的情况。)检查您的internet速度。。。或者你的网页很重。。。请提供您正在添加的网页的url…该网页在帖子中,我尝试了3G/Wifi/4G,速度差异很小(1-2秒)使用GCD或performselectorinbackground将请求移动到另一个线程。。。否则它会阻塞您的UI线程。另一点,UIWebView对象很重,在页面上加载它可能需要时间。UIWebView请求不应该在主线程中,因为它来自UIKit?问题来自网站本身
UIWebView不是Safari
,它希望内容更轻。。我刚刚在桌面上的Chrome上打开了这个网站,加载它花了一些时间。。尝试剽窃内容,然后加载。。如果可能的话,请你为我们澄清一下你的意思?尤其是使用语句“UIWebView对象很重”?它有重量吗?另外,分享好的东西总是好的,而不仅仅是留下一条评论。我收到了新的错误:error Domain=NSURLErrorDomain Code=-999“操作无法完成。NSURL和CFURL使用相同的错误代码,这些错误代码列在CFNetworkErrors.h中。(在Xcode中,点击Cmd-Shift-O并键入“CFNetworkErrors.h”查看该文件。)-999已被kCFURLErrorCancelled,这意味着您这方面的某些人决定取消该请求。我已删除了带有附加信息的答案…这似乎不是网页端的问题,但某些UI内容阻止了该线程。无论如何,感谢您的建议!