NEWS DETAIL

ios客户端架构

发布时间:2026/10/26 13:07:34 · 栏目:资讯中心

尧图网络原创建站知识分享正文
目录图片缓存框架设计简单介绍阅读时长统计复杂页面架构客户端整体架构设计图片缓存框架如何设计一个图片缓存框架首先我们要有一个管理者用于管理内存和磁盘上图片的存储然后还可以通过网络请求图片同时我们还需要一个解码的管理者用于图片解码和图片解压缩图片如何进行读写过程是怎样的我们可以使用图片URL的单向哈希值作为KEY流程如上依次通过内存磁盘网络进行获取内存上的设计需要注意哪些问题内存存储的空间大小我们可以通过图片使用的频次和图片的大小来设计对应的size我们可以使用队列这个数据结构来组织图片的存储淘汰策略这里可以使用多种方案这里介绍两种1. 队列先进先出的方式进行淘汰 2. LRU算法淘汰如在30分钟内是否使用过检查策略可以使用上述几种。其中定时检查不建议使用这里只是作为一种方法介绍在使用一个方法的时候我们一定要注意开销磁盘设计要注意什么问题磁盘的特点就是磁盘空间大读取效率低存储方式大小限制淘汰策略网络设计注意问题图片请求最大并发量同一时间请求的最大并发数量需要加以限制请求超时的策略如果发生超时一般我们选择再进行尝试如果再失败则放弃对于上层使用一张默认图片作为请求失败的默认显示请求优先级判断我们当下请求的图片是否是经常使用的来判断当前优先级图片编解码对于不同格式的图片图片解码我们使用什么来做我们可以使用策略模式对不同图片格式进行编解码在哪个阶段我们进行图片解码处理这里认为可以在磁盘读取后 和 网络请求返回后整体图片缓存框架的图片存储这里仅介绍一下我认为的处理方式如果内存中存在直接返回结果即可如果内存中不存在在磁盘中查找查找成功返回结果并存储到内存如果磁盘中查找不到进行网络请求网络请求返回后先存储到磁盘然后再从磁盘中解码拿到内存阅读时长统计问题如何设计一个时长统计框架面向上层业务页面适配 APP 内全部阅读交互场景对外提供统一调用入口页面式 适配分页阅读场景小说章节翻页、资讯分页以单页为计时单元触发时机页面可见 / 页面消失、翻页切换自动计算单页停留有效时长。流式 适配无分页长文本信息流、无限下拉小说分段滑动计时页面滑动暂停、切后台、退出时截断当前阅读时长片段。自定义式 开放给业务自定义场景弹窗阅读、局部浮窗、活动专题模块等非常规阅读场景由业务主动调用接口传入起止时间、业务标识。处理中心作为埋点数据统一调度中心负责内存缓冲、本地持久化、网络上报隔离业务层与 IO / 网络操作记录缓存内存队列短时缓冲埋点避免频繁磁盘 IO聚合合并同一章节多条短时记录减少上报条数节流策略攒满 N 条 / 间隔 X 秒再批量落盘。磁盘存储本地持久化SQLite / 二进制文件解决断网、APP 杀进程、崩溃丢失数据问题自动清理策略删除 7 天以上过期记录、超出容量阈值时先进先出删除旧数据上传器管控网络上报策略区分 WiFi / 移动网络动态开关上报批量打包上传失败指数退避重试服务端回执上传成功后删除本地对应磁盘记录断网时暂停恢复网络自动补发。复杂页面架构设计整体架构我们以微博的架构来作为案例进行讲解这套架构严格遵循分层单向依赖原则自底向上分为三层数据层EngineModel→ 业务逻辑层ViewModel→ 视图层ViewControllerView视图层view viewControllerview只接收上层传入的UI 专用渲染数据imageObj、label 富文本对象、按钮状态标记内部不做数据格式化、时间转换、富文本拼接用户点击、滑动、输入等交互事件不自行处理通过闭包 / 代理回调抛给上层 ViewController不直接持有 ViewModel。viewController是视图层和业务层的桥梁数据订阅监听 ViewModel 对外暴露的 UI 数据信号Combine/RxSwift 响应式信号收到新数据后刷新 TableView/CollectionView事件转发接收 View 抛上来的用户操作点赞、下拉刷新、点击头像、转发微博将指令转发给 ViewModel自身不实现业务业务逻辑层viewModelviewModel是业务逻辑唯一收敛层隔离视图层与底层数据层承担「数据转换」「业务处理」两大核心工作全程不依赖任何 UI 控件可脱离页面单独单元测试。数据层Engine Model数据层是架构最底层负责原始数据的获取、解析、持久化向上仅输出标准化业务 Model屏蔽网络、数据库底层细节。拆分为 Engine 数据引擎、业务Model 领域实体两部分。数据流网络数据一般情况下由server通过jsonkey - Value传递业务层使用id type对数据进行区分ViewModel接收业务 Model将其转换为UI 专用渲染数据UI 数据交给ViewController最终绑定渲染到View页面。同时沿着这条链路可以进行反向更新用户在 View 上产生交互事件先回调到 ViewControllerVC 将交互指令转发给 ViewModel然后ViewModel 执行对应逻辑包括本地修改和网络操作总结MVVM框架介绍model作为纯粹的数据载体数据变更通过绑定通知 ViewModelviewModel收敛全部业务逻辑监听 Model 的原始数据预处理为适配页面渲染的 UI 专用数据view层接收上层传入的 UI 渲染数据完成页面绘制同时捕获用户点击、滑动、输入等交互事件通过回调抛给 ViewController再由viewController转发进行业务处理RN数据流思想客户端总体架构设计独立于App的通用层比如时长统计的框架网络的第三方库等通用业务层比如自定义的一个UI自定义的一个组件中间层协调和解耦的作用业务之间的解耦方式openURL用字符串路由地址做中间隔离层统一路由中心分发请求。依赖注入通过中间层使用某一方法获取遵循某一协议的实例
✦

本文为尧图网络原创建站知识分享。想针对自身行业获取定制化建站方案?欢迎咨询,资深顾问免费为你出思路。

RELATED

相关 资讯推荐

MORE

更多 新鲜资讯

JMeter入门实战:从零构建HTTP接口性能测试脚本与结果分析
2026/10/25 15:06:20

JMeter入门实战:从零构建HTTP接口性能测试脚本与结果分析

1. 项目概述:从零开始,用JMeter搞定HTTP性能测试 刚接触性能测试的新手,或者是从功能测试转过来的朋友,一听到“压测”两个字,心里可能就有点发怵。工具那么多,概念那么杂,从哪儿下手呢&#xf…

Earendel: 一个纯TS写的POSIX兼容的微内核Web操作系统
2026/10/25 22:00:41

Earendel: 一个纯TS写的POSIX兼容的微内核Web操作系统

最近我用TypeScript写了一个运行在浏览器里的Web操作系统 Earendel(目前已知的距离地球最遥远的恒星)。开发它的初衷主要是为了Linux和操作系统课程的教学。市面上绝大多数Web OS项目,要么只是做了一个长得像Windows/macOS的网页UI拼盘&#…

5分钟掌握Windows防撤回神器:让微信QQ撤回消息无处遁形[特殊字符]
2026/10/25 8:02:16

5分钟掌握Windows防撤回神器:让微信QQ撤回消息无处遁形[特殊字符]

5分钟掌握Windows防撤回神器:让微信QQ撤回消息无处遁形🚀 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: http…

从零制作同人动画:技术路线、流程与实战避坑指南
2026/10/25 15:27:07

从零制作同人动画:技术路线、流程与实战避坑指南

1. 先搞清楚这个“粉丝动画”到底是什么,以及它能解决什么问题看到“五条悟VS宿傩/咒术回战粉丝动画”这个标题,很多人的第一反应可能是去找一个现成的视频。但如果你是一个想自己动手创作、或者想了解这类作品背后技术流程的创作者,这个标题…

闭源降价80%,开源却在涨价:AI定价的交叉路口
2026/10/25 22:24:04

闭源降价80%,开源却在涨价:AI定价的交叉路口

8月6日,两条价格曲线悄然交汇。 一条向下:OpenAI把GPT-5.6 Luna的输出价格从6美元砍到1.2美元/百万Token,降幅80%。另一条向上:同一天,DeepSeek公告全线涨价,措辞是"涨幅较大",非试探…

产线三防平板选哪个牌子?5个品牌实测告诉你别瞎买
2026/10/25 8:02:07

产线三防平板选哪个牌子?5个品牌实测告诉你别瞎买

产线三防平板选哪个牌子?5个品牌实测告诉你别瞎买经常有工厂朋友拿着网上的"三防平板十大品牌排行榜"来问我:到底选哪个?说实话排行榜看看就行,真正选型得看你产线什么场景。今天挑五个在产线数字化里用得比较多的品牌—…

看完这篇,还想了解更多?

预约尧图网络顾问一对一沟通,针对你的行业与现状给出建站建议,全程免费。

免费咨询