iOS网络连接优化

如何在APP端,让用户的联网体验更好?

最初在写网络接口时,考虑的问题比较少,最多加个延时,到了相应的时间点(如5秒,10秒),要是还不来信息,直接弹出提示:服务器无响应!!!

尼玛,一次无响应、两次无响应····n次无响应。要是老板也有这种体验,呵呵,赶快去优化。当然,这么基本的用户体验问题不能等到老板发火再处理,自己先认认真真地思考怎么解决。

优化第一招:联网前检测网络状况

苹果提供了Reachability 来检测网络状况,每次调用接口前,测试设备是否能联网:

Reachability *r = [Reachability reachabilityWithHostName:@"www.baidu.com"];
    if (r.currentReachabilityStatus == NotReachable) {
        NSLog(@"Cannot connect server.");
        return;
    }

Reachability对性能不会产生影响,因为它只是检测网络是否连接着,不会验证是不是真正连通。

    优化第二招:网络延时后检测真正地网络连接

如果想确认是否能连接到互联网,可以使用第三方的库“RealReachability“,在github上能搜到。它通过ping的方式,像服务器发起请求,来确认网络是否连通。使用类似于Reachability,由于请求网络比较耗时,它通过block返回网络信息:

[GLobalRealReachability reachabilityWithBlock:^(ReachabilityStatus status) {
        switch (status)
        {
            case RealStatusNotReachable:
            {
                [[[UIAlertView alloc] initWithTitle:@"RealReachability" message:@"Nothing to do! offlineMode" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil , nil] show];
                break;
            }

            case RealStatusViaWiFi:
            {
                [[[UIAlertView alloc] initWithTitle:@"RealReachability" message:@"Do what you want! free!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil , nil] show];
                break;
            }

            case RealStatusViaWWAN:
            {
                [[[UIAlertView alloc] initWithTitle:@"RealReachability" message:@"Take care of your money! You are in charge!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil , nil] show];
                break;
            }

            default:
                break;
        }
    }];

在项目的接口中,请求发出后5秒还没响应,则调用该方法检测网络状况,如果有网络就重新发起请求。

在实际测试过程中发现,在有网络时检测的结果经常是NotReachabel,这严重影响实际使用。后来仔细阅读了源代码,发现检测网络的延时只有2秒(PingHelper.m),在用户网络不流畅时,2秒太短了,于是改成了4秒,检测的效果有所提升。

[strongSelf performSelector:@selector(pingTimeOut) withObject:nil afterDelay:4.0f];

[self performSelector:@selector(pingTimeOut) withObject:nil afterDelay:4.0f];

然而,这个库还存在问题。在初次检测时,直接提示NotReachabel,并没有经过4秒的等待,需要到github上提出这个问题。

时间: 2024-10-05 06:19:27

iOS网络连接优化的相关文章

李洪强iOS下的实际网络连接状态检测

iOS下的实际网络连接状态检测 序言 网络连接状态检测对于我们的iOS app开发来说是一个非常通用的需求.为了更好的用户体验,我们会在无网络时展现本地或者缓存的内容,并对用户进行合适的提示.对绝大部分iOS开发者来说,从苹果示例代码改变而来的各种Reachablity框架是实现这个需求的普遍选择,比如这个库.但事实上,基于此方案的所有实现,都无法帮助我们检测真正的网络连接状态,它们能检测的只是本地连接状态:这种情况包括但不限于如下场景: 1.现在很流行的公用wifi,需要网页鉴权,鉴权之前无法

【读书笔记】iOS网络-优化请求性能

一,度量网络性能 1,网络带宽 用于描述无线网络性能的最常见度量指标就是带宽.在数字无线通信中,网络带宽可以描述为两个端点之间的通信通道每秒钟可以传输的位数.现代无线网络所能提供的理论带宽是很高的.不过请记住,运营商与网络设备提供商引用的带宽数字常常是该项技术的理论最大值,网络设备使用的实际带宽可能与这个最大值之间存在很大的偏差. 2,网络延迟. 度量网络性能的第2个因素是网络延迟,指的是网络包在两个端点间一次往返所需的时间.无线运营商很少会提到网络的延迟数据,不过延迟却会对应用的实际性能造成很

iOS下的实际网络连接状态检测:RealReachability

序言 网络连接状态检测对于我们的iOS app开发来说是一个非常通用的需求.为了更好的用户体验,我们会在无网络时展现本地或者缓存的内容,并对用户进行合适的提示.对绝大部分iOS开发者来说,从苹果示例代码改变而来的各种Reachablity框架是实现这个需求的普遍选择,比如这个库.但事实上,基于此方案的所有实现,都无法帮助我们检测真正的网络连接状态,它们能检测的只是本地连接状态:这种情况包括但不限于如下场景: 1.现在很流行的公用wifi,需要网页鉴权,鉴权之前无法上网,但本地连接已经建立: 2.

Nginx作为WEB服务相关配置(性能优化,网络连接,访问控制,虚拟主机,https等等)

编译安装nginx yum -y install pcre-devel groupadd -r nginx useradd -g nginx -r nginx tar xf nginx-1.6.2.tar.gz cd nginx-1.6.2 ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf--user=nginx --group=nginx --error-log-path=/var/log/nginx

iOS使用Reachability实时检测网络连接状况

//在程序的启动处,开启通知 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //..... //开启网络状况的监听 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name: kR

ios 判断网络连接方式

ios中判断网络连接方式的方法很多种,常用的大多是加入开源库,然后根据开源库中提供的方法进行判断. 下面提供一种方法:多多指教 NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; NSNumber *dataNetworkItemView = nil; for (id s

IOS检测网络连接状态(转)

IOS检测网络连接状态(转) 使用之前请从Apple网站下载示例:点此下载 然后将Reachability.h 和 Reachability.m 加到自己的项目中,并引用 SystemConfiguration.framework,就可以使用了. Reachability 中定义了3种网络状态: // the network state of the device for Reachability 1.5. typedef enum { NotReachable = 0, //无连接 Reach

iOS网络编程--NSConnection的同步连接与异步连接

1 // 2 // ZFViewController.m 3 // 0628-表单验证 4 // 5 // Created by zfan on 14-6-28. 6 // Copyright (c) 2014年 zfan. All rights reserved. 7 // 8 9 #import "ZFViewController.h" 10 #import "MBProgressHUD+MJ.h" 11 12 @interface ZFViewControll

优化网络连接速度的五个小技巧

工作中有很多不尽如人意的事情,网络速度慢就是其中之一.不幸的是,网速慢这个问题很多时候不是你能够简单解决的.诸如交换拥塞或网段拥塞(你的网络之外)等情况并不是你能够控制的.不过,这里仍然有几个小技巧,能够帮助你优化网络连接速度. 1 避免 DNS瓶颈 如果你的网络是活动目录环境,那么一定会有一个前置的DNS服务器.最近我看到不少企业都采用性能不怎么样的托管主机虚拟成多个服务器,并将DNS服务装入其中.之所以这样做,是因为很多人都认为DNS服务对系统资源的需求并不大,因此DNS服务器可以用很低的资