摸鱼精选第 6 期
1. Redux-like state container in SwiftUI
Redux 的思想在开发 UI 的现代语言里都适用。
这是一个系列文章:
2. SwiftUI Stack Custom Center Alignment
每一行只有一个元素时,垂直居中很容易,但是当某一行有多个元素,需要指定某一个元素居中的时候就需要自定义了。
3. 不透明类型和协议类型之间的区别
作者针对 Swift 5.1 新增的特性 Opaque Types 进行梳理。
4. 企业微信超大型工程-跨全平台 UI 框架最佳实践
企业微信现在使用了大量的 Flutter 技术
- pigeon :和 native 通信时,需要定义接口协议,使用 pigeon 可以自动生成 method channel 的代码
- dart ffi
- 性能优化:图片缓存部分和 native 共享图片
- svg 和 iconFont 的使用
- 多语言框架
- 主题
5. 抖音 iOS 最复杂功能的重构之路--播放器交互区重构实践
本文以抖音中最为复杂的功能,也是最重要的功能之一的交互区为例,和大家分享一下此次重构过程中的思考和方法,主要侧重在架构、结构方面。
6. Redis 最佳实践:7 个维度+43 条使用规范,带你彻底玩转 Redis
作者从以下七个维度分析 Redis 的最佳实践优化:
- 内存
- 性能
- 高可靠
- 日常运维
- 资源规划
- 监控
- 安全
7. 深入了解 JavaScript 引擎精华
本文来自 Google 引擎 V8 工程师 Mathias 和 Benedikt 在 JSConf EU 2018 上的演讲。他们对所有 JavaScript 引擎中常见的一些关键基础内容进行了介绍。
全文共由五个部分组成:
- JavaScript 引擎工作流程:介绍 JavaScript 引擎的处理流水线,这一部分会涉及到解释器/编译器的内容,且会分点介绍不同引擎间的差别与共同点;
- JavaScript 对象模型;
- 属性访问的优化:通过 Shapes、Transistion 链与树、ICs 等概念的穿插介绍引擎是如何优化获取对象属性的;
- 高效存储数组;
- Take-aways:对全文内容做了一个小结,并给了两点建议。
8. iOS 微信全文搜索技术优化
目前 iOS 微信已经将这套新全文搜索技术方案全量应用到聊天记录、联系人和收藏的搜索业务中。使用新方案之后,全文搜索的索引文件占用空间更小,索引更新耗时更少,搜索速度也更快了,可以说全文搜索的性能得到了全方位提升。
9. 19 条跨端 c++ 开发有效经验总结
有点类似于阿里巴巴的Java 开发手册,更多的是一些规范的总结。
其实我认为每个 C++开发者都应该关注 Google C++ Style Guide,这是 Google 这种完全工程师文化的公司得出来的经验总结,是非常有参考意义的。
10. 压箱底的音视频学习资料以及面经整理
音视频算是程序开发里面专业性比较强的垂直领域了,这两年直播、短视频的飞速发展,对音视频开发人员的需求那是爆发性的,但是要入门这个不容易,要做好就更难了。难点主要在于编码,推流,解码,渲染,每一个都是很有挖掘潜力的。当然这里指的是自主研发,而不是用别人的 SDK。
音视频的终极目标就是用更小的带宽流量承载更高清的视频,更小的延迟。
11. 一位大佬对于 Qt 学习的最全总结(三万字干货)
前面一堆的插科打诨语录,从第三节的"开发经验总结"看起。Qt 现在发版本很快,整体来说对 C++开发者来说是比较友好的,尤其是 PC 桌面软件,包大小方面肯定小于 Electron 了,做一些耗性能的软件也比较适合。
不过看看作者踩过的坑也蛮多,在选型时要慎重。
12. Flutter Riverpod 全面深入解析
应该和和下一篇结合起来看,Riverpod 现在有点替代 Provider 的意思,两个库的作者都是同一个人,Riverpod 没有依赖 BuildContext
,在任何地方都可以使用。
现在跨组件状态管理的趋势是 InheritedWidget -> Provider -> Riverpod。
13. Flutter 状态管理-Provider 的使用和源码解析
Provider 现在 还是最流行的状态管理库,虽然有点被 Riverpod 超过的趋势。Provider 其实就有点生产者-消费者的概念,类似于 React 里面的 Context 用法,借助于 InheritedWidget
实现父与子之间的数据共享、实时变化。
作者最后还比较了一些其他的状态管理框架,比如 Redux 和 BLoC。
13. Swift 演进之路
作者列举了从 Swift 1.0 开始到 5.5 版本的主要特性。
其实也可以看官方 Document Revision History,里面的更新历史会更详细实时。
2019-03-25 更新了 Swift 5.0 版本,到现在差不多 3 年了。
14. The Complete Guide to SF Symbols
iOS 13 之后,系统增加了一些内置的SF Symbols矢量图标,类似于 Flutter 里面的内置 Material Disign 图标一样, 到 iOS 15 的时候已经有 3300 个符号了。
iOS 13 只有单色可以设置,iOS 15 可以分 2-3 层的渲染 模式,设置不同 的层设置不同的颜色。
Image(systemName: "questionmark.circle")
.resizable()
.foregroundStyle(Color.red)
.frame(width: 50, height: 50)
15. SwiftUI Custom Styling
SwiftUI 的组件有些样式的modifier
, 比如.buttonStyle()
,
.toggleStyle()
, .pickerStyle()
, .textFieldStyle()
。
但是不是所有的组件都是可以自定义的,需要XXXStyle
协议暴露公共接口makeBody
才行。比如ButtonStyle
的定义:
public protocol ButtonStyle {
associatedtype Body : View
@ViewBuilder func makeBody(configuration: Self.Configuration) -> Self.Body
typealias Configuration = ButtonStyleConfiguration
}
实现自己的 Button 样式就可以如下:
struct MyButtonStyleExample: View {
var body: some View {
VStack {
Button("Tap Me!") {
print("button pressed!")
}.buttonStyle(MyButtonStyle(color: .blue))
}
}
}
struct MyButtonStyle: ButtonStyle {
var color: Color = .green
public func makeBody(configuration: MyButtonStyle.Configuration) -> some View {
configuration.label
.foregroundColor(.white)
.padding(15)
.background(RoundedRectangle(cornerRadius: 5).fill(color))
.compositingGroup()
.shadow(color: .black, radius: 3)
.opacity(configuration.isPressed ? 0.5 : 1.0)
.scaleEffect(configuration.isPressed ? 0.8 : 1.0)
}
}
还有 toggle 组件的 ToggleStyle
也可以自定义。
PickerView、TextField 不能自定义。
作者最后还介绍了自定义组件的自定义样式,用类似原生的方式来写接口,有点复杂,需要借助@Environment
来更新样式。