摸鱼精选第 2 期
1. Flutter 图片内存优化实践
贝壳 App 团队在优化图片内存时的实践过程中,从 Flutter Engine 渲染图片的源码分析开始,先通过 AOP 的方式对 Image
的 cacheWidth
,cacheHeight
进行设置,这种方式能够减少内存占用,但存在图片释放的及时性、超大图没法解决内存峰值的问题。
最终解决方案是通过原生端做优化,外接纹理的方式。Android 端使用 Glide,iOS 端使用 SDWebImage。
Github 链接:https://github.com/LianjiaTech/bk_flutter_image
2. 贝壳 Flutter 调试工具 -FDB
FDB 的功能包含:
- 组件信息检查
- 内存详细数据的展示
- 内存泄漏自动检测
- FPS 检测
- 源码文件和源码具体行数的展示
3. C++20 四大特性之一:Module 特性详解
本文分为三部分
- 探究 C++ 编译链接模型的由来以及利弊
- 介绍 C++20 Module 机制的使用姿势
- 总结 Module 背后的机制、利弊、以及各大编译器的支持情况
4. C++20 四大特性之二:coroutines 特性详解
全文共三部分:
- 第一部分从概念上讨论协程与普通函数的区别;
- 第二部分通过两个完整的协程代码示例,并深入到编译器层面,深入解析 promise_type 及其工作流程;
- 第三部分介绍 co_await 的作用以及工作原理,该部分是本文最难理解的部分。
4.1 C++20 四大特性之三:concept 特性详解
模板的演进是 C++ 发展史中一条十分重要的线,笔者认为 concept 是这条线中最大的一个特性,本文将详细解读 C++ 的 concept 特性,以期对 C++ 有更深入的了解
5. 【EBook】µGo 语言实现——从头开发一个迷你 Go 语言编译器
本书尝试以实现 µGo 编译器为线索,以边学习边完善的自举方式实现一个玩具语言。
6. C++ 中的 PImpl 技巧
PImpl(Pointer to Implementation)是通过使用指针的方式将实现的细节进行隐藏,它的主要作用是将两个文件见的编译依存关系降至最低。
PIMPL 的优点
- 降低模块间的耦合度;
- 降低编译依赖,提高编译速度;
- 接口和实现分离,提高接口的稳定性。
拓展 1:PImpl Idiom in C++ with Examples 拓展 2:Qt 中大量使用 Impl,具体可见https://wiki.qt.io/D-Pointer中关于 Q_D 和 Q_Q 宏的解释。
7. Refresh session token of Auth0 with RxSwift and Moya
现在 App 的 HTTP 基本上都是基于 Auth0 实现的,登录的时候获取 access_token
和 refresh_token
。当access_token
过期时,需要刷新access_token
,一般会有一个专门的刷新 API,参数是refresh_token
。这个刷新操作在 UI 层面需要不让用户感知到,就是在access_token
过期时就显示登录界面,正确的做法是在 refresh_token
过期时,才跳转到登录界面。
Swift 项目的 HTTP 基本上都是基于 Moya 和 RxSwifM 实现,作者先自定义了一个 MoyaProvider
,然后 Override 了 func request(_ token: Target)
方法,这样可以在检测到状态码是 401
时,自动调用 refresh 接口,刷新成功之后,自动调用原来的接口。