老司机 iOS 周报 #215 | 2022-08-29
老司机 iOS 周报,只为你出现有价值的信息。

你也可认为这个项目出一份力,如果发现有价值的信息、文章、东西等能够到 Issues 里提给咱们,咱们会赶快处理。记住写上引荐的理由哦。有建议和意见也欢迎到 Issues 提出。

文章

以小窥大:IO 卡顿探寻苹果文件系统

@JonyFang:从一个用户反馈的不寻常的 I/O 卡顿入手,发现苹果 APFS 的一个严重 bug。结合问题场景剖析问题,结合数据剖析成果,发现苹果的文件操作存在的坑,并给出了相应建议。在日常缓存规划中,也需求留心相应的这些点。

剖析问题

  • 寻觅要害库房
  • 构造必现代码
  • dtrace 剖析
  • Hopper 剖析
  • 对比 HFS+

结合已有数据剖析,发现苹果的文件操作里存在的坑:

  • tmp 在极端情况下或许会存在 >90G 的占用;
  • WebKit 随机 + 大众的办法删除网络缓存极端情况下的问题;
  • NSURLCache 在 diskCapacity 设置过大时存在的问题;
  • 密布删除文件导致 I/O 功能下降过快的问题;

为了避免上述这些极端情况下会导致的 I/O 功能骤降,移动端 APP 也需求合理的规划存储结构。如需求分层管理文件,尽量不将单个文件夹或单个文件搞得过大,一起也需求定时整理临时缓存目录,来进一步优化存储空间占用和优化 I/O 功率。

不改一行事务代码,飞书 iOS 低端机发动优化实践

@Leo:在功能优化中,并发是一个常见的手段。但 CPU 核数是有限的,意味着一起能履行的线程数量也是固定的,不合理的并发一方面会带来线程频频切换的开销,另一方面也会引起一些意料之外的抢占,导致主线程得不到履行。本文结合 Lark 在低端机上的实践,详细地讲解了线程 QoS 优化的原理,对功能优化很有参阅意义。

SwiftUI 顶用 Text 完成图文混排

@含笑饮砒霜:SwiftUI 提供了强大的布局才能,不过这些布局操作都是在视图之间进行的。当咱们想在 Text 中进行图文混排时,需求采用与视图布局不同的思路与操作办法。本文首要介绍一些与 Text 有关的常识,并经过一个实践事例,为大家梳理出在 SwiftUI 顶用 Text 完成图文混排的思路。

呼应式编程的杂乱度和简化

@Smallfly:呼应式编程思维能够降低异步编程出错的概率,但咱们要把它和呼应式结构区分开。本文从呼应式编程的概念出发,经过详细的代码事例,剖析了呼应式编程完成的杂乱度。最后介绍如何运用 Rx/Combine 和 AsyncSequence 结构对呼应式编程代码进行简化,并对这两种完成办法作出了对比。

基于汇编完成 objc_msgSend hook 办法耗时的计划

@kemchenj:测算函数 / 办法履行耗时,关于每一位开发同学来说,好像都是一道绕不过的坎。

本文经过引入货拉拉移动端研制过程中的痛点,产生办法耗时剖析的需求,在调研业内各种剖析东西和计划后,结合需求整合出他们的计划,感兴趣的同学能够点击前往阅览。

【译】本地优先软件 Local-first software

为了寻求更好的东西,咱们将许多使用程序转移到云端。但是,在云中,数据的所有权归于服务器,而不是用户,因此咱们成了自己数据的借用者。在云使用中创建的文件注定会在这些服务的创建者不再保护它们时消失,云服务是无法长期保存的。

在这篇文章中,咱们为未来的软件探求了一条新的发展道路。咱们展现了用户有或许保留对其数据的所有权和控制权,一起也受益于云相关的功能:无缝协作和从任何地方拜访。鱼和熊掌能够兼得。

Implementing Parts of the Swift Compiler in Swift

@张嘉夫:在过去几年中,Swift 编译器的一些组件现已开端用 Swift 完成,包括新的 Swift Driver(用于协调 Swift 编译)、正则表达式字面值 的解析、一些新的 SIL 优化 通道等。但因为某些原因,这些组件都是非必要的。

作者在这篇帖子中提议,开端要求现有的 Swift 编译器能够构建 Swift 编译器,以开启用 Swift 完成编译器中必要部分的大门,一起又避免让开发 Swift 编译器或移植到其他架构变得过于杂乱。作者随后还列出了对编译器顶用 Swift 完成的必要部分的要求,以及它们的用例,一起还提出了包含 Swift 代码的 Swift 编译器的详细构建流程,以及持续集成等。

抖音平台多产品代码隔离技能的实践与探求

@Barney:本文主要介绍了利用适配器模式进行代码隔离的整体架构思路和结构的完成思维。

介绍大致分为:

  • 规划思维
  • 进阶图纸
  • 工程视角
  • 实战脚手架

深化解析 Flutter 下一代烘托引擎 Impeller

@xuyafei:2022 年 6 月在 Flutter 3.0 版本中 Google 官方正式将烘托器 Impeller 从独立库房中合入 Flutter Engine 骨干进行迭代,这是 2021 年 Flutter 团队推进从头完成 Flutter 烘托后端以来,初次正式清晰了 Impeller 未来代替 Skia 作为 Flutter 主烘托计划的定位。

在这篇文章中,咱们测验从 Metal 着色器编译计划,矢量烘托器原理和 Flutter Engine 烘托层的接口规划三个维度去探求 Impeller 想要解决的问题和烘托器背面的相关技能。

  • Impeller 项目发动布景
  • Metal Shader Compilation 演进
  • 矢量烘托根底概念
  • Flutter DisplayList
  • Impeller 烘托流程和架构规划

东西

flutter_impression – Flutter 曝光事情检测东西

@水水:此东西能够便利的检测 Flutter Widget 的曝光事情,目前 Flutter 还没有其他相关的开源东西。 运用起来也很简洁:

ImpressionDetector(
  impressedCallback: () {
    debugPrint('impressed'); // 此处能够完成曝光时你要做的任务,比如:埋点等
  },
  child: MyWidget(),
)

ZReviewTender

@老峰:ZReviewTender 是基于 Ruby 免费开源的 App Reviews 监控机器人东西,可自动监控 App Store iOS/macOS App 与 Google Play App 的运用者最新谈论信息,其间 iOS 运用全新的 App Store Connect API 获得点评列表稳定牢靠,可运用 Github Repo & Gtihub Action 免费布置。

摸鱼周报

@摸鱼周报 #66:第 66 期摸鱼周报来了,一起来看下本期概要:

  • 本期论题:Shazam 迎来问世 20 周年
  • 本周学习:将 NSImage 转换为 PNG 的办法;在 macOS 中找到曾经最前沿的使用程序
  • 内容引荐:iOS 根底使用和优化内容引荐
  • 摸一下鱼:微软开源表情符大全,软件快捷键速查资源,以及能够制作猫咪插画的网站资源

重视咱们

咱们是「老司机技能周报」,一个持续寻求精品 iOS 内容的技能公众号,欢迎重视。

重视有礼,重视【老司机技能周报】,回复「2021」,收取 2017/2018/2019/2020 内参

一起也支撑了 RSS 订阅:github.com/SwiftOldDri… 。

阐明

表明需某东西, 表明修改引荐

预计阅览时刻: 很快就能读完(1 – 10 mins); 中等 (10 – 20 mins); 慢(20+ mins)