FCon7折倒计时最后一周:日程已上线70%!查看详情>>> 了解详情
写点什么

Reddit 重写其 iOS 应用,改进性能、模块化和测试

  • 2018-09-25
  • 本文字数:841 字

    阅读完需:约 3 分钟

去年,Reddit 一直在努力改进其 iOS 应用的性能,同时使其适合更快的迭代周期,改善其测试覆盖率,提高其可扩展性。所有这些都是通过把应用原来的MVC 架构改造成 Model-View-Presenter(MVP)架构实现的。

原来的 MVC 设计其中一个主要的问题是容易导致大量的视图控制器,这是由于视图和它需要的控制器之间是紧耦合的。其中一个明显的影响是滚动性能退化,从60fps 降到了45-55fps,Reddit 工程师Andrew Rohn 这样写道。视图- 控制器的耦合导致任何改进视图实现的尝试都需要复制数千行的控制器代码。因此,Reddit 工程师开始重写其应用的某些部分,迁移到 Model-View-Presenter(MVP)设计。

虽然与 MVC 差别不大,但 MVP 实现了展示层和业务逻辑的更好隔离,如下图所示。

按照这个思路,Reddit 工程师把任何非视图逻辑从 UIViewController 中移除,并放到只负责视图 - 模型交互的 Presenter 类中。这样,UIViewController 就负责诸如处理用户输入、设置视图、绑定及管理视图生命周期这样的任务。Presenter 则关注与它本身有关的数据获取、转换以及展示。MVP 的关键是,Presenter 不会直接访问视图对象,而是通过一个接口访问。

迁移到 MVP 改进了代码的模块化和可重用性,使得业务逻辑可以独立于视图进行测试。与 MVC 相比,MVP 还有其他的好处,Rohn 重点指出,它更适合组合而不是继承,因为 Presenter 是一个从视图控制器分离出的组件,更容易重用或用不同的实现替换。最重要的是,MVP 促成了视图层实现的重写,借助 Texture 的多线程解决了滚动性能问题。Rohn 解释说,使用 Texture 的最大障碍是处理状态访问同步,这需要在 Presenter 忙于渲染输入 UI 时锁定状态。

MVP 只是众多 MVC 迁移选项中的一个。如果你对 iOS 应用架构的多种可选方法的比较分析感兴趣的话,可以读下 Chris Eidhof、Matt Gallagher、Florian Kugler 合著的 App Architecture, iOS Application Design Patterns in Swift

查看英文原文: How Reddit Rewrote Their iOS App to Improve Performance, Modularity, and Testing

2018-09-25 19:001301
用户头像

发布了 1008 篇内容, 共 364.9 次阅读, 收获喜欢 337 次。

关注

评论

发布
暂无评论
发现更多内容

【得物技术】无侵入式mock平台在得物的实践

得物技术

测试 数据 得物技术 Mock hulk

线程有哪些状态,彼此之间如何切换

武哥聊编程

Java 多线程 28天写作

就这?Object类一点不难理解

后台技术汇

28天写作

Cisco路由器调试命令大全,看完就全部学会!

《程序员修炼之道》- 务实的方法(4)

石云升

程序员 28天写作

管理笔记[1]:成为管理者的开端“以人文本“

L3C老司机

全球首例银行“大型机”下移背后

数据君

《王者荣耀》背后的数据秘密

数据君

交易系统架构演进之路:服务治理

比伯

Java 编程 程序员 架构 技术宅

驶向数字智能的瀚海,“懂行人”助力石油人乘风破浪

脑极体

在世界球场一球成名:HMS 生态为游戏开发者送出的助攻

脑极体

GTX1060安装TF2-GPU

IT蜗壳-Tango

七日更

如何为多元化的产品场景选择完美的色彩组合?

百度Geek说

产品 设计

使用nodejs构建Docker image最佳实践

程序那些事

Docker nodejs 程序那些事 docker image nodejs和docker

JS 防抖与节流

旗袍码农

创业失败启示录|神奇的茶学

阿萌

28天写作 创业失败启示录 青城

老同学遭遇电信诈骗纪实

石君

28天写作 电信诈骗

28天瞎写的第二百三十二天:转角遇到蚵仔煎

树上

28天写作

我们,让9300万人办事少跑一趟

数据君

Git操作文档

Paul

CSS(八)——CSS盒模型

程序员的时光

程序员 大前端 七日更 28天写作

程序员面试时一定要注意这五个陷阱!你记住了吗?

Java架构师迁哥

webpack | plugin机制详解

梁龙先森

大前端 webpack 28天写作

快速了解云原生架构

阿里巴巴云原生

架构 容器 微服务 云原生 k8s

Elasticsearch Bulk API 批量增删改查

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

Spark底层原理详细解析(深度好文,建议收藏)

五分钟学大数据

大数据 spark

架构师训练营第 2 期 第 6 周 作业一:CAP原理.md

老腊肉

架构师训练营第2期

半导体芯片小白基础知识(1) (28天写作 Day22/28)

mtfelix

芯片 半导体 集成电路 28天写作

姐夫深夜不睡觉就在看spring+mybatis这两份源码资料,吸引力就这么强大吗?

荒芜

Java spring 源码 mybatis spring Boot Starter

开发质量提升系列:系统建起来就能解决项目的困难?

罗小龙

最佳实践 方法论 28天写作

字节跳动:“挖”出来的技术战斗力

李忠良

28天写作

  • 扫码添加小助手
    领取最新资料包
Reddit重写其iOS应用,改进性能、模块化和测试_移动_Sergio De Simone_InfoQ精选文章