iOS 性能优化方案-弱网优化

news2024/11/24 9:03:58

一、iPhone手机弱网环境配置

 

选择现有网络状态

或自定义网络状态

设置参数:

每个参数的含义大致如下:

in bandwidth :下行带宽

in packet loss :下行丢包率

in delay :下行延迟(ms)

out bandwidth :上行带宽

out packet loss :上行丢包率

out delay :上行延迟

DNS delay :DNS解析延迟,这个功能安卓不知道怎么模拟

protocol :协议-- 可选Any、IPv4、IPv6

interface :接口--可选ALL、WLAN、Cellular

二、优化方案

1、必要的状态呈现

1.1、无网络提示

监听网络状态的改变,可用的 AFNetworking 的 AFNetworkReachabilityStatus。
无网络状态时,进行告知用户的处理。

1.2、加载网络请求前,添加“正在加载中的动画”

如MBProgressHUD

1.3、加载网络请求完成后,需要先移除网络状态动画,并增加判定空数据处理。(判定是网络原因,还是无数据的原因)

1.4、善用状态切换的通知,为界面做出不同的变化。

在 2G、3G、4G、5G、WiFi等不同的网络做出不同的状态图切换,或者交互切换。

2、网络请求优化

2.1、制定最合适的超时时间

对总读写超时(从请求到响应的超时)、首包超时、包包超时(两个数据段之间的超时)时间制定不同的计算方案,加快对超时的判断,减少等待时间,尽早重试。这里的超时时间还可以根据网络状态动态设定,例如在网络状态为 2G、3G、4G、5G、WiFi下设置不同的超时时间。

让用户可以取消长时间运行或者速度很慢的网络操作。

2.2、多子模块请求的“延迟性”

以用户等待容忍度不超过 2s 为原则,像首页这种多个业务模块一起呈现的页面,如果一次性请求完所有的接口数据,会等待很久,所以可以对多子模块,进行分段的“延迟”请求。

  • 优先模块:请求数据量少、业务上需要优先显示的。
  • 延后模块:数据量大、类似列表的多条数据,适合放置加载动画,时长上用户可接受性强,所以除了放在后面外,可做分页处理、滑动后的延迟加载处理。

2.3、固定模块加入缓存机制、或增量更新机制

对首页及特定一级页面进行数据缓存,在一定的有效时间内再次请求可以直接从缓存读取数据,也可避免空白页出现影响体验。
或者进行判断数据是否有增量变化,有点的话在插入动画的前提下,进行数据的更新。

2.4、多模块的重新加载操作

像一些多模块,模块之间相关联的复杂页面,多个模块会有多个请求,当某个请求失败需要添加“重新加载”的按钮时,建议所有请求重新请求一遍,防止模块之间关联的数据出现偏差,或者 UI 布局错乱。
所以,如果有做网络请求失败后,重新加载的按钮/下拉操作,建议是:

  • 多模块再各自请求一遍。
  • 复杂 UI 重新计算一下。

原因是:弱网环境,本身请求到的数据可能也不齐全,多个请求或许只能拿到部分数据,而大部分情况是,各模块是相辅相成的。

2.5、预加载设置“临界值”

根据当前 UITableView 的所在位置,除以目前整个 UITableView.contentView 的高度,来判断当前是否需要发起网络请求:在当前页面已经划过了 70% 的时候,就请求新的资源,加载数据;

2.6、从请求这个动作下手

优化DNS查询:应尽量减少DNS查询,做DNS缓存,避免域名劫持、DNS污染,同时把用户调度到“最优接入点”。
减小数据包大小和优化包量:通过压缩、精简包头、消息合并等方式,来减小数据包大小和包量。
优化ACK包:平衡冗余包和ACK包个数,达到降低延时,提高吞吐量的目的。

2.7、断线重连

在无线网络中有太多的原因导致数据连接中断了。这里可以使用CDN。
(CDN 是构建在数据网络上的一种分布式的内容分发网。 CDN 的作用是采用流媒体服务器集群技术,克服单机系统输出带宽及并发能力不足的缺点,可极大提升系统支持的并发流数目,减少或避免单点失效带来的不良影响。)

2.8、减少数据连接的创建次数

由于创建连接是一个非常昂贵的操作,所以应尽量减少数据连接的创建次数,且在一次请求中应尽量以批量的方式执行任务。如果多次发送小数据包,应该尽量保证在2秒以内发送出去。在短时间内访问不同服务器时,尽可能地复用无线连接。

3、用户体验优化

3.1、内容分先后显示

例如,一个业务模块文字图片都有的情况,加载可能一直卡在50%-90%的时候,那么先加载文字,再加载图片。

3.2、进度的驱使

不管网络条件如何,加载进度始终是从50%起,并且停留在大约98%进度左右的地方。

3.3、固定的 UI 显示布局,加载时可预加载虚拟布局视图

类似知乎,在加载时,“正在加载中的动画/视图”,改为主页面显示预加载的占位图。

3.4、弱网加载失败/空数据,可添加“重新加载”的按钮,或可增加下拉刷新操作

例如:请求无数据/网络失败,添加‘重新加载“按钮,让用户意识到处于“可控”状态,降低用户焦躁情绪。

4、图片加载优化

4.1、使用更快的图片格式

严格说也不算弱网下的优化,但一个更快的图片格式真的很重要!这里建议采用 WebP 格式。(WebP 格式,谷歌(google)开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有 JPEG 的2/3,并能节省大量的服务器带宽资源和数据空间。但 WebP 是一种有损压缩。相较编码 JPEG 文件,编码同样质量的 WebP 文件需要占用更多的计算资源。)

4.2、根据网络状态呈现不同精度的图

如(对于原图是 600X480 的图片):

  • 2/3G 使用低清晰度图片:下发 300X240,精度为 80 的图片;
  • 4G 普通清晰度图片下发 600X480,精度为 80 的图片;
  • WiFi 高清晰度图片(最好根据网速来判断,WiFi 也有慢的):下发 600X480,精度为 100 的图片。

4.3、SDWebImage 参数选项

根据使用场景,参照 SDWebImageOptions常量说明,对图片的加载进行。

4.4、不加载图片

弱网情况下,在一些不影响操作,并能通过简单文字的描述告知用户该区域的内容,可以不加载图片,待到网络流畅状态再进行图片的加载。当然这种方法要视情况而定,或者一般都在 APP 的设置选项,增加一个“弱网状态不显示图片”的按钮。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/588365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【解决】升级g++到8版本

升级g到8版本 g不提高到最新版本在一些操作会头文件报错,因此下面我们配置g编译器 要升级g编译器到版本8,您可以尝试以下步骤: 添加Developer Toolset存储库:在CentOS上,可以使用Red Hat Developer Toolset存储库来获…

PMP课堂模拟题目及解析(第15期)

141. 在新项目的干系人会议中,项目经理发现一名干系人对项目有抵触。项目经理记录这个问题,并对该干系人的参与程度评级。项目经理使用了哪项工具或技术来为干系人的参与程度评级? A. 干系人参与评估矩阵 B. 风险概率和影响评估 C. 人际关…

文件夹显示无法访问、拒绝访问需要权限的解决方法

为了简便管理资料,我们都会选择在电脑上建立文件夹来保存不同作用的资料。文件夹显示无法访问、拒绝访问需要权限的解决方法但是当我们遇到某些文件夹打不开无法访问、拒绝访问时该怎么办呢?这里和大家讲一个方法来解决遇到文件夹无法访问、拒绝访问的这…

Seata1.6.1的安装部署

一、业务系统(一个简单采购系统,模拟采购同时增加库存) 项目地址:JAVA学习代码: java学习代码,包括一些练习用的开源项目 二、部署TC服务 1、部署Seata的tc-server 1.1、下载 下载地址:下载中心 (seata.…

Rust语言从入门到入坑——(1)初窥Rust,这是个什么鬼!

文章目录 0 引入1、特性2、应用3、总结 0 引入 最近新闻来说,windows部分核心使用Rust语言重写,linux支持rust语言,我就在想什么魔力让该语言如此受大家喜爱,晚上搜了一下,对该语言最大的感触就是:入门难&…

APACHE-ATLAS-2.1.0 - ATLAS的RESTAPI?(四)

查看接口 1. 官方DOC:https://atlas.apache.org/api/v2/index.html 2. 官方SWAGGER:https://atlas.apache.org/api/v2/ui/index.html#/ 接口说明 (1)管理接口 ①. 查看服务器的状态 http://192.168.64.174:21000/api/atla…

什么是一致性哈希?一致性哈希是如何工作的?如何设计一致性哈希?

1.什么是一致性哈希?一致性哈希是如何工作的?如何设计一致性哈希?05-25 2.系统设计:从零用户扩展到百万用户05-28 收起 如果你有 n 个缓存服务器,一个常见的负载均衡方式是使用以下的哈希方法: 服务器索…

UE5的IK Rig重定向注意问题

推荐先把官方文档看仔细,明白IK Rig重定向原理,对理解UE5怎么进行动画骨骼重定向,以及重定向后骨骼出现问题应该怎么调整非常有帮助。 IK Rig重定向 主要功能点 IK Rig IK Rig的作用是定义两个转化关系中的源骨骼和目标骨骼的主要部件的骨…

【大数据之Hive】四、配置Hive元数据存储到MySQL

需求:   把Hive元数据写道MySQL的metastore数据库中(MySQL默认没有metastore数据库,需要提前创建:create database metastore;)   连接地址:jdbc:mysql//hadoop102:3306/metastore   驱动&#xff1a…

Spring Boot 如何处理分布式事务?

Spring Boot分布式事务处理 分布式事务是指跨多个数据库或服务的事务,它需要确保所有参与者都能以一致的方式处理事务。在微服务架构中,由于每个服务都有自己的数据库,因此实现分布式事务非常重要。在本文中,我们将介绍如何在Spr…

Three.js——七、Group层级模型

关于Group Group 层级模型 通过 THREE.Group 类创建一个组对象 group,然后通过 add 方法把网格模型 mesh1、mesh2 作为设置为组对象 group 的子对象,然后在通过执行 scene.add(group)把组对象 group 作为场景对象的 scene 的子对象。也就是说场景对象是 scene 是 …

计算机底层的密码读书笔记

线程池的理解协程的理解高并发服务器的考量内存管理函数调用与栈影响多线程性能的缓存问题 线程池的理解 重复创建和销毁线程会存在开销,线程过多会消耗大量内存,较多线程之间的切换也存在开销 线程池用来复用线程,控制线程数量 线程池中…

(二)K8S常见集群架构搭建

1.基于KubeAdm搭建多节点K8S集群 安装docker(主节点工作节点) # 1.安装 Docker CE 的依赖软件包: yum install -y yum-utils device-mapper-persistent-data lvm2# 2.设置阿里云镜像 sudo yum-config-manager --add-repo http://mirrors.al…

【C语言】【典例详解】【刷题】猜名次猜凶手【循环练习】

目录 猜名次问题 典例题目 题目分析: 代码实现: 运行结果: 猜凶手问题 典例题目 题目分析 代码实现: 运行结果: 猜名次问题 典例题目 猜名次: 5位运动员参加了10米台跳水比赛,有人让…

VM虚拟机配置

1、安装环境 1)需要安装的软件 2)安装vm 3)安装centos系统 2、VM虚拟机NAT模式上网设置 1)vm虚拟机设置 启动虚拟机选择【虚拟网络编辑器】 选择NAT模式,更改下面的子网IP,改成你需要的任何一个子网…

大数据:诞生大数据,概述、大数据软件生态,Apache Hadoop概述

大数据: 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其sql要学&#x…

专业的 Code 128 条码标签如何创建?

Aspose.Words是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。 Aspose API支持流行文件格式处理,并…

Linux 系统的中断子系统基本框架(一)

中断是大家用的最多的功能,不管是单片机还是 Linux 系统,都需要用到中断,对它的深入理解是非常必要的。 为什么需要中断? 答案:处理器的速度比外设快很多,内核必须要处理其他任务,只有当外设准…

在centos上安装splint

lint lint是最著名的C语言工具之一,是由贝尔实验室SteveJohnson于1979在PCC(PortableC Compiler)基础上开发的静态代码分析,一般由UNIX系统提供。 工具介绍 与大多数C语言编译器相比,lint可以对程序进行更加广泛的错误分析,是一…

Day56【动态规划】583.两个字符串的删除操作、72.编辑距离

583.两个字符串的删除操作 力扣题目链接/文章讲解 视频讲解 1、确定 dp 数组下标及值含义 dp[i][j]:以下标 i 为结尾的字符串 word1,和以下标 j 为结尾的字符串 word2,想要达到相等,所需要删除元素的最少次数为 dp[i][j] 2、…